在项目的逻辑业务当中,有时候需要获取用户当前所在的地理位置。那么,我们怎么去获取用户的地理位置定位呢?
可以采用百度地图接口获取用户的地理位置定位。要使用该服务,你得先注册成为百度地图开发者。http://lbsyun.baidu.com/ 百度地图开放平台地址
注册成为开发者后,你会获取到百度地图给你的一个密匙key,这个密匙key就是你以后获取用户地理位置的一个凭证。
且使用该地图接口的时候要注意以下几点:
每一个开发者帐号每天使用普通IP定位服务和经纬度定位服务的使用次数是有限的,即配额有限。
每一个开发者帐号在每分钟内使用普通IP定位服务的次数是有限的,即并发量有限。
同一个帐号下的HTTP/HTTPS请求,配额、并发共享。
首先,我先讲解通过经纬度获取用户的地理位置信息。
1、获取地理位置定位(微信) wx.getLocation 接口
如果你熟悉微信开发,那么在微信开发当中,有一个接口权限叫 获取地理位置定位 该权限是包含在js接口中的,也就是说你要使用该服务你就得先注册微信网页的js接口服务。然后才能调用该权限(不熟悉的朋友可以先看看微信开发手册)。
1、通过该微信网页js接口 你可以拿到用户当前所在的地理位置信息(该接口调用了手机GPS地理位置定位接口,如果手机没有开启GPS,那么微信会提示该用户是否开启GPS地理位置定位的)的经、纬度(如 29.586331,106.311926)
2、从微信网页上拿到的经纬度和百度认可的经纬度是否区别的(因为双方遵循的标准不同),所以要进行坐标转换,调用百度的坐标转换接口将从微信获取的经纬度转换成百度认可的经纬度
3、将转换的经纬度,调用百度地理位置获取接口,获取用户当前所在地理位置。
如php源码
/**
* 经纬度转换
* @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;
}
/**
* @param
* $x $y 微信获取的经纬度
* $ak 百度地图key 通过注册成为开放者得到
*/
function getAddress($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 $result;
}
/*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;
}
//test
$x = '';
$y = '';
$ak= '';
var_dump(getAddress($x,$y,$ak));
明白了吧。先获取用户的经纬度,再获取用户具体的地理位置信息。 且获取到的地理位置精度很高。
2、通过普通IP定位地理位置
普通IP定位效果一般,只能针对IP返回大致位置信息,适用于对位置精度要求不高的应用。
@param
$ip 用户的ip地址
$ak 百度地图key
function getAddress($ip,$ak)
{
//调用百度地图接口
$apiUrl = "$api = "http://api.map.baidu.com/location/{$ip}?ak={$ak}&coor=bd09ll""; //百度地图接口地址
$jsonData = curlHttp($apiUrl); //curl 获取百度地理位置接口
$data = json_decode($jsonData,true); // 将返回的结果进行json处理
return $result;
}
觉得满意请打赏,您的十分满意是笔者前进的动力