分享的山 換個地圖打開成了海
Android開發中,偶然發現,用百度地圖分享出來的經緯度信息,再次用高德地圖、騰訊地圖打開,會出現幾百米甚至幾公里的偏移。
借用網絡相關評論 分享出來的明明是山,換個地圖打開變成海了
。
一、現象
打開百度地圖
:在地圖上選擇一個地點,查看其經緯度坐標。
這裡以我的老東家 網易北京研發中心
為例。
打開百度地圖坐標拾取系統
,搜索框輸入 網易北京研發中心
,獲取經緯度坐標為:116.282314,40.049229
。
打開高德地圖
,高德地圖逆地理編碼系統。
將百度地圖坐標拾取的經緯度信息
填入高德地圖逆地理編碼系統
中,如下圖所示,可以看到定位地址大約出現了一公里的偏移
。
打開騰訊地圖
,騰訊位置服務系統。
將百度地圖坐標拾取的經緯度信息
填入騰訊位置服務系統
中,如下圖所示,可以看到定位地址同樣出現了大約一公里的偏移,但騰訊地圖、高德地圖最終的定位位置保持一致
。
高德地圖坐標拾取器
//lbs.amap.com/demo/javascript-api/example/geocoder/regeocoding
百度地圖坐標拾取器
//api.map.baidu.com/lbsapi/getpoint/index.html
騰訊地圖坐標拾取器
//lbs.qq.com/getPoint/
猜想:
現象:
百度地圖
分享出來的經緯度信息,用高德地圖、騰訊地圖
打開出現了相同的偏移量
;但高德地圖、騰訊地圖
分享出來的經緯度信息,兩者之前可以互相使用。
這裡猜測:
高德、騰訊地圖應該使用了同一套坐標系統;百度地圖可能在該地圖的基礎上,使用了一套新的坐標系統,對坐標系主動進行了某種偏移操作。
二、坐標系
分別查詢高德地圖、騰訊地圖、百度地圖三家的開發者平台,發現:
高德地圖、騰訊地圖採用的是 GCJ02 坐標系
;百度地圖採用了 BD09 坐標系
;
那麼 GCJ02、BD09 坐標系有什麼區別?
想要了解 GCJ02、BD09 坐標系的區別,先了解一下國內主流的坐標系類型。
目前國內主流的坐標系類型有 WGS84、GCJ02、BD09
。
- WGS84
世界大地測量系統(World Geodetic System 1984)
是一種用於地圖學、大地測量學和導航(GPS全球定位系統)的大地測量系統標準。 - GCJ02
中國國家測量局02號標準(Guojia Cehui Ju 02)
,也稱為火星坐標系
。是中國國家測繪局制訂的地理信息系統的坐標系統,是在 WGS84 經緯度的基礎上執行加密算法而成
。因GPS得到的經緯度
直接在 GCJ02 坐標系下會定位到錯誤的地點
,有種到了火星的感覺,因此在坊間也將 GCJ02 戲稱為火星坐標系
。 - BD09
百度坐標系
,百度在GCJ02坐標系基礎上再次加密而成
。
國內主流地圖默認採用的坐標系?
了解了各坐標系的大概定義,那麼目前國內主流的地圖都默認採用了什麼坐標系統呢?
地圖 | 大陸、港澳 | 台灣省 | 海外 |
---|---|---|---|
百度 | BD-09 | WGS84 | WGS84 |
高德 | GCJ-02 | WGS84 | WGS84 |
騰訊 | GCJ-02 | WGS84 | WGS84 |
總結一句話:
中國大陸、港澳,使用GCJ02坐標系(百度除外,百度默認使用 BD09 坐標系);中國台灣省使用 WGS84 坐標系;海外地區使用 BD09 坐標系
;
以上表格數據依據:
百度地圖數據依據
//lbsyun.baidu.com/index.php?title=androidsdk/guide/coordtrans
高德地圖數據依據
//lbs.amap.com/faq/advisory/others/39840/?wd=WGS84&cateId=&page=&detail=true
騰訊地圖數據依據
//lbs.qq.com/mobile/androidMapSDK/developerGuide/attention
三、坐標系轉換
查看百度、高德、騰訊相關開發者平台,發現對應開發者平台均提供了GCJ02、BD09、WGS84
相關的坐標系轉化API。
百度地圖
百度地圖 坐標轉化API:
//lbsyun.baidu.com/index.php?title=androidsdk/guide/coordtrans
高德地圖
高德地圖 坐標轉化API:
//lbs.amap.com/api/android-sdk/guide/computing-equipment/coordinate-transformation/