1,背景
原生native提供的获取当前所在的经纬度坐标,传到后端进行校验,后端使用的是百度地图。发现:安卓获取经纬度精度没问题,但ios获取的精度总是不对。
2,问题分析
经资料收集,发现不同手机系统采用的是不同地图公司的数据,各地图公司使用的是不同坐标系。而公司native底层,安卓是使用的百度地图,iOS是使用的高德地图,因此安卓手机获取的经纬度可直接使用,而IOS则需要进行坐标转换。
· 百度地图使用的是BD-09坐标系
· 高德地图、腾讯地图以及谷歌中国区地图使用的是GCJ-02坐标系
3,解决方案
笔者这里使用gcoord库,通过把GCJ-02坐标转为BD-09坐标。按理这时候问题应该解决了。然而,转换后得到的经纬度还是和目标经纬度有差距。问题出在哪?
https://github.com/hujiulong/gcoord
原来,原生开发调用底层api, 如CLLocationManagger,获取到的是WGS-84坐标系的经纬度。因此转换过程应该是把WGS-84坐标转为BD-09坐标。
使用 WGS84 坐标系统:
· 苹果的 CLLocationManager 获取的坐标
· HTML5 Geolocation
4,关于坐标标准
WGS-84 - 世界大地测量系统
World Geodetic System, WGS 世界通用的坐标系,GPS设备得到的经纬度就是在WGS84坐标系下的经纬度。
GCJ-02 - 国测局坐标
火星坐标系,由中国国测局制定,对中国各地经纬度进行加密处理。
BD-09 - 百度坐标系
百度地图使用的地理坐标系,其在GCJ-02上多增加了一次变换,用来保护用户隐私。
网友评论