CLLocationManager定位不准确,在国内存在偏移

iOS系统的CLLocationManager获取到的地理位置坐标,在系统自带地图上显示时,发现与在MKMapview上通过定位自己位置获取到的位置不一致,存在偏差。

原因:
国内地图使用的坐标系统是GCJ-02,而CLLocationManage定位r输出的是国际标准的坐标系统WGS-84。国内使用的是加密后的坐标系统GCJ-02,即火星坐标,而在MKMapView上通过定位自己位置所获取到的经纬度是准确的,因为苹果已经对国内地图做了偏移适配(注:MKMapView上addOvery和addAnotitation的坐标参数输入均为GCJ-02)。

获取精确的经纬度方法:
1、使用MKMapView中的定位获取

[_mapView setShowsUserLocation:YES];
[_mapView setHidden:YES];

MKMapView的代理方法上报当前地理位置:

-(void)mapView:(MKMapView *)mapViewdidUpdateUserLocation:(MKUserLocation *)userLocation{
    CLLocationCoordinate2D coord =[userLocation coordinate];
    NSLog(@"当前位置(经度:%f,纬度:%f)",coord.longitude,coord.latitude);
 }

2、 使用CLLocationManager获取当前位置,然后将该坐标转换为GCJ-02

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{
    self.coordinate = CGPointMake(newLocation.coordinate.longitude, newLocation.coordinate.latitude);
    NSLog(@"-当前位置(经度:%f,纬度:%f]-",newLocation.coordinate.longitude,newLocation.coordinate.latitude);
    /*
     * 坐标转换
     */
     -----------------------
}

转换算法参考:https://github.com/reesun1130/WGS84TOGCJ02

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值