自定义百度地图类——把腾讯经纬度转成百度经纬度
2022-05-31PHP
在做微信公众号及微信小程序,遇到使用微信JSSDK获取的经纬度,如果需要调用百度接口来获取经纬度信息,直接传通过微信JSSDK获取的经纬度,返回地址偏差非常大,为了提高精准度,我们需要把企鹅经纬度 转成 百度经纬度
在做微信公众号及微信小程序,遇到使用微信JSSDK获取的经纬度,如果需要调用百度接口来获取经纬度信息,直接传通过微信JSSDK获取的经纬度,返回地址偏差非常大,为了提高精准度,我们需要把企鹅经纬度 转成 百度经纬度
详情查看百度地图文档,
微信h5页面调用微信JSSDK代码
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script><!--调用JSSDK-->
<script>
wx.ready(function () {
wx.getLocation({
success: function (res) {
var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
var speed = res.speed; // 速度,以米/每秒计
var accuracy = res.accuracy; // 位置精度
// 下面可以写代码 发送将通过微信JSSDK获取到的经纬度异步请求到php进行操作
},
cancel: function (res) {
alert('用户拒绝授权获取地理位置');
}
});
});
</script>
PHP代码,把腾讯经纬度转成百度经纬度
<?php
class BaiDuMaps{
// 百度地图密钥
private $ak;
public function __construct()
{
$this->ak = 'ZQiFErjQB7inrGpx27M1GR5w3TxZ64k7';
}
public function httpGet($url='') {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
// 把企鹅经纬度 转成 百度经纬度
// 解决企鹅经纬度与百度地图偏差问题
public function qqToBaiDu($longitude='',$latitude=''){
$url = 'http://api.map.baidu.com/geoconv/v1/?coords='.$longitude.','.$latitude.'&from=1&to=5&ak='.$this->ak;
$res = $this->httpGet($url);
$res = json_decode($res,true);
if($res['status']==0){
$data = array(
'longitude' => $res['result'][0]['x'],
'latitude' => $res['result'][0]['y']
);
return $data;
}else{
return false;
}
}
// 通过获取的百度经纬度获取详细地址
// 获取到的地址是一个列表
public function getAddressByLngLat($longitude,$latitude){
$url = 'http://api.map.baidu.com/geocoder/v2/?location='.$latitude.','.$longitude.'&output=json&pois=1&ak='.$this->ak;
$data = $this->httpGet($url);
$data = json_decode($data,true);
if($data['status']==0){
return $data;
}else{
return false;
}
}
// 通过详细地址获取 百度经纬度
public function getLngLatByAddress($address){
$url = 'http://api.map.baidu.com/geocoder/v2/?address='.$address.'&output=json&ak='.$this->ak;
$res = $this->httpGet($url);
$res = json_decode($res,true);
if($res['status']==0){
$data = array(
'longitude' => $res['result']['location']['lng'],
'latitude' => $res['result']['location']['lat'],
);
return $data;
}else{
return false;
}
}
// 测试方法
public function test(){
// 公司
$longitude = '113.9521';
$latitude = '22.59123';
$data = $this->qqToBaiDu($longitude,$latitude);
if($data!==false){
$longitude = $data['longitude'];
$latitude = $data['latitude'];
$address = $this->getAddressByLngLat($longitude,$latitude);
echo '<pre>';
var_dump($address);
}
}
}
$b = new BaiDuMaps();
$b->test();
$address = "中国广东省深圳市南山区大学城创意园内";
var_dump($b->getLngLatByAddress($address));
很赞哦! ()
