ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

网络坐标纠偏心得分享

2020-12-05 12:58:21  阅读:276  来源: 互联网

标签:WGS84 com 纠偏 GCJ02 算法 坐标 转换器 心得


在日常数据处理中,经常会使用到火星坐标(GCJ02)、百度坐标(BD09)以及国际通用的地球坐标(WGS84),这三者之间是存在偏差的。要进行坐标纠偏首先需要明白这几个坐标系之间的区别是什么。

众所周知,国内的数据但凡是带坐标的都是保密数据,所有的保密数据都需要经过加密转到再放到网络上,所以就有了火星坐标(GCJ02)和百度坐标(BD09)的由来。

WGS84坐标经过加密后形成了GCJ02坐标,BD09坐标又是在GCJ02的基础上,再一次经过加密后形成的。

在网络坐标转换中,我们比较关注的是WGS84和GCJ02的坐标系之间的相互转换。一般我们会将数据从WGS84转换成GCJ02叫做正算,这种加密方式目前已经有公开的算法,误差也较小,基本上可以认为其是正确的,关键是反算。可能有些人会疑惑,既然已经知道的正算的算法,为什么还求不出来反算的公式呢?

嘿,问的好,因为我也不会。我只知道,WGS84到GCJ02是一种非线型加密。每个区域的矢量都是不一样的。

目前网络上也有以公式法反算的算法,但基本上误差都是在米级的,这也基本已经满足了我们日常使用的需求。

虽然不会归不会,不过把人家优秀的开源算法拿来改吧改吧自己用,还是成的。

于是,我基于github.com/GaryLea/ChangeCoordinate的坐标纠偏算法,封装了一个自定义转换器,据博主所说,其反算的最大误差在5米左右。

之后,在网络上 https://github.com/googollee/eviltransform 找到一种精度更高的的迭代逼近法,可以通过预设误差,不断迭代计算,精度可达微米级别。

根据以上两种算法,将其封装到了FME自定义转换器中,实现了坐标点对的GCJ02、BD09、WGS84坐标的相互转换。

模版很简单,主要就是一个PythonCaller转换器。总体算法都是基于github.com/GaryLea/ChangeCoordinate写的,后来将坐标反算的算法换了一下,改成 https://github.com/googollee/eviltransform 的算法,精度更高,不过随之而来的就是转换效率的降低。

有兴趣的可以去下载源码查看一下,不过需要注意这两个算法的lng,lat分别代表的X和Y轴是相反的,我就因此被坑了好久。
在这里插入图片描述
代码的实现过程是很粗糙的,因为我确实不会python。具体代码也很简单我就不贴出来了,大家可以自己去将转换器下载下来看一下,基本上就是github上的用法没有改变。

而且我也很用心的写了帮助,使用注意事项都在帮助里面。

这个自定义转换器,很多想法都是参照一篇文章做的。
https://mp.weixin.qq.com/s/khqt5j8X09hfY6jutY-sEw这是真正的大佬,他的每一篇文章我都拜读过。在此博客的基础上,不断追述源头,如我这样的小白,也能对坐标纠偏有一些了解了。

最后老样子,附上转换器链接
链接:https://pan.baidu.com/s/1c_BlidUhNVkiiznYnHRtog
提取码:owhi

既然都有网络坐标纠偏了,肯定有POI数据爬取,基本思路都已经实现了,只是一直没时间写……囧

标签:WGS84,com,纠偏,GCJ02,算法,坐标,转换器,心得
来源: https://blog.csdn.net/luobengge/article/details/110679373

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有