zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    二分专题
    数据结构-图
    Linux文件基本属性(以ls -l输出为例解释)
    shell脚本版素数筛
    Linux whereis,which
    Linux外网代理配置
    Linux三剑客
    Elasticsearch集群搭建(Linux)
    测试之路
    我的另一半
  • 原文地址:https://www.cnblogs.com/godlovexq/p/7410689.html
Copyright © 2011-2022 走看看