微信公衆號開發之用戶地理位置座標轉百度座標(搜狗、google地圖座標轉百度地圖座標)javascript
咱們知道,Google地圖、soso地圖與百度地圖的座標是不同的,一般會差挺遠一段距離。所以咱們在微信中使用百度地圖導航等百度地圖API時,若根據微信獲取的用戶位置信息的話,獲得的結果一般是不許確的。這時咱們就須要把微信獲取的用戶位置座標轉換成百度地圖對應的座標才能夠。php
下面是咱們在微信公衆號中得到的用戶位置的XML數據包(用戶主動發送來的位置,開通高級接口的能夠主動獲取用戶信息,獲取結果參考這裏):java
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1351776360</CreateTime> <MsgType><![CDATA[location]]></MsgType> <Location_X>23.134521</Location_X> <Location_Y>113.358803</Location_Y> <Scale>20</Scale> <Label><![CDATA[位置信息]]></Label> <MsgId>1234567890123456</MsgId> </xml>
參數說明:git
參數 | 描述 |
---|---|
ToUserName | 開發者微信號 |
FromUserName | 發送方賬號(一個OpenID) |
CreateTime | 消息建立時間 (整型) |
MsgType | location |
Location_X | 地理位置維度 |
Location_Y | 地理位置經度 |
Scale | 地圖縮放大小 |
Label | 地理位置信息 |
MsgId | 消息id,64位整型 |
咱們須要作的是把 Latitude 和 Longitude 轉換成百度地圖對應的座標(示例):web
百度地圖座標轉化API組成說明(更多):ajax
服務參數說明算法
參數 | 含義 | 取值範圍 | 是否必須 | 默認取值 |
---|---|---|---|---|
coords | 源座標 | 格式:經度,緯度;經度,緯度…限制:最多支持100個格式舉例:114.21892734521,29.575429778924;114.21892734521,29.575429778924 | 是 | 無 |
ak | 開發者密鑰 | 是 | 無 | |
from | 源座標類型 | 取值爲以下:1:GPS設備獲取的角度座標;2:GPS獲取的米制座標、sogou地圖所用座標;3:google地圖、soso地圖、aliyun地圖、mapabc地圖和amap地圖所用座標4:3中列表地圖座標對應的米制座標5:百度地圖採用的經緯度座標6:百度地圖採用的米制座標 7:mapbar地圖座標;json 8:51地圖座標api |
否 | 默認爲1,即GPS設備獲取的座標 |
to | 目的座標類型 | 有兩種可供選擇:五、6。5:bd09ll(百度經緯度座標),6:bd09mc(百度米制經緯度座標); | 否 | 默認爲5,即bd09ll(百度座標) |
output | 返回結果格式 | json或者xml | 否 | json |
返回值說明數組
名稱 | 類型 | 含義 | 取值範圍 | |
---|---|---|---|---|
status | init | 狀態碼 | 正常0,異常非0,詳細見狀態碼說明 | |
result | json或者xml數組 | 轉換結果 | 與輸入順序一致 | |
x | float | 橫座標 | ||
y | float | 縱座標 |
下面上代碼:
<?php $postData = "<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1351776360</CreateTime> <MsgType><![CDATA[location]]></MsgType> <Location_X>23.134521</Location_X> <Location_Y>113.358803</Location_Y> <Scale>20</Scale> <Label><![CDATA[位置信息]]></Label> <MsgId>1234567890123456</MsgId> </xml> "; $object = simplexml_load_string($postData, 'SimpleXMLElement', LIBXML_NOCDATA); $lat = $object->Location_X; //緯度 $lng = $object->Location_Y; //經度 //這裏from參數用1會更加精準。1:GPS設備獲取的角度座標,wgs84座標; $q = "http://api.map.baidu.com/geoconv/v1/?coords={$lng},{$lat}&from=3&to=5&ak=你的API KEY"; $result = json_decode(file_get_contents($q));
echo "轉換前的經度:".$lng."<br/>"; echo "轉換後的經度:".$result->result[0]->x."<br/>"; echo "轉換前的緯度:".$lat."<br/>"; echo "轉換後的緯度:".$result->result[0]->y."<br/>"