前提了解:
坐标系分类(经纬度):
类型 | 说明 | 使用者 |
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.php?title=webapi/guide/changeposition
百度坐标转换接口地址如下:
http://api.map.baidu.com/geoconv/v1/?coords=114.21892734521,29.575429778924&from=1&to=5&ak=你的密钥
参数说明:
参数名称 | 含义 | 类型 | 举例 | 默认值 | 是否必须 |
coords | 需转换的源坐标,多组坐标以“;”分隔 (经度,纬度) | float | 114.21892734521,29.575429778924 | 无 | 是 |
ak | 开发者密钥 | string | 无 | 是 | |
from | 源坐标类型: 1:GPS设备获取的角度坐标,WGS84坐标; 2:GPS获取的米制坐标、sogou地图所用坐标; 3:google地图、soso地图、aliyun地图、mapabc地图和amap地图所用坐标,国测局(GCJ02)坐标; 4:3中列表地图坐标对应的米制坐标; 5:百度地图采用的经纬度坐标; 6:百度地图采用的米制坐标; 7:mapbar地图坐标; 8:51地图坐标 | int | 1 | 1 | 否 |
to | 目标坐标类型: 5:bd09ll(百度经纬度坐标); 6:bd09mc(百度米制经纬度坐标) | int | 5 | 5 | 否 |
根据如上就可以实现将我们微信端获取的经纬度转化成百度自己加密过后的经纬度
当时如何将BD-09转换成GPS84百度没有提供接口,具体如何转换目前不清楚,有知道的,欢迎评论,谢谢