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

猜你喜欢

转载自blog.csdn.net/qq_35122556/article/details/80020370