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  

你可能感兴趣的:(iOS地图定位偏差问题解决(不同坐标系转化))