当前位置:   article > 正文

CLLocationManager定位不准确,在国内存在偏移_ios cllocationmanager 经纬度偏差

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

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

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

[_mapView setShowsUserLocation:YES];
[_mapView setHidden:YES];
  • 1
  • 2

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

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

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);
    /*
     * 坐标转换
     */
     -----------------------
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/290555
推荐阅读
相关标签
  

闽ICP备14008679号