大家都知道,美國GPS使用的是WGS-84的座標系統,以經緯度的形式來表示地球平面上的某一個位置,這應該是國際共識。但在我國,出於國家安全考慮,國內所有導航電子地圖必須使用國家測繪局制定的加密座標系統(GCJ-02),即將一個真實的經緯度座標加密成一個不正確的經緯度座標,我們在業內將前者稱之爲地球座標(WGS-84),後者稱之爲火星座標(GCJ-02),具體的說明可以參看百度百科中關於火星座標系統的解釋。
1.國內各地圖API座標系統比較
參考http://rovertang.com/labs/map-compare/
結論是:
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反之。
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-84到GCJ-02的轉換(即GPS加偏)算法是一個普通青年輕易無法接觸到的“公開”的祕密。這個算法的代碼在互聯網上是公開的,詳情請使用Google搜索"wgtochina_lb" 。
整理後的算法代碼請參考:https://on4wp7.codeplex.com/SourceControl/changeset/view/21483#353936。
知道了這個算法之後,就可以離線進行Google地圖偏移校正,不必像之前那麼麻煩。
至於GCJ-02到WGS-84的轉換(即GPS糾偏),可以使用二分法。
轉自:http://blog.csdn.net/meegomeego/article/details/39927017
-----------------------------------------------------------------------------------------------------
- GCJ-02座標系統(火星座標)簡介:http://blog.csdn.net/giswens/article/details/8775121(存檔:http://mapbd.com/cms/2012/07/25/)
- GCJ-02到真實座標反向變換的理論基礎:http://blog.csdn.net/giswens/article/details/8775213
- WGS84座標與Web墨卡託座標互轉:http://blog.csdn.net/giswens/article/details/9634261
- 地球座標系 (WGS-84) 到火星座標系 (GCJ-02) 的轉換算法:
- C#代碼:https://on4wp7.codeplex.com/SourceControl/changeset/view/21483#353936(註解:http://blog.csdn.net/giswens/article/details/8775283)
- Java代碼:http://emq.googlecode.com/svn/emq/src/Algorithm/Coords/Converter.java
- iOS代碼:http://blog.csdn.net/giswens/article/details/8775183(存檔:http://www.keakon.net/2011/07/02/WGS84座標轉火星座標(iOS篇))
- 火星座標系 (GCJ-02) 與百度座標系 (BD-09) 的轉換算法:http://blog.csdn.net/coolypf/article/details/8569813(解釋:國際經緯度座標標準爲WGS-84,國內必須至少使用國測局制定的GCJ-02,對地理位置進行首次加密。百度座標在此基礎上,進行了BD-09二次加密措施,更加保護了個人隱私。百度對外接口的座標系並不是GPS採集的真實經緯度,需要通過座標轉換接口進行轉換。)
- 一種根據糾偏數據對火星座標進行完美擬合的方法:http://blog.sina.com.cn/s/blog_538036cf0100pxbl.html
- 國內各地圖API座標系統比較:http://rovertang.com/archives/547
- 關於百度地圖座標轉換接口的研究:http://rovertang.com/archives/24699
查詢過資料可得,通過程序進行 標準座標轉火星座標(google、高德),火星座標轉百度座標,百度座標轉火星座標,百度座標轉標準座標都是可行的,火星直接轉標準座標轉不了。
轉自:http://blog.csdn.net/xiaobaismiley/article/details/37576303