热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用FME进行火星、百度坐标反算及误差分析

前言在做WebGIS开发和数据处理过程中,经常会使用到火星坐标(GCJ02)、百度坐标(BD09)以及国际通用

前言

  在做WebGIS开发和数据处理过程中,经常会使用到火星坐标(GCJ02)、百度坐标(BD09)以及国际通用的地球坐标(WGS84)[1~5]。而这几种坐标之间是存在偏差的,不可避免的就需要进行不同坐标之间的相互转换:WGS84⇋GCJ02、WGS84⇋BD09、GCJ02⇋BD09。

本文把WGS84→GCJ02、WGS84→BD09、GCJ02→BD09称为正算,目前已经有公开的算法,误差也较小,不作探讨。而把GCJ02→WGS84、BD09→GCJ02、BD09→WGS84称为反算,是本文分析的主要内容。

关于火星、百度坐标反算,已知的方法有很多,如:API法[6]、查表法[7~11]、插值法[12]、配准法[13]、公式法[*]、二分法[14]等。这几种方法各有优缺点,基本上能满足一般的学习、研究以及地图数据处理和发布使用。但是,我却想是否有一种算法,能同时满足依赖性(限制)低、操作少、计算量(迭代次数)小、精度高(误差低)等条件。机缘巧合之下,在知乎上看到了Artoria2e5的回答[15],意识到这就是我想要的算法,本文暂称之为迭代逼近法,并对其进行了验证分析。


算法思想

  该算法思想简明,巧妙的运用了向量代数、极限以及范数等数学概念。转换为数学表达语言:

本文在此基础上,做了一些细微的调整,调整后的算法流程如下:

图1:算法流程图

其中Δr即为,θ为设定阈值,||Δr||∞为∞-范数,即

 

这里的∞-范数也可以用2-范数来替换,即

迭代次数和计算精度基本不变。

 


验证模型

  验证的基本思路是:初始坐标→坐标正算→坐标反算→计算误差(反算后坐标 — 初始坐标)。

依此,在FME上建立如下模型:

图2:验证模型图

模型中,分别对全国(以73.36° E,3.85° N为起点,0.1°为间隔),深圳(以113.766° E,22.45° N为起点,0.001°为间隔)建立网格,并取其中心点,共得全国坐标点数:306649个,深圳坐标点数:354450个。然后依次按0.01、0.001、......、0.000000001设定阈值,并计算转换前后坐标误差,最后输出统计结果。

在全国和深圳不同尺度下来验证,主要是想看看全国范围和局部地区计算结果有什么不一样。


误差分析

  以下为各项指标统计结果(各图标中的第一项为利用公式法直接反算结果):

 

表1:GCJ02→WGS84(全国范围)统计表

2:GCJ02→WGS84(深圳地区)统计表

3:BD09→GCJ02(全国范围)统计表

4:BD09→GCJ02(深圳地区)统计表

图3:误差精度对比图

图4:迭代次数对比图

以上几个图表可以看出,相比用公式法直接反算,①当阈值为0.01时,GCJ02→WGS84完全一样,而BD09→GCJ02精度反而有所降低;②当阈值为0.001时,GCJ02→WGS84的精度有了微小的提升,而BD09→GCJ02的精度仍低于直接反算;③当阈值≥0.0001时,精度逐渐有较大幅度的提升,迭代次数也趋于平稳,达到微米级精度所需平均迭代次数少于4次;⑤y方向收敛更快。⑥该算法用于GCJ02→WGS84比用于BD09→GCJ02收敛速度快,精度也更高。

PS:以上的误差精度,是按照1°≈110千米计算所得的。

尝试着如wuyongzheng[17、18]一样分析一下在全国范围内,x、y方向误差的分布。结果发现:①GJC02→WGS84呈现无规律性,在中国大陆中部偏西地区x、y方向的误差较大;②而BD09→GCJ02,在x方向的误差是纬度越高,误差越大;在y方向是经度越大,纬度越高,误差越大。

图5:gcj02→wgs84 x方向误差分布图

图6:gcj02→wgs84 y方向误差分布图

 

图7:bd09→gcj02 x方向误差分布图

 

