赞
踩
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);
/*
* 坐标转换
*/
-----------------------
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。