简谈百度坐标反转至WGS84的三种思路

简介: 文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/1.背景基于百度地图进行数据展示是目前项目中常见场景,但是因为百度地图是基于BD09坐标系的,GPS坐标(WGS84)或者其他常见的标准坐标是无法准确在地图上进行展示的,但是互联网在线情况下,百度提供了将WGS84经纬度转换成百度经纬度坐标的API,这里不再对其进行研究(离线情况下也有专门方法解决)。

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

1.背景

基于百度地图进行数据展示是目前项目中常见场景,但是因为百度地图是基于BD09坐标系的,GPS坐标(WGS84)或者其他常见的标准坐标是无法准确在地图上进行展示的,但是互联网在线情况下,百度提供了将WGS84经纬度转换成百度经纬度坐标的API,这里不再对其进行研究(离线情况下也有专门方法解决)。这里,我们探讨,如何将在百度上获取的百度坐标数据反转成WGS84坐标。

目前有三种通用方法来解决此问题,分别是算法逼近、误差逼近和格网逼近方法。

2.算法逼近方法

百度地图坐标系的背景为首先使用国测局制定的GCJ-02,对地理位置进行首次加密,然后再利用其自创的BD-09进行二次加密措施。所以基于算法的逼近,也是进行这样的反解步骤:首先将BD09坐标转换成GCJ02坐标,然后再将GCJ02坐标反算成WGS84坐标。

以下为基于算法反解的详细代码:

 

3.误差逼近方法

A点为百度坐标点,假设此时我们将其看作一个WGS84坐标点A1,利用百度提供的在线WGS84坐标转换成百度经纬度坐标系的API,可得到A1’百度坐标,此时A1’与A1之间的坐标差为L。假设百度地图在2L范围的坐标其反转误差大致相同,则我们将真实的百度坐标A做L标准差的线性加减得到A’,最后A’则为百度坐标A反转所得的WGS84坐标。

                                                                          

详细代码如下:

 

4.网格逼近算法

该方法我在之前的博客中详细介绍过:http://www.cnblogs.com/naaoveGIS/p/5342177.html

其流程大致为:

a.将指定范围以100M(或更小)划分成若干格网。

b.建立各个格网的四角坐标中WGS84坐标与百度坐标之间的对应关系。

c.判断待转换的百度点落在哪个网格中,获取该格网的四角坐标对应的WGS84坐标。

按照该点在格网的权重算出其WGS84坐标后转换完毕。

                                                  

5.误差对比

此三种方法皆为逼近,误差是无法避免的,对这三种算法的误差做了初步的统计,如下:

 

首先对比了误差逼近方法和算法逼近方法,可见他们的平均误差均在10M上下,其中算法逼近方法比误差逼近方法稍微精度高一些。

而网格方法是一种误差很稳定的方法,以100M的网格划分为例,其误差是厘米级的,具体如下:

                                                     

6.总结

当精度要求不高,并且需要快速部署情况下,首推算法逼近方法。当需要高精度方法时,还是需要使用网格逼近方法。

 

                         -----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

                                                                           如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                                                                                                  

目录
相关文章
|
定位技术 图形学
|
7月前
|
存储 程序员 C语言
扫雷?拿来吧你(递归展开+坐标标记)
扫雷?拿来吧你(递归展开+坐标标记)
|
算法 JavaScript 前端开发
84坐标系、02坐标系、百度坐标之间相互转换算法
最近有同学反馈之前的坐标系转换有问题,对之前的工具类进行了修正。 一、地图坐标转换java工具类 包含84坐标系、02坐标系、百度地图、高德地图、腾讯地图坐标之间相互转换的算法 wgs84ToGcj02:将 WGS84 坐标系下的经纬度转换为 GCJ02 坐标系下的经纬度。 gcj02ToWgs84:将 GCJ02 坐标系下的经纬度转换为 WGS84 坐标系下的经纬度。 gcj02ToBd09:将 GCJ02 坐标系下的经纬度转换为 BD09 坐标系下的经纬度。 bd09ToGcj02:将 BD09 坐标系下的经纬度转换为 GCJ02 坐标系下的经纬度。
1164 0
84坐标系、02坐标系、百度坐标之间相互转换算法
|
定位技术 容器
高德地图进阶开发实战案例(10):地图选取起终点OD位置经纬度的驾车规划路线
高德地图进阶开发实战案例(10):地图选取起终点OD位置经纬度的驾车规划路线
144 0
|
算法 Java 索引
单元格法近似求解多边形最大内接矩形问题【思路讲解+java实现】
单元格法近似求解多边形最大内接矩形问题【思路讲解+java实现】
252 0
|
Java
判断顶点凹凸性、判断多边形的凹凸性、填充凹坑将凹多边形处理为凸多边形【java实现+原理讲解】
判断顶点凹凸性、判断多边形的凹凸性、填充凹坑将凹多边形处理为凸多边形【java实现+原理讲解】
285 0
判断顶点凹凸性、判断多边形的凹凸性、填充凹坑将凹多边形处理为凸多边形【java实现+原理讲解】
射线法——判断一个点是否在多边形内部(适用于凸多边形和凹多边形)【关键原理解释+文字伪代码】
射线法——判断一个点是否在多边形内部(适用于凸多边形和凹多边形)【关键原理解释+文字伪代码】
726 0
|
Java 索引
给定一个多边形的点集——判断所给点集的方向为顺时针方向还是逆时针方向【java实现+原理讲解】
给定一个多边形的点集——判断所给点集的方向为顺时针方向还是逆时针方向【java实现+原理讲解】
249 0
|
算法 Java
java实现经纬度坐标是否在范围内的算法
java实现经纬度坐标是否在范围内的算法
java实现经纬度坐标是否在范围内的算法
|
JavaScript 前端开发 API