工作難免會接觸到地圖,然后又會接觸到同一個經(jīng)緯度,不同地圖之間會產(chǎn)生偏差的問題
PS:國內(nèi)的地圖可以直接使用地圖官方的api或者gpsspg的api進(jìn)行轉(zhuǎn)換,大概是要比網(wǎng)上的算法要準(zhǔn)的,我下面要說的是百度地圖獲取的國外經(jīng)緯度用算法轉(zhuǎn)換成騰訊的經(jīng)緯度,也就是GCJ-02的經(jīng)緯度。
說到不同地圖經(jīng)緯度不通用的原因,網(wǎng)上一搜一大把,而且講的也很高大上,這里就隨便說說:
WGS-84原始坐標(biāo)系,是國際通用的GPS的一個坐標(biāo)系
大致是國內(nèi)不能用正確的經(jīng)緯度,用的是被稱為 GCJ-02 (火星坐標(biāo)系)的東東,這也是騰訊,高德和谷歌在國內(nèi)用的一個坐標(biāo)系
百度則自己搞了一套, 在GCJ-02的坐標(biāo)系上進(jìn)行加密所使用的一種坐標(biāo)系 bd-09。
可以簡單的理解為?:
? ?? ?WGS-84(原始坐標(biāo)系) :國外使用的坐標(biāo)系
? ? ? GCJ-02?(火星坐標(biāo)系) :國內(nèi)大部分地圖所使用的坐標(biāo)系
? ??? BD-09?(百度坐標(biāo)系) :百度使用的坐標(biāo)系
這里不討論什么?
投影坐標(biāo)系統(tǒng)??或者?地理坐標(biāo)系統(tǒng)??什么的,有興趣的可以自行百度,我反正是弄不太懂的了
那么海外版的騰訊地圖國內(nèi)版的騰訊地圖有什么區(qū)別呢?百度地圖又是怎樣的呢?
我的理解(猜測)為:騰訊地圖在國內(nèi)的時候,自動使用GCJ-02(火星坐標(biāo)系),到了國外,則用的是WGS-84的坐標(biāo)系;因?yàn)橛抿v訊地圖的api經(jīng)緯度轉(zhuǎn)換的時候,你會發(fā)現(xiàn)在國外的經(jīng)緯度是原樣返回的。也就是說,國外的經(jīng)緯度并不需要轉(zhuǎn)換。
那么百度地圖就好玩了,國內(nèi)用的是BD-09的坐標(biāo)系,然而到了國外……用的貌似還是BD-09的坐標(biāo)系。不信的同學(xué)可以用百度地圖獲取一組國外的經(jīng)緯度,然后打開gpsspg的網(wǎng)站,輸入以后,你會發(fā)現(xiàn)同一組經(jīng)緯度,百度地圖和谷歌地圖顯示的位置是有偏差的。而如果你能打開騰訊的地圖的話,你會發(fā)現(xiàn)騰訊地圖顯示的坐標(biāo)和谷歌顯示的坐標(biāo)是一樣的。
結(jié)論:
騰訊地圖在國內(nèi)用的是GCJ-02的坐標(biāo)系,國外則是WGS-84的坐標(biāo)系。
百度地圖不管是海外還是國內(nèi),用的都是BD-09的坐標(biāo)系
然后上主菜,利用算法去將百度獲取到的BD-09國外經(jīng)緯度轉(zhuǎn)化為騰訊地圖國外WGS-84的經(jīng)緯度
ps:算法來自以下網(wǎng)站:https://www.oschina.net/code/snippet_260395_39205,圖片就不截了,有點(diǎn)長。
先將獲取的BD-09百度經(jīng)緯度轉(zhuǎn)換為GCJ-02火星坐標(biāo)系的經(jīng)緯度,方法 bd_decrypt($bdLat, $bdLon);
然后將得出來的GCJ-02 火星坐標(biāo)系經(jīng)緯度轉(zhuǎn)換為 WGS-84的經(jīng)緯度,方法 gcj_decrypt_exact($gcjLat, $gcjLon);
以上。