百度地圖坐標(biāo)轉(zhuǎn)換

首先, 我們了解一下為什么要坐標(biāo)轉(zhuǎn)換

國際經(jīng)緯度坐標(biāo)標(biāo)準(zhǔn)為WGS-84,國內(nèi)必須至少使用國測局制定的GCJ-02,對(duì)地理位置進(jìn)行首次加密。百度坐標(biāo)在此基礎(chǔ)上,進(jìn)行了BD-09二次加密措施,更加保護(hù)了個(gè)人隱私。百度對(duì)外接口的坐標(biāo)系并不是GPS采集的真實(shí)經(jīng)緯度,需要通過坐標(biāo)轉(zhuǎn)換接口進(jìn)行轉(zhuǎn)換。

其次, 我們?cè)诰W(wǎng)上搜到有通過
http://api.map.baidu.com/ag/coord/convert?from=[0/2]&to=4&x=緯度&y=經(jīng)度
這種URL來進(jìn)行轉(zhuǎn)換的, 其中0代表WGS-84即標(biāo)準(zhǔn)GPS設(shè)備返回的坐標(biāo), 2代表國測局的標(biāo)準(zhǔn), 顯然4就是百度地圖認(rèn)的坐標(biāo)了. 但我遍搜網(wǎng)絡(luò), 這個(gè)接口是沒有文檔的(但是確實(shí)可用). 因?yàn)闀?huì)碰到跨域的問題(CORS), 所以就用了jQuery中script標(biāo)簽跨域的方式來執(zhí)行, 結(jié)果這個(gè)腳本也被百度”回收”了, 當(dāng)然, 網(wǎng)上還是有痕跡的, 我把它保存了一下, 見此gist.
我沒在這上面花太多時(shí)間, 并沒有測它支不支持批量轉(zhuǎn)換(看網(wǎng)友寫了一個(gè)transMore, 是必須批量送入, 但底層還是一次次分別請(qǐng)求, 不合我意).

而事實(shí)上, 百度已經(jīng)提供了文檔化的坐標(biāo)轉(zhuǎn)換接口, 并且原生就支持批量請(qǐng)求. 顯然, 我們應(yīng)該用文檔化的方法, 只是這種用法需要申請(qǐng)成為一個(gè)開發(fā)者, 添加一個(gè)應(yīng)用. 這不是小事么, 于是我小包裝了一下, 見此gist.

僅僅有一點(diǎn)小要求, 就是傳入的坐標(biāo), 鍵名分別是lon(經(jīng)度)和lat和(緯度), 并且可以傳入一個(gè)(傳入一個(gè), 返回也是一個(gè)), 或者一組

轉(zhuǎn)換一個(gè)坐標(biāo):

BMap.Convertor.translate({lon:lon, lat:lat}, 1, 5, bdkey, function (point, status, message) {
    if(status) return show(message || "轉(zhuǎn)換坐標(biāo)出錯(cuò):"+status, true);
    var curmarker = new BMap.Marker(point);
    baidumap.addOverlay(curmarker);
});

一組坐標(biāo):

BMap.Convertor.translate([{lon:lon, lat:lat},...], 1, 5, bdkey, function (points, status, message) {
    if(status) return show(message || "轉(zhuǎn)換坐標(biāo)出錯(cuò):"+status, true);
    // 遍歷points
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容