1柜候,背景
原生native提供的獲取當(dāng)前所在的經(jīng)緯度坐標(biāo)搞动,傳到后端進(jìn)行校驗(yàn),后端使用的是百度地圖改橘。發(fā)現(xiàn):安卓獲取經(jīng)緯度精度沒問題滋尉,但ios獲取的精度總是不對玉控。
2飞主,問題分析
經(jīng)資料收集,發(fā)現(xiàn)不同手機(jī)系統(tǒng)采用的是不同地圖公司的數(shù)據(jù),各地圖公司使用的是不同坐標(biāo)系碌识。而公司native底層碾篡,安卓是使用的百度地圖,iOS是使用的高德地圖筏餐,因此安卓手機(jī)獲取的經(jīng)緯度可直接使用开泽,而IOS則需要進(jìn)行坐標(biāo)轉(zhuǎn)換。
· 百度地圖使用的是BD-09坐標(biāo)系
· 高德地圖魁瞪、騰訊地圖以及谷歌中國區(qū)地圖使用的是GCJ-02坐標(biāo)系
3穆律,解決方案
筆者這里使用gcoord庫,通過把GCJ-02坐標(biāo)轉(zhuǎn)為BD-09坐標(biāo)导俘。按理這時(shí)候問題應(yīng)該解決了峦耘。然而,轉(zhuǎn)換后得到的經(jīng)緯度還是和目標(biāo)經(jīng)緯度有差距旅薄。問題出在哪辅髓?
https://github.com/hujiulong/gcoord
原來,原生開發(fā)調(diào)用底層api, 如CLLocationManagger少梁,獲取到的是WGS-84坐標(biāo)系的經(jīng)緯度洛口。因此轉(zhuǎn)換過程應(yīng)該是把WGS-84坐標(biāo)轉(zhuǎn)為BD-09坐標(biāo)。
使用 WGS84 坐標(biāo)系統(tǒng):
· 蘋果的 CLLocationManager 獲取的坐標(biāo)
· HTML5 Geolocation
4凯沪,關(guān)于坐標(biāo)標(biāo)準(zhǔn)
WGS-84 - 世界大地測量系統(tǒng)
World Geodetic System, WGS 世界通用的坐標(biāo)系第焰,GPS設(shè)備得到的經(jīng)緯度就是在WGS84坐標(biāo)系下的經(jīng)緯度。
GCJ-02 - 國測局坐標(biāo)
火星坐標(biāo)系著洼,由中國國測局制定樟遣,對中國各地經(jīng)緯度進(jìn)行加密處理。
BD-09 - 百度坐標(biāo)系
百度地圖使用的地理坐標(biāo)系身笤,其在GCJ-02上多增加了一次變換豹悬,用來保護(hù)用戶隱私。