思路:1.先用微信sdk的定位功能,获取到用户的经纬度

          2.把经纬度通过百度地图接口转换经纬度

         3.通过百度地图接口,通过转换后的经纬度获取对应的位置信息

一.微信公众好SDK使用

步骤一:绑定域名

先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

备注:登录后可在“开发者中心”查看对应的接口权限。

 

步骤二:引入JS文件

在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.2.0.js
<http://res.wx.qq.com/open/js/jweixin-1.2.0.js>

备注:支持使用 AMD/CMD 标准模块加载方法加载

 

步骤三:通过config接口注入权限验证配置

所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web
app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web
app的页面会导致签名失败,此问题会在Android6.2中修复)。
wx.config({ debug: true, //
开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识 timestamp: , // 必填,生成签名的时间戳 nonceStr: '', //
必填,生成签名的随机串 signature: '',// 必填,签名 jsApiList: [] // 必填,需要使用的JS接口列表 });
步骤四:通过ready接口处理成功验证
wx.ready(function(){ //
config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});
 

获取地理位置接口
wx.getLocation({ type: 'wgs84', //
默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02' success: function (res) {
var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90 var longitude =
res.longitude; // 经度,浮点数,范围为180 ~ -180。 var speed = res.speed; // 速度,以米/每秒计 var
accuracy = res.accuracy; // 位置精度 } });
具体查看微信skd文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
<https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115>

 

 前端获取经纬度信息,通过ajax给接口处理。
// 定位功能 function location_weixin() { // 获取地理位置接口 wx.getLocation({ type:
'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02' success:
function (res) { var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90 var
longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。 var speed = res.speed; //
速度,以米/每秒计 var accuracy = res.accuracy; // 位置精度 var openid = "<?=$openid?>";
$.ajax({
url:"../../2018_action/weixin_city_change/weixin_user_city_change_ajax.php",
type:'post', data:{action:1,x:longitude,y:latitude,openid:openid},
success:function(res){ return false; } }); }, cancel:function(){ return false;
} }); }
 

二 . 把微信经纬度转为百度
/** * 经纬度转换 * @param * int type 需要转换的目标类型 * int to 百度类型 * String $x,$y 经纬度 */
function getXy($x,$y,$ak,$type,$to) { //调用百度地图接口 $apiUrl =
"http://api.map.baidu.com/geoconv/v1/?coords={$x},{$y}&from={$type}&to={$to}&ak={$ak}";
$jsonData = curlHttp($apiUrl); $data = json_decode($jsonData,true); return
$data; }
三.利用经纬度,获取位置信息,百度地图key值需要去百度地图开放平台注册,创建应用。http://lbsyun.baidu.com/
<http://lbsyun.baidu.com/>
/** * @param * $x $y 微信获取的经纬度 * $ak 百度地图key 通过注册成为开放者得到 */ function
getAddress1($x,$y,$ak){ //转换成百度认可的经纬度 $res = getXy($x,$y,$ak,1,5); $y1 =
$res['result'][0]['y']; $x1 = $res['result'][0]['x']; //调用百度地图接口 $apiUrl =
"http://api.map.baidu.com/geocoder/v2/?location={$y1},{$x1}&output=json&ak={$ak}";
//百度地图接口地址 $jsonData = curlHttp($apiUrl); //curl 获取百度地理位置接口 $data =
json_decode($jsonData,true); // 将返回的结果进行json处理 return $data; } /*curl*/
function curlHttp($url,$https = false,$post = false,$post_data = array()) { $ch
= curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch,
CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_HEADER,0); /*是否post提交数据*/
if($post){ curl_setopt($ch,CURLOPT_POST,1); if(!empty($post_data)){
curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data); } } /*是否需要安全证书*/ if($https){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); } $output = curl_exec($ch);
curl_close($ch); return $output; }
 

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信