研究並比較,三種定位結果(主要是討論GPS定位):android
1Google Maps + Android API的定位算法
2.百度地圖SDK+百度定位SDK編程
3.高德地圖SDK+高德定位SDK網絡
測試條件:國產Android手機。測試
2和3都比較靠譜,定位精度符合預期(室外GPS定位偏差在10米之內),固然因爲百度和高德的定位SDK中通常是混合定位,會結合利用網絡定位和後臺數據支持什麼的。加密
1的定位結果基本無效,顯示的位置和在地圖上標記的位置會有幾十米的差距。spa
雖然谷歌地圖能夠同時註冊多種定位方式,好比GPS和網絡定位同時開啓,而後手動編程選擇最佳位置,可是網絡定位的精度過低,GPS的精度雖然高可是存在固有誤差(精確但不許確),因此沒法拯救這種位置誤差。.net
因爲國家測繪局的規定,地圖座標必須加密,加入隨機的偏移。至少須要知足的一個標準叫GCJ-02。htm
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,若是配合百度地圖產品的話,須要注意座標系對應問題。
相關問題:
國際經緯度座標標準爲WGS-84,國內必須至少使用國測局制定的GCJ-02,對地理位置進行首次加密。
百度座標在此基礎上,進行了BD-09二次加密措施,更加保護了我的隱私。
百度對外接口的座標系並非GPS採集的真實經緯度,須要經過座標轉換接口進行轉換。
高德地圖的處理方式
大體也是和百度相似的:
http://developer.amap.com/location/faq
高德地圖的對外提供的座標都是通過國家測繪局加密處理的,符合國家測繪局對地理信息保密要求,所以若是使用GPS得到的原始座標在高德地圖顯示,會有誤差,須要將原始座標通過加密轉換,轉化爲高德座標。
(也不知道靠譜不)