图8:bd09→gcj02 y方向误差分布图


结语

  1、该算法抓住了这一特点,对其他不符合该特点的正算函数并不适用。

2、 本文研究是在假设坐标正算算法无误差的前提上进行的,而实际可能并不是这样[16],因此只能保证使用同样算法进行坐标正算后的反算精度。当然,这也规避了坐标保密处理技术的相关问题。

3、关于从百度坐标反算到WGS84坐标,有两种设计思路,一种分两步进行反算,即BD09→GCJ02、GCJ02→WGS84;另外一种是把WGS84→GCJ02→BD09的正算过程组合成一个函数,再按照迭代逼近法直接进行反算。本文并没有做进一步的验证,有兴趣的朋友不妨一试。

4、该算法不受百度开发平台等API等调用的限制、也无需进行人工配准等操作、精度也高(误差低),达到微米级精度误差的迭代次数平均不到4次(远远少于二分法,具体这里不作介绍),基本上与我的预期相符。

5、研究该算法只是为了数据能更精确的回溯,以尽量减少使用其他算法反复转换后导致的累计误差。在精度要求不高情况下,直接使用网络上流行的反算公式(公式法)即可。


参考资料


  1. 各种经纬度坐标系转换-百度坐标系、火星坐标系、国际坐标系.https://blog.csdn.net/doulejian/article/details/70155080

  2. 百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系互转.https://cnodejs.org/topic/564c0a27e4766d487f6fe38d

  3. 谈谈火星坐标与地图坐标的那点坑. https://blog.csdn.net/wu__di/article/details/52444872

  4. 为何您的坐标不准?如何纠偏?. http://www.cnblogs.com/milkmap/p/3627940.html

  5. 从零开始学高德JS API(六)——坐标转换.https://www.cnblogs.com/milkmap/p/3768379.html

  6. 百度地图开放平台Web服务API . http://lbsyun.baidu.com/index.php?title=webapi/guide/changeposition

  7. 利用地图SDK生成火星坐标纠偏数据库. https://blog.csdn.net/huzgd/article/details/8933118

  8. 构建自己的百度地图坐标纠偏数据库. https://blog.csdn.net/gatr/article/details/21520737

  9. 巧妙解决百度地图加偏纠偏问题. https://blog.csdn.net/gatr/article/details/9569189

  10. (百度、谷歌、高德等)地图经纬度gps偏移解决办法:gps纠偏数据库纠偏.http://blog.sina.com.cn/s/blog_ae91db6001014pi6.html

  11. 使用数据库实现百度地图纠偏. http://200cc.iteye.com/blog/2009492

  12. 一种根据纠偏数据对火星坐标进行完美拟合的方法.http://blog.sina.com.cn/s/blog_538036cf0100pxbl.html

  13. WGS84坐标系图层转火星坐标系.https://www.cnblogs.com/wenxiuliang/p/WGS84ToGCJ.html

  14. GPS坐标互转:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图).https://www.oschina.net/code/snippet_260395_39205

  15. 如何看待「地形图非线性保密处理技术」?. https://www.zhihu.com/question/29806566

  16. Wgs84坐标系转换为gcj02坐标系及bd09坐标系的验证.http://blog.sina.com.cn/s/blog_5215e9300102wazw.html

  17. 中国地图坐标(GCJ-02)偏移算法破解小史. https://blog.genglinxiao.com/中国地图坐标偏移算法破解小史/

  18. China Map Deviation as a Regression Problem.https://wuyongzheng.wordpress.com/2010/01/22/china-map-deviation-as-a-regression-problem/


推荐阅读
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Shodan简单用法Shodan简介Shodan是互联网上最可怕的搜索引擎,与谷歌不同的是,Shodan不是在网上搜索网址,而是直接进入互联网的背后通道。Shodan可以说是一款“ ... [详细]
  • Smrti Lab 和 ArkStream Demo Day 10 个参展新项目一览
    元宇宙、跨链桥、NFT交易市场、期权产品服务商、Layer1、DID、Web3基础设施等领域的被投项目参与路演。 ... [详细]
author-avatar
慧慧2502916487
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有