2011-09-05 3 views
0

나는보기가로드 될 때마다 또는 showLocation 사용자 정의 클래스 메서드가 호출 될 때마다 주석을 삭제하는 MKMapView가 있습니다. didUpdateToLocation 메서드가 호출 될 때CLLocationManager 이상한 문제

내가 제일

-(void)viewDidLoad { 
    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; 
    [locationManager startUpdatingLocation]; 
} 
-(IBAction) showLocation:(id) sender{ 
    [locationManager startUpdatingLocation]; 
} 
- (void) locationManager:(CLLocationManager *) manager 
    didUpdateToLocation:(CLLocation *) newLocation 
      fromLocation:(CLLocation *) oldLocation { 
// start geocoding with newLocation coordinate which will automatically set annotation. 
SVGeocoder *geocodeRequest = [[SVGeocoder alloc] 
             initWithCoordinate:CLLocationCoordinate2DMake(newLocation.coordinate.latitude, newLocation.coordinate.longitude)]; 
     [geocodeRequest setDelegate:self]; 
     [geocodeRequest startAsynchronous]; 
     [geocodeRequest release]; 
      [locationManager stopUpdatingLocation]; 
} 

내 질문이되고 정확성이 필요하다? [locationManager startUpdatingLocation]을 수행 할 때 새로운 위치가 발견 된 후에 만?

사용자가 여행 중이거나 정지 중이면 이상한 문제에 직면하고 있습니다. 사용자가 점 사이를 1 분 간격으로 점 A → B → C → D에서 이동한다고 가정 해보십시오. 포인트 C에서 메소드를 호출 할 때 언젠가 포인트 A의 좌표를 리턴하고 때로는 포인트 B와 때로는 C를 리턴합니다. 단지 랜덤입니다.

정지 상태에있을 때 더욱 이상합니다. 내 집 WiFi에 연결되어 있는데도 showLocation 메서드를 호출 할 때 다른 좌표를 얻습니다.

나는 didUpdateToLocation을 구현하여 5 초 이내에 최상의 결과를 얻으려고했다. 5 초 이내에 정의한 정확성의 특정 위치를 찾은 다음 좌표를 사용하십시오. 그렇지 않은 경우 5 초 내에 가장 좋은 것을 사용하십시오. 그러나 내가 새로운 것처럼 나는 그런 식으로 코딩하는 방법을 모르겠습니다. 나는 NSTimer를 읽고 그것이 효과가있을 것 같은데.

조언이 있으십니까?

미리 감사드립니다.

답변

1

지점 A에서 위치를 수신하는 이유 중 하나는 CoreLocation이 더 정확한 위치를 얻을 수있을 때까지 마지막으로 유효한 위치를 반환한다는 것입니다. [locationManager startUpdatingLocation];으로 전화하면 정해진 시간에 -didUpdateToLocation을 반복해서 보내고 마지막으로 -stopUpdatingLocation으로 전화 할 것입니다.

위치 업데이트를 중지하기 전에 더 나은 위치 수정을 얻는 데 약간의 시간이 필요하다고 생각합니다. -didUpdateToLocation에서 위치 업데이트를 중지하는 방법을 다른 방법으로 이동하는 것을 고려해 보았습니다.

0

[locationManager stopUpdatingLocation]을 삭제하십시오. 귀하의 코드에서 시도하고 시도하십시오.