名词解析:
- 地球坐标:指 WGS-84 坐标系统,国际通用标准
- 火星坐标:指 GCJ-02 坐标系统,使用国家保密插件偏移后的坐标
- 地球地图:指与地球坐标对应的客观真实的地图
- 火星地图:指经过加密偏移后的,与火星坐标对应的地图
简单对比:
Google Map | MapKit | |
---|---|---|
地图显示 | 火星地图 | 火星地图 |
定位得到的坐标 | 地球坐标(WGS-84); 地图位置打点:不准确 |
地球坐标(WGS-84); 地图位置打点:准确 |
点击地图获取到的坐标 | 火星坐标(GCJ-02) | 火星坐标(GCJ-02) |
通过代码给地图打点接收的坐标 | 火星坐标(GCJ-02) | 火星坐标(GCJ-02) |
小结:
不管是用 GoogleMapSDK
还是 MapKit
,在国内显示的地图都是火星地图,所以在地图上打坐标点,接收的都应该是 火星坐标(GCJ-02)
,这样才能正确地打点。而通过系统 CoreLocation
框架的 CLLocationManager
或者 DJI-SDK
给到我们的坐标数据都是 地球坐标(WGS-84)
,所以都需要将其转换为 火星坐标(GCJ-02)
。
目前找到的比较准确的坐标转换库:eviltransform
Demo 显示结果对比:
- Google Map
从 Demo 里可以看出 Google Map 当前定位打点是不准确的
- MapKit
蓝色圆点是 MapKit 本身的定位打点,大头针位置点是通过 CLLocationManager 获取当前位置,转换坐标后在 地图上显示的。