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