Android中高德地图与百度地图坐标转换
項目中實驗數據點取自高德地圖,它是火星坐標系統(下面會有解釋),而現在希望用百度地圖的SDK進行開發,兩套不同的規范自然需要進行轉換。如何解決這個問題呢?參考了網上很多人的博客和資料。
最終解決此問題用到的仍然是百度的官方文檔有關于坐標轉換的部分:
http://lbsyun.baidu.com/index.php?title=androidsdk/guide/tool#.E5.9D.90.E6.A0.87.E8.BD.AC.E6.8D.A2
坐標轉換
百度地圖SDK采用的是百度自有的地理坐標系(bdll09),因此開發者在做位置標注的時候,需要將其他類型的坐標轉換為百度坐標。相應的接口和轉換方式如下:
<span class="co1" style="color:#666666;font-style:italic">// 將google地圖、soso地圖、aliyun地圖、mapabc地圖和amap地圖// 所用坐標轉換成百度坐標 </span> CoordinateConverter converter <span class="sy0" style="color:#339933;">=</span> <span class="kw1" style="font-family:Consolas,monaco,'Courier New',Courier,monospace!important;color:#000000;font-weight:bold">new</span> CoordinateConverter<span class="br0" style="color:#0990;">(</span><span class="br0" style="color:#0990;">)</span><span class="sy0" style="color:#339933;">;</span> converter.<span class="me1" style="color:#06633;">from</span><span class="br0" style="color:#0990;">(</span>CoordType.<span class="me1" style="color:#06633;">COMMON</span><span class="br0" style="color:#0990;">)</span><span class="sy0" style="color:#339933;">;</span> <span class="co1" style="color:#666666;font-style:italic">// sourceLatLng待轉換坐標 </span> converter.<span class="me1" style="color:#06633;">coord</span><span class="br0" style="color:#0990;">(</span>sourceLatLng<span class="br0" style="color:#0990;">)</span><span class="sy0" style="color:#339933;">;</span> LatLng desLatLng <span class="sy0" style="color:#339933;">=</span> converter.<span class="me1" style="color:#06633;">convert</span><span class="br0" style="color:#0990;">(</span><span class="br0" style="color:#0990;">)</span><span class="sy0" style="color:#339933;">;</span> <span class="co1" style="color:#666666;font-style:italic">// 將GPS設備采集的原始GPS坐標轉換成百度坐標 </span> CoordinateConverter converter <span class="sy0" style="color:#339933;">=</span> <span class="kw1" style="font-family:Consolas,monaco,'Courier New',Courier,monospace!important;color:#000000;font-weight:bold">new</span> CoordinateConverter<span class="br0" style="color:#0990;">(</span><span class="br0" style="color:#0990;">)</span><span class="sy0" style="color:#339933;">;</span> converter.<span class="me1" style="color:#06633;">from</span><span class="br0" style="color:#0990;">(</span>CoordType.<span class="me1" style="color:#06633;">GPS</span><span class="br0" style="color:#0990;">)</span><span class="sy0" style="color:#339933;">;</span> <span class="co1" style="color:#666666;font-style:italic">// sourceLatLng待轉換坐標 </span> converter.<span class="me1" style="color:#06633;">coord</span><span class="br0" style="color:#0990;">(</span>sourceLatLng<span class="br0" style="color:#0990;">)</span><span class="sy0" style="color:#339933;">;</span> LatLng desLatLng <span class="sy0" style="color:#339933;">=</span> converter.<span class="me1" style="color:#06633;">convert</span><span class="br0" style="color:#0990;">(</span><span class="br0" style="color:#0990;">)</span><span class="sy0" style="color:#339933;">;</span>使用上面的代碼就能很好地進行坐標的轉化。
下面列舉其他牛人的一些內容:
大家都知道,美國GPS使用的是WGS84的坐標系統,以經緯度的形式來表示地球平面上的某一個位置,這應該是國際共識。但在我國,出于國家安全考慮,國內所有導航電子地圖必須使用國家測繪局制定的加密坐標系統,即將一個真實的經緯度坐標加密成一個不正確的經緯度坐標,我們在業內將前者稱之為地球坐標,后者稱之為火星坐標,具體的說明可以參看百度百科中關于火星坐標系統的解釋。
1.國內各地圖API坐標系統比較
| API | 坐標系 |
| 百度地圖API | 百度坐標 |
| 騰訊搜搜地圖API | 火星坐標 |
| 搜狐搜狗地圖API | 搜狗坐標* |
| 阿里云地圖API | 火星坐標 |
| 圖吧MapBar地圖API | 圖吧坐標 |
| 高德MapABC地圖API | 火星坐標 |
| 靈圖51ditu地圖API | 火星坐標 |
2.下面是百度官方對百度坐標為何有偏移的解釋
國際經緯度坐標標準為WGS-84,國內必須至少使用國測局制定的GCJ-02,對地理位置進行首次加密。百度坐標在此基礎上,進行了BD-09二次加密措施,更加保護了個人隱私。百度對外接口的坐標系并不是GPS采集的真實經緯度,需要通過坐標轉換接口進行轉換。
3.火星坐標系?(GCJ-02)?與百度坐標系?(BD-09)?的轉換算法
GCJ-02(火星坐標)和BD-09(百度坐標)
算法代碼如下,其中bd_encrypt將?GCJ-02坐標轉換成?BD-09坐標,?bd_decrypt反之。
[java] view plaincopy
4.地球坐標系?(WGS-84)?到火星坐標系?(GCJ-02)?的轉換算法
? WGS-84到GCJ-02的轉換(即GPS加偏算法是一個普通青年輕易無法接觸到的“公開”的秘密。這個算法的代碼在互聯網上是公開的,詳情請使用Google搜索"wgtochina_lb"?。
? 整理后的算法代碼請參考?https://on4wp7.codeplex.com/SourceControl/changeset/view/21483#353936?。知道了這個算法之后,就可以離線進行Google地圖偏移校正,不必像之前那么麻煩。
至于GCJ-02到WGS-84的轉換(即GPS糾偏),可以使用二分法。
總結
以上是生活随笔為你收集整理的Android中高德地图与百度地图坐标转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在华为云软件开发云上运行Python
- 下一篇: 详解Android布局中gravity与