iOS地图定位偏差问题解决(不同坐标系转化)

国际共识:WGS84的坐标系统,以经纬度的形式来表示地球平面上的某一个位置;

中国:GCJ-02的坐标系统。在我国,出于国家安全考虑,国内所有导航电子地图必须使用国家测绘局制定的加密坐标系统,即将一个真实的经纬度坐标加密成一个不正确的经纬度坐标,称之为火星坐标;

百度:BD-09的坐标系统,百度坐标是在国测局制定的GCJ-02,对地理位置进行首次加密的基础上,进行了BD-09二次加密措施,更加保护了个人隐私。

下面直接上代码,直接创建一个坐标转化类,用的时候将定位到的CLLocationCoordinate2D,直接通过所定义的类转化一下,再用的时候,地图定位偏差较大的问题即可解决。分别介绍下下列方法

1.判断是否在中国

+ (BOOL)isLocationOutOfChina:(CLLocationCoordinate2D)location;

2. 将WGS-84转为GCJ-02(火星坐标):

+ (CLLocationCoordinate2D)transformFromWGSToGCJ:(CLLocationCoordinate2D)wgsLoc;

3.将GCJ-02(火星坐标)转为百度坐标:

+(CLLocationCoordinate2D)transformFromGCJToBaidu:(CLLocationCoordinate2D)p;

4.将百度坐标转为GCJ-02(火星坐标):

+(CLLocationCoordinate2D)transformFromBaiduToGCJ:(CLLocationCoordinate2D)p;

5.将GCJ-02(火星坐标)转为WGS-84:

+(CLLocationCoordinate2D)transformFromGCJToWGS:(CLLocationCoordinate2D)p;

用的时候,直接把国际坐标转换成火星坐标,就可以直接显示定位信息了

具体代码见demo  

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容