關於地圖座標和定位誤差

 

實驗背景:

  研究並比較,三種定位結果(主要是討論GPS定位):android

  1Google Maps + Android API的定位算法

  2.百度地圖SDK+百度定位SDK編程

  3.高德地圖SDK+高德定位SDK網絡

 

  測試條件:國產Android手機。測試

 

定位結果:

  2和3都比較靠譜,定位精度符合預期(室外GPS定位偏差在10米之內),固然因爲百度和高德的定位SDK中通常是混合定位,會結合利用網絡定位和後臺數據支持什麼的。加密

  1的定位結果基本無效,顯示的位置和在地圖上標記的位置會有幾十米的差距。spa

  雖然谷歌地圖能夠同時註冊多種定位方式,好比GPS和網絡定位同時開啓,而後手動編程選擇最佳位置,可是網絡定位的精度過低,GPS的精度雖然高可是存在固有誤差(精確但不許確),因此沒法拯救這種位置誤差。.net

 

緣由分析:

  因爲國家測繪局的規定,地圖座標必須加密,加入隨機的偏移。至少須要知足的一個標準叫GCJ-02htm

  GCJ-02參見百度百科:blog

  GCJ-02是由中國國家測繪局制訂的地理信息系統的座標系統。
  它是一種對經緯度數據的加密算法,即加入隨機的誤差。
  國內出版的各類地圖系統(包括電子形式),必須至少採用GCJ-02對地理位置進行首次加密。

 

Google Maps爲何出錯:

  Google Maps的原生座標是WGS-84,國際座標,可是中國區域的部分,爲了符合中國測繪法律規定,加入了偏移,知足了GCJ-02標準。

  而Android API得出的定位結果值,是GPS讀出的,是沒有加入偏移的,是WGS-84座標

  因此座標體系的不對應致使了偏差。

 

 

百度地圖爲何是對的:

  百度定位SDK部分介紹

http://developer.baidu.com/map/geosdk-android-classv4.0.htm#import.E7.9B.B8.E5.85.B3.E7.B1.BB

  能夠經過public void setCoorType ( String )方法定義返回位置值的座標類型。

  支持返回若干種座標系,包括國測局座標系、百度座標系,須要更多座標系請聯繫百度。

  目前這些參數的代碼爲

  返回國測局經緯度座標系 coor=gcj02

  返回百度墨卡託座標系 coor=bd09

  返回百度經緯度座標系 coor=bd09ll

  百度手機地圖對外接口中的座標系默認是bd09ll,若是配合百度地圖產品的話,須要注意座標系對應問題。

 

  相關問題:

http://developer.baidu.com/map/geosdk-android-qa.htm#.E7.99.BE.E5.BA.A6.E5.9C.B0.E5.9B.BE.E5.AE.9A.E4.BD.8DAPI.E4.BD.BF.E7.94.A8.E4.BB.80.E4.B9.88.E5.9D.90.E6.A0.87.E7.B3.BB.EF.BC.9F

  國際經緯度座標標準爲WGS-84,國內必須至少使用國測局制定的GCJ-02,對地理位置進行首次加密。

  百度座標在此基礎上,進行了BD-09二次加密措施,更加保護了我的隱私。

  百度對外接口的座標系並非GPS採集的真實經緯度,須要經過座標轉換接口進行轉換。

 


高德地圖的處理方式

  大體也是和百度相似的:
  http://developer.amap.com/location/faq
  高德地圖的對外提供的座標都是通過國家測繪局加密處理的,符合國家測繪局對地理信息保密要求,所以若是使用GPS得到的原始座標在高德地圖顯示,會有誤差,須要將原始座標通過加密轉換,轉化爲高德座標。

 

一些參考資料:

  (也不知道靠譜不)

  http://kongxz.com/2013/10/wgs-cgj/

  轉換算法:http://blog.csdn.net/coolypf/article/details/8686588

相關文章
相關標籤/搜索