日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android中高德地图与百度地图坐标转换

發布時間:2024/3/12 Android 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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
  • void?bd_encrypt(double?gg_lat,?double?gg_lon,?double?&bd_lat,?double?&bd_lon)??
  • {??
  • ????double?x?=?gg_lon,?y?=?gg_lat;??
  • ????double?z?=?sqrt(x?*?x?+?y?*?y)?+?0.00002?*?sin(y?*?x_pi);??
  • ????double?theta?=?atan2(y,?x)?+?0.000003?*?cos(x?*?x_pi);??
  • ????bd_lon?=?z?*?cos(theta)?+?0.0065;??
  • ????bd_lat?=?z?*?sin(theta)?+?0.006;??
  • }??
  • ???
  • void?bd_decrypt(double?bd_lat,?double?bd_lon,?double?&gg_lat,?double?&gg_lon)??
  • {??
  • ????double?x?=?bd_lon?-?0.0065,?y?=?bd_lat?-?0.006;??
  • ????double?z?=?sqrt(x?*?x?+?y?*?y)?-?0.00002?*?sin(y?*?x_pi);??
  • ????double?theta?=?atan2(y,?x)?-?0.000003?*?cos(x?*?x_pi);??
  • ????gg_lon?=?z?*?cos(theta);??
  • ????gg_lat?=?z?*?sin(theta);??
  • }??

  • 4.地球坐標系?(WGS-84)?到火星坐標系?(GCJ-02)?的轉換算法

    ? WGS-84GCJ-02的轉換(即GPS加偏算法是一個普通青年輕易無法接觸到的公開秘密。這個算法的代碼在互聯網上是公開的,詳情請使用Google搜索"wgtochina_lb"?

    ? 整理后的算法代碼請參考?https://on4wp7.codeplex.com/SourceControl/changeset/view/21483#353936?。知道了這個算法之后,就可以離線進行Google地圖偏移校正,不必像之前那么麻煩。

    至于GCJ-02WGS-84的轉換(即GPS糾偏),可以使用二分法。


    總結

    以上是生活随笔為你收集整理的Android中高德地图与百度地图坐标转换的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。