百度地图开发坐标问题总结

PC端使用了百度地图搜索位置并显示在地图上 最后获取位置的经纬度坐标
移动端分别使用了百度地图获取实时经纬度 获取文字地址 定位在地图上
其中发现很多问题 及时总结下

坐标系种类和使用现状

当前国内地图参考系分三种:

  1. WGS84坐标系
    直接从GPS获取器中取出的原始数据 国际地图供应商使用的坐标系

  2. GCJ-02火星坐标系(国测局坐标系)
    中国标准 国行GPS产品获取到的数据使用的坐标 国家规定: 国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。

  3. BD-09百度坐标系
    百度标准,百度 SDK,百度地图,Geocoding 使用 本来就乱了,百度又在火星坐标上来个二次加密

三种参考系的使用情况:

  1. 国外如google地图 H5浏览器使用的都是WGS参考系

  2. 国内的大多数如 腾讯地图 高德地图 iOS地图(高德地图) 均是使用的火星坐标系

  3. 百度获取地理位置的方法 得到的坐标是百度坐标 (百度是基于浏览器获取地理位置方法进行了封装)

三种坐标系转换情况:

  1. 高德地图提供了WGS转火星坐标的方法

  2. 百度地图提供了WGS转百度地图的方法

  3. 微信获取地理位置默认WGS 可选择为火星坐标

三种坐标系的数据相对于真实位置对比

真实位置:北京市朝阳区洛娃大厦C座 116.475176 40.018079

地图上显示位置:

1.WGS

百度地图开发坐标问题总结

以上是WGS真实坐标应该在百度地图上显示的位置

2.火星坐标

如果认为上述坐标为火星坐标时候 将其显示在百度地图上 位置则会发生偏移

百度地图开发坐标问题总结

3.百度坐标

如果又将上诉坐标认为是百度坐标时 将其显示在百度地图上 位置则有发生偏移

百度地图开发坐标问题总结

可见加密过的坐标 均相对于真实坐标向西南角偏移 直线距离大概一公里

所以 当通过某种获取地理位的方式获取到坐标 而不知道其实什么坐标系的时候
可用上诉方法找个真实坐标对比 快速判定其坐标系
用图表示

百度地图开发坐标问题总结

可以看到 三种坐标系转换的方法 是不全面的
高德和百度只提供转到其自己坐标系的转换方法 不支持转出其他坐标系的方法

现在项目遇到的情况
数据库保存的是在PC端设置的 WGS坐标
移动端获取的百度坐标系
两者之间进行距离计算 需要转换

明白了各种获取位置是什么坐标系的
再明白了各种坐标系之间的转换就容易多了

坐标系转换方法

这里安利github上一个人做的转换方法(star 565)
里面可以实现各种坐标的来回转换 极大地方便了开发使用
wandergis/coordtransform

另外可以查看各个坐标相对于真实位置的地图位置工具
在线经纬度查询

大概就是这样

相关推荐