一.相关的坐标系
1)GPS以及iOS系统定位获得的坐标是地理坐标系WGS1984;
2)Web地图一般用的坐标细是投影坐标系WGS 1984 Web Mercator;
3)国内出于相关法律法规要求,对国内所有GPS设备及地图数据都进行了加密偏移处理,代号GCJ-02,这样GPS定位获得的坐标与地图上的位置刚好对应上;
4)特殊的是百度地图在这基础上又进行一次偏移,通称Bd-09;
所以以在处理系统定位坐标及相关地图SDK坐标时需要转换处理下,根据网络资源,目前有一些公开的转换算法。
二.iOS地图开发
1)<CoreLocation/CoreLocation.h> 中提供的CLLocationManager类获取的坐标是WGS1984坐标,这种坐标显示在原生地图(国内iOS原生地图也是用的高德)、谷歌地图或高德地图需要进行WGS1984转GCJ-02计算,苹果地图及谷歌地图用的都是高德地图的数据,所以这三种情况坐标处理方法一样,即
将WGS1984坐标转换成偏移后的GCJ-02才可以在地图上正确显示位置。
2)在高德地图中获取的坐标是已经转换成GCJ-02的坐标,这时候的坐标无需转换可以直接显示到地图上的正确位置。
注意点:若此时要对获取的坐标使用CLGeocoder类提供的方法- (void)reverseGeocodeLocation:(CLLocation*)location completionHandler:(CLGeocodeCompletionHandler)completionHandler转码成中文地理位置,就得先将GCJ-02的坐标转换成WGS1984坐标,然后再进行中文地址转码,因为CLGeocoder也是CoreLocation中的类,同样使用的是WGS1984坐标。
3)同理,百度地图显示需要先将坐标转换为Bd-09坐标。
代码GitHub地址(感谢作者开源):https://github.com/JackZhouCn/JZLocationConverter
从设备获取经纬度(GPS)坐标
如果使用的是百度sdk那么可以获得百度坐标(bd09)或者火星坐标(GCJ02),默认是bd09
如果使用的是ios的原生定位库,那么获得的坐标是WGS84
如果使用的是高德sdk,那么获取的坐标是GCJ02
互联网在线地图使用的坐标系
火星坐标系:iOS地图(其实是高德)Gogole地图搜搜、阿里云、高德地图
百度坐标系:当然只有百度地图
WGS84坐标系:国际标准,谷歌国外地图、osm地图等国外的地图一般都是这个
网友评论