zoukankan      html  css  js  c++  java
  • 地球坐标-火星坐标-百度坐标及之间的转换算法 C#

    美国GPS使用的是WGS84的坐标系统,以经纬度的形式来表示地球平面上的某一个位置。但在我国,出于国家安全考虑,国内所有导航电子地图必须使 用国家测绘局制定的加密坐标系统,即将一个真实的经纬度坐标加密成一个不正确的经纬度坐标,在业内将前者称之为地球坐标,后者称之为火星坐标。国家保密插件,也叫做加密插件或者加偏或者SM模组,其实就是对真实坐标系统进行人为的加偏处理,按照几行代码的算法,将真实的坐标加密成虚假的坐标,而这个加偏并不是线性的加偏,所以各地的偏移情况都会有所不同。而加密后的坐标也常被人称为火星坐标系统(GCJ-02)

    所有的电子地图所有的导航设备,都需要加入国家保密插件。第一步,地图公司测绘地图,测绘完成后,送 到国家测绘局,将真实坐标的电子地图,加密成“火星坐标”,这样的地图才是可以出版和发布的,然后才可以让GPS公司处理。第二步,所有的GPS公司,只 要需要汽车导航的,需要用到导航电子地图的,统统需要在软件中加入国家保密算法,将COM口读出来的真实的坐标信号,加密转换成国家要求的保密的坐标,这 样,GPS导航仪和导航电子地图就可以完全匹配,GPS也就可以正常工作。

    百毒等在线地图为了配合政府,以及保护自己的商业利益,在GCJ-02的基础上都使用了进一步的其它坐标加密算法形成了如百度坐标、图吧坐标的坐标系统。这样的做法让他们既符合了国家要求,又进一步防止用户迁移。

    国内地图坐标系统计:

    image

    Google 的地图服务有两个版本:
    一为 Google Maps,可以通过 maps.google.com 访问
    二为 Google Ditu,可以通过 ditu.google.cnditu.google.commaps.google.cn 访问
    显而易见,第二个版本是为了中国准备的。

    名词总结:
    地球坐标:指WGS84坐标系统
    火星坐标:指使用国家保密插件人为偏移后的坐标
    地球地图:指与地球坐标对应的客观真实的地图
    火星地图:指经过加密偏移后的,与火星坐标对应的地图

    问题:

    首先,我们手上所有的GPS设备,根据渠道和接口软件的不同,分为火星坐标设备与WGS84坐标设备两种,另外所有GPS设备中的地图以及网上的地图,分为火星地图(即人为偏移)和真实地图两种。
    比如国内“正规渠道的车载GPS”,采用的是火星坐标配火星地图,完美结合,能够准确的在地球上使用,缺点就是记录的点和轨迹都是火星的,与其他地球人无法交流分享。
    多数水货GPS设备,使用的都是地球坐标配火星地图,这样轨迹和航点都是真实坐标的,只不过在火星地图上偏移了
    有些玩家,会将火星地图加入偏移算法(无论准确或不准确),人为纠偏,形成地球坐标配纠偏地图(自制地图),不考虑误差可以正常使用
    而目前,所有正式发布的大陆境内电子地图,都是火星地图,所以只有大陆之外地区,才能够用到地球坐标与官方地球地图完美结合的解决方案。

    传说中的转换:

    WGS-84 到 GCJ-02 的转换(即 GPS 加偏)算法是一个普通青年轻易无法接触到的“公开”的秘密。这个算法的代码在互联网上是公开的,详情请使用 Google 搜索 "wgtochina_lb" 。整理后的算法代码请参考 https://on4wp7.codeplex.com/SourceControl/changeset/view/21483#353936 。知道了这个算法之后,就可以离线进行 Google 地图偏移校正,不必像之前那么麻烦。至于 GCJ-02 到 WGS-84 的转换(即 GPS 纠偏),可以使用二分法。

    离线转换算法

    百度坐标:

    4.3 百度坐标为何有偏移?

    国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ-02,对地理位置进行首次加密。百度坐标在此基础上,进行了BD-09二次加密措施,更加保护了个人隐私。百度对外接口的坐标系并不是GPS采集的真实经纬度,需要通过坐标转换接口进行转换。

    4.2 百度采用何种坐标体系?

    百度地图api中采用两种坐标体系,经纬度坐标系和墨卡托投影坐标系。前者单位是度,后者单位是米,具体定义可以参见百科词条解释: http://baike.baidu.com/view/61394.htmhttp://baike.baidu.com/view/301981.htm

    火星坐标与百度坐标(GCJ-02----BD-09)转换:

    火星坐标--百度坐标
  • 相关阅读:
    按日期重命名宾得相机的照片
    Intellij笔记
    quartznet笔记
    优秀的UI插件
    我的ORM之示例项目
    Redis笔记
    Idol之坑
    ORACLE查询表最近更改的数据 VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE
    如何drop大表的中不用的字段 set unused column
    Oracle DUL/AUL/ODU 工具说明
  • 原文地址:https://www.cnblogs.com/kelite/p/3549390.html
Copyright © 2011-2022 走看看