前提了解:
坐标系分类(经纬度):
- WGS84
美国 GPS,国际通用,如谷歌国外地图、osm 地图
- 火星系 GCJ-02
国测局制定的标准,国内地图必须至少使用此对位置进行首次加密,高德地图、腾讯搜搜地图、阿里云地图、灵图 51ditu 地图、谷歌中国地图
- BD-09
百度在 GCJ-02 标准基础上进行二次加密,百度地图
这两天一直在研究经纬度的问题,最后发现在微信上获取用户的地理位置 (经纬度) 和在百度上获取实际地址的经纬度之间的距离相差较大,整整相差了 5000 多米的距离,这到底是怎么回事呢?最后发现原来微信端获取的经纬度使用的是 WGS84(大地坐标系),然而在百度上获取的经纬度使用的是百度自己定义的 BD-09(百度坐标系),百度对外接口的坐标系并不是 GPS 采集的真实经纬度,所以导致了两个经纬度之间的差距过大,那么解决方式是什么呢?
既然两个经纬度的坐标系标准不同,那么将其中一个坐标系的转换成另一个坐标系类型不久可以了吗?根据这个思路解决方法如下:
GPS84 转换为 BD-09:
在百度 api 中,提供了将 WGS84(大地坐标系)和 GCJ02(国测局坐标系)转化为 BD-09(百度坐标系)的接口
百度坐标转换 api 地址:http://lbsyun.baidu.com/index…
百度坐标转换接口地址如下:
http://api.map.baidu.com/geoc…
参数说明:
- coords
需转换的源坐标,多组坐标以“;”分隔,(经度,纬度)
- ak
开发者密钥
- from
源坐标类型:
1:GPS 设备获取的角度坐标,WGS84 坐标;
2:GPS 获取的米制坐标、sogou 地图所用坐标;
3:google 地图、soso 地图、aliyun 地图、mapabc 地图和 amap 地图所用坐标,国测局(GCJ02)坐标;
4:3 中列表地图坐标对应的米制坐标;
5:百度地图采用的经纬度坐标;
6:百度地图采用的米制坐标;
7:mapbar 地图坐标;
8:51 地图坐标
- to
目标坐标类型:
5:bd09ll(百度经纬度坐标);
6:bd09mc(百度米制经纬度坐标)
根据如上就可以实现将我们微信端获取的经纬度转化成百度自己加密过后的经纬度
当时如何将 BD-09 转换成 GPS84 百度没有提供接口,具体如何转换目前不清楚,有知道的,欢迎评论,谢谢