Android地圖開發之地圖的選擇


  做lbs開發差不多快2年了,地圖相關的產品也差不多做了3個了,用到過的地圖包括google地圖、高德地圖、百度地圖、圖吧、Osmdroid,今天總結下,方便大家開發時選擇合適的地圖。

  首先說定位模塊選擇,高德地圖、百度地圖現在都有了單獨的地位sdk,且都支持全球定位,都是非常不錯的選擇。我現在做的項目對定位要求很高,現在的選擇是gps定位使用系統定位方式,基站定位使用百度定位,gps連接成功使用系統定位接口,gps斷開切換到百度基站定位。

  gps定位,百度和高德都用過,但是測試發現沒有同類產品統計的精度高,而且經常在有些機型出現問題,例如有些手機定位時,狀態欄定位狀態總是一閃一閃的,經常掉線,記錄軌跡飄移較大,后來換成系統接口后,穩定很多,用戶也反饋記錄的軌跡精確很多。還有百度地圖現在使用的定位sdk,返回的數據沒有海拔數據,這也是不使用百度gps定位的一個原因,不知道現在有沒修復。

  基站定位,感覺百度比高德數據返回的更快速點,地址解析或是搜索也是,不知道是不是百度的數據檢索及大數據處理能力強點,不過也沒仔細的對比測試,可能感覺不准確。

  其次說下地圖的選擇,我現在的產品使用的是百度矢量地圖和Osmdroid柵格地圖,因為主要是做戶外地圖,所以衛星地圖和等高線圖是必備,然后考慮到矢量地圖數據量很小,所以也加上了,現在可以做到百度矢量、google衛星地圖和OpenCycleMap一鍵切換,使用了2個地圖框架,接口封裝挺痛苦的。

  如果僅是做中國的地圖產品,百度、高德都是不錯的選擇,這2個現在的接口都基本和googel的接口一樣了,所以3者之間可以非常快速的切換。穩定性方面,我使用后的感受是google地圖>高德>百度,我自己有開發一個應用,最開始采用google地圖,后來google被牆了,換成高德,以前在google上使用沒問題的地方,切換后就報異常了,多了一些限制,比如向地圖添加一段軌跡,軌跡點必須大於2,並且必須設置圖標,不然就報異常,然而google就可以先添加,再設置數據(記錄軌跡時,剛開始沒軌跡點,所以會先向地圖添加一個軌跡,然后定位到了再不斷更新軌跡點數據)。百度最近一段時間迭代非常快,有時2-3星期就更新一個版本,經常更新后有一些問題,而且有幾次接口改動非常大(這個最坑爹了,給開發帶來了不少額外工作量),基本就是將以前百度的接口否定了,然后改成了google得接口,在接口方面,google還是牛一點,接口都成了參考標准。另外,有一個同事最近在使用高德地圖時,發現居然沒有MapViewLayoutParams,我找了下高德的接口也好像確實沒有,官方參考例子也沒有相關例子,這樣在地圖某一個坐標添加一個較復雜的View就很麻煩了,不知道是不是有其他方式。

  如果要做面向全球服務的產品,在Android上現在好像還沒有特別好的選擇。google被牆,而且必須手機要有Google Service Framework,百度和高德等國內地圖都只有中國的數據,似乎只有OpenStreetMap支持全球數據了。OpenStreetMap本身支持很多圖源,數據全球都有,不過主要是面向戶外的,城市地圖沒有其他地圖那么精細(當然也可以添加google的普通和衛星瓦片地圖的圖源),然后可以自定義一些其他圖源,有興趣的朋友可以看下github上面的一個開源框架osmdroid,這個框架網上有一些介紹的文章。

  圖吧地圖,以前公司的幾個產品用的是圖吧的地圖,做過一段時間的維護,和其他地圖沒什么有特色的地方,現在好像還沒矢量地圖,sdk很久沒更新了。

  最后,這幾個地圖做一個總結:

  googel地圖:gps坐標系,最穩定,衛星地圖精細,但是在中國服務被牆,且手機必須要有Google Service Framework,在中國基本不翻牆不root不可用;

  高德地圖:火星坐標系(gcj),穩定性不錯,支持全球定位,衛星地圖不精細(很多戶外區域放大沒衛星數據),不過最近有同事反饋沒有MapViewLayoutParams,可能在地圖某個坐標添加較復雜視圖比較麻煩,不知道是否有更新或者其他實現方式,大家選擇時可以先研究下。還有默認UI感覺沒百度精細漂亮。

  高德地圖我在github上面有一個開源小項目TheSceneryAlong:https://github.com/John-Chen/TheSceneryAlong,大家可以參考下;

  百度地圖:百度坐標系,衛星地圖不精細(很多戶外區域放大沒衛星數據),版本迭代較頻繁,不過最新版本已經很穩定了,支持全球定位,功能迭代較快,地圖數據加載很快。

  Osmdroid:柵格地圖,gps坐標系,可以自定義添加其他圖源(可能其他圖源得先轉換坐標系,例如google地圖圖源得先將gps坐標轉換成火星坐標,再在地圖顯示),有開源框架。

  除了使用sdk加載顯示地圖外,應該也可以通過webView加載map,通過js控制地圖,對於地圖圖層較為簡單的可以考慮下。

  嗯,先總結到這里,后面想到其他的再添加。如果寫的有什么問題,歡迎交流指教。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM