Android开发中,偶然发现,用 百度地图分享出来的经纬度信息,再次用高德地图、腾讯地图打开,会出现几百米甚至几公里的偏移。 借用网络相关评论 分享出来的明明是山,换个地图打开变成海了 。
Android开发中,偶然发现,用
百度地图分享出来的经纬度信息,再次用高德地图、腾讯地图打开,会出现几百米甚至几公里的偏移。
借用网络相关评论 分享出来的明明是山,换个地图打开变成海了
。 一、现象
打开
百度地图
:在地图上选择一个地点,查看其经纬度坐标。
这里以我的老东家
网易北京研发中心
为例。
百度地图坐标拾取系统
,搜索框输入
网易北京研发中心
,获取经纬度坐标为:
116.282314,40.049229
高德地图
,高德地图逆地理编码系统。
将
百度地图坐标拾取的经纬度信息
填入
高德地图逆地理编码系统
中,如下图所示,可以看到
定位地址大约出现了一公里的偏移
腾讯地图
,腾讯位置服务系统。
百度地图坐标拾取的经纬度信息
腾讯位置服务系统
定位地址同样出现了大约一公里的偏移,但腾讯地图、高德地图最终的定位位置保持一致
高德地图坐标拾取器
https://lbs.amap.com/demo/javascript-api/example/geocoder/regeocoding
百度地图坐标拾取器
http://api.map.baidu.com/lbsapi/getpoint/index.html
腾讯地图坐标拾取器
https://lbs.qq.com/getPoint/
猜想:
现象:
百度地图
分享出来的经纬度信息,用
高德地图、腾讯地图
打开出现了相同的
偏移量
;但
高德地图、腾讯地图
分享出来的经纬度信息,两者之前可以互相使用。
这里猜测:
高德、腾讯地图应该使用了同一套坐标系统;百度地图可能在该地图的基础上,使用了一套新的坐标系统,对坐标系主动进行了某种偏移操作。
二、坐标系
分别查询高德地图、腾讯地图、百度地图三家的开发者平台,发现:
高德地图、腾讯地图采用的是 GCJ02 坐标系
;
百度地图采用了 BD09 坐标系
那么 GCJ02、BD09 坐标系有什么区别?
想要了解 GCJ02、BD09 坐标系的区别,先了解一下国内主流的坐标系类型。
目前国内主流的坐标系类型有
WGS84、GCJ02、BD09
- WGS84
是一种用于地图学、大地测量学和导航(GPS全球定位系统)的大地测量系统标准。世界大地测量系统(World Geodetic System 1984)
- GCJ02
,也称为中国国家测量局02号标准(Guojia Cehui Ju 02)
。是中国国家测绘局制订的地理信息系统的坐标系统,是火星坐标系
。因在 WGS84 经纬度的基础上执行加密算法而成
直接GPS得到的经纬度
,有种到了火星的感觉,因此在在 GCJ02 坐标系下会定位到错误的地点
坊间也将 GCJ02 戏称为火星坐标系
- BD09
,百度百度坐标系
在GCJ02坐标系基础上再次加密而成
国内主流地图默认采用的坐标系?
了解了各坐标系的大概定义,那么目前国内主流的地图都默认采用了什么坐标系统呢?
地图 | 大陆、港澳 | 台湾省 | 海外 |
---|---|---|---|
百度 | BD-09 | ||
高德 | GCJ-02 | ||
腾讯 |
总结一句话:
中国大陆、港澳,使用GCJ02坐标系(百度除外,百度默认使用 BD09 坐标系);中国台湾省使用 WGS84 坐标系;海外地区使用 BD09 坐标系
以上表格数据依据:
百度地图数据依据
http://lbsyun.baidu.com/index.php?title=androidsdk/guide/coordtrans
高德地图数据依据
https://lbs.amap.com/faq/advisory/others/39840/?wd=WGS84&cateId=&page=&detail=true
腾讯地图数据依据
https://lbs.qq.com/mobile/androidMapSDK/developerGuide/attention
三、坐标系转换
查看百度、高德、腾讯相关开发者平台,发现对应开发者平台均提供了
GCJ02、BD09、WGS84
相关的坐标系转化API。
百度地图
百度地图 坐标转化API:
高德地图
高德地图 坐标转化API:
https://lbs.amap.com/api/android-sdk/guide/computing-equipment/coordinate-transformation/