文章版權由作者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/
1.背景
基於百度地圖進行數據展示是目前項目中常見場景,但是因為百度地圖是基於BD09坐標系的,GPS坐標(WGS84)或者其他常見的標准坐標是無法准確在地圖上進行展示的,但是互聯網在線情況下,百度提供了將WGS84經緯度轉換成百度經緯度坐標的API,這里不再對其進行研究(離線情況下也有專門方法解決)。這里,我們探討,如何將在百度上獲取的百度坐標數據反轉成WGS84坐標。
目前有三種通用方法來解決此問題,分別是算法逼近、誤差逼近和格網逼近方法。
2.算法逼近方法
百度地圖坐標系的背景為首先使用國測局制定的GCJ-02,對地理位置進行首次加密,然后再利用其自創的BD-09進行二次加密措施。所以基於算法的逼近,也是進行這樣的反解步驟:首先將BD09坐標轉換成GCJ02坐標,然后再將GCJ02坐標反算成WGS84坐標。
以下為基於算法反解的詳細代碼:
3.誤差逼近方法
A點為百度坐標點,假設此時我們將其看作一個WGS84坐標點A1,利用百度提供的在線WGS84坐標轉換成百度經緯度坐標系的API,可得到A1’百度坐標,此時A1’與A1之間的坐標差為L。假設百度地圖在2L范圍的坐標其反轉誤差大致相同,則我們將真實的百度坐標A做L標准差的線性加減得到A’,最后A’則為百度坐標A反轉所得的WGS84坐標。
詳細代碼如下:
4.網格逼近算法
該方法我在之前的博客中詳細介紹過:http://www.cnblogs.com/naaoveGIS/p/5342177.html。
其流程大致為:
a.將指定范圍以100M(或更小)划分成若干格網。
b.建立各個格網的四角坐標中WGS84坐標與百度坐標之間的對應關系。
c.判斷待轉換的百度點落在哪個網格中,獲取該格網的四角坐標對應的WGS84坐標。
按照該點在格網的權重算出其WGS84坐標后轉換完畢。
5.誤差對比
此三種方法皆為逼近,誤差是無法避免的,對這三種算法的誤差做了初步的統計,如下:
首先對比了誤差逼近方法和算法逼近方法,可見他們的平均誤差均在10M上下,其中算法逼近方法比誤差逼近方法稍微精度高一些。
而網格方法是一種誤差很穩定的方法,以100M的網格划分為例,其誤差是厘米級的,具體如下:
6.總結
當精度要求不高,並且需要快速部署情況下,首推算法逼近方法。當需要高精度方法時,還是需要使用網格逼近方法。
-----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/
如果您覺得本文確實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^