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

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

百度地图开发坐标问题总结_第1张图片

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

2.火星坐标

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

百度地图开发坐标问题总结_第2张图片

3.百度坐标

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

百度地图开发坐标问题总结_第3张图片

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

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

百度地图开发坐标问题总结_第4张图片

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

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

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

坐标系转换方法

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

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

大概就是这样

你可能感兴趣的:(地图,百度地图)