1. 程式人生 > >QT:淺談百度Baidu座標系反轉至WGS84的三種思路

QT:淺談百度Baidu座標系反轉至WGS84的三種思路

摘要:基於百度地圖進行資料展示是目前專案中常見場景,但是因為百度地圖是基於BD09座標系的,GPS座標(WGS84)或者其他常見的標準座標是無法準確在地圖上進行展示的,但是網際網路線上情況下,百度提供了將WGS84經緯度轉換成百度經緯度座標的API,這裡不再對其進行研究(離線情況下也有專門方法解決)。這裡,我們探討,如何將在百度上獲取的百度座標資料反轉成WGS84座標。
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.總結

當精度要求不高,並且需要快速部署情況下,首推演算法逼近方法。當需要高精度方法時,還是需要使用網格逼近方法。