自定义百度地图类——把腾讯经纬度转成百度经纬度
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));
很赞哦! ()