1. 程式人生 > >CLLocationManager定位不準確,在國記憶體在偏移

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); /* * 座標轉換 */ ----------------------- }