CLLocationManager定位不準確,在國記憶體在偏移
阿新 • • 發佈:2019-02-01
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);
/*
* 座標轉換
*/
-----------------------
}