[iOS] 地圖座標的坑
阿新 • • 發佈:2018-10-31
最近沒有更新文章,主要是有點忙(lan)。程式中用到了地圖的功能,這個之前做過LBS類的,顯示周邊的興趣點,當時一切正常,忽略了座標這個問題。
沒時間看的同學可以直接看結論:iOS使用CLLocationManager獲得的是地球座標(WGS84),需要轉換為火星座標(GCJ-02),工具下載地址
問題名稱:地圖座標系問題
表現症狀:iOS使用CLLocationManager獲得位置之後,在地圖上顯示會有漂移,傳送給安卓,顯示也不正常。
原因:GPS座標系統可以有多個版本
- 國際上通用的是地球座標 (WGS84),是GPS硬體裝置直接取得的座標。
- 國內標準是在地球座標的基礎之上加了偏移,稱為火星座標 (GCJ-02)。
- 國內廠商自己的座標系,如百度。
使用CLLocationManager取到的座標是地球座標,而顯示的時候,高德地圖以及Apple的MKMapView都使用的是火星座標。所以解決方案就是獲得地球座標後轉換為火星座標,這樣就可以用於在高德地圖上展示或不同客戶端之間傳輸了。換句話說,如果想在百度地圖上正確顯示,有兩個選擇:第一,使用百度的地圖SDK得到GPS座標,這樣直接是百度的座標系下的經緯度,當然可以正常顯示。第二,使用CLLocationManager獲取地球座標後使用 百度的座標轉換系統,將地球座標轉換為百度座標。
iOS轉換將地球座標轉換為火星座標有現成的解決方案,GitHub地址在此。