美文网首页
关于地图的坐标系

关于地图的坐标系

作者: 流沙3333 | 来源:发表于2017-04-17 13:38 被阅读476次

    一.相关的坐标系

    1)GPS以及iOS系统定位获得的坐标是地理坐标系WGS1984;

    2)Web地图一般用的坐标细是投影坐标系WGS 1984 Web Mercator;

    3)国内出于相关法律法规要求,对国内所有GPS设备及地图数据都进行了加密偏移处理,代号GCJ-02,这样GPS定位获得的坐标与地图上的位置刚好对应上;

    4)特殊的是百度地图在这基础上又进行一次偏移,通称Bd-09;

    所以以在处理系统定位坐标及相关地图SDK坐标时需要转换处理下,根据网络资源,目前有一些公开的转换算法

    二.iOS地图开发

    1.坐标的转换逻辑

    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地图等国外的地图一般都是这个

    相关文章

      网友评论

          本文标题:关于地图的坐标系

          本文链接:https://www.haomeiwen.com/subject/nprtzttx.html