1. 程式人生 > >ios開發百度高德地圖經緯度相互轉換的演算法解析

ios開發百度高德地圖經緯度相互轉換的演算法解析

首先科普一下,經緯度這東西.GPS公司的經緯度算是 地球座標系,高德地圖的,是經過國家加密過得經緯度, 稱之為火星座標. 高德地圖是火星座標的二次加密. 

完事兒上程式碼. 

// 百度轉高德

-(void)bdToGaodeWithLat:(double)lat andLon:(double)lon

{

    double x_pi = 3.14159265358979324 * 3000.0 / 180.0;

    double x = lon;

    double y = 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);

    NSLog(@"bd_lon:%f",z * cos(theta) + 0.0065);

    NSLog(@"bd_lat:%f",z * sin(theta) + 0.006);

    //[self gaodeToBdWithLat:(z * sin(theta) + 0.006) andLon:(z * cos(theta) + 0.0065)];

}

//高德轉百度

-(void)gaodeToBdWithLat:(double)lat andLon:(double)lon

{

    double x_pi = 3.14159265358979324 * 3000.0 / 180.0;

    double x = lon - 0.0065, y = 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);

    NSLog(@"gg_lon:%f",z * cos(theta));

    NSLog(@"gg_lat:%f",z * sin(theta));

}

百度關於座標系的解析:

國際經緯度座標標準為WGS-84,國內必須至少使用國測局制定的GCJ-02,對地理位置進行首次加密。百度座標在此基礎上,進行了BD-09二次加密措施,更加保護了個人隱私。百度對外介面的座標系並不是GPS採集的真實經緯度,需要通過座標轉換介面進行轉換。

以下來自百科

火星座標系統:

是一種國家保密外掛,也叫做加密外掛或者加偏或者SM模組,其實就是對真實座標系統進行人為的加偏處理,按照特殊的演算法,將真實的座標加密成虛假的座標,而這個加偏並不是線性的加偏,所以各地的偏移情況都會有所不同。而加密後的座標也常被人稱為火星座標系統。

所有的電子地圖、導航裝置,都需要加入國家保密外掛。第一步,地圖公司測繪地圖,測繪完成後,送到國家測繪局,將真實座標的電子地圖,加密成“火星座標”,這樣的地圖才是可以出版和釋出的,然後才可以讓GPS公司處理。第二步,所有的GPS公司,只要需要汽車導航的,需要用到導航電子地圖的,都需要在軟體中加入國家保密演算法,將COM口讀出來的真實的座標訊號,加密轉換成國家要求的保密的座標。這樣,GPS導航儀和導航電子地圖就可以完全匹配,GPS也就可以正常工作了。

以上基本夠用,如果不夠參考以下連結: http://blog.csdn.net/meegomeego/article/details/39927017