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