CLLocationManager странные проблемы - PullRequest
0 голосов
/ 05 сентября 2011

У меня есть MKMapView, в котором я удаляю аннотацию каждый раз при загрузке представления или когда вызывается showLocation метод пользовательского класса.

Мне нужна точность, чтобы быть лучшим

-(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];
}

У меня вопрос, когда будет вызван метод didUpdateToLocation? Только после обнаружения нового местоположения, когда я выполняю [locationManager startUpdatingLocation]?

Я сталкиваюсь с какой-то странной проблемой, когда пользователь путешествует и находится на стоянке. Скажем, пользователь путешествует из точки A-> B-> C-> D с интервалами в 1 минуту между точками. Когда я вызываю мой метод в точке C, иногда он возвращает координаты точки A, иногда точки B, а иногда C. Это просто случайно.

Это еще более странно, когда я нахожусь на стационарном. Я получаю разные координаты при вызове метода showLocation, даже если я подключен к своему домашнему WiFi.

Я думал о реализации didUpdateToLocation, чтобы получить наилучший результат за 5 секунд. Если в течение 5 секунд он находит определенное местоположение с точностью, которую я определил, то используйте координату. Если нет, используйте лучшее, что было найдено за 5 секунд. Но так как я новичок, я не уверен, как написать что-то подобное. Я прочитал NSTimer и похоже, что он может работать.

Любые советы, ребята?

Заранее большое спасибо!

Ответы [ 2 ]

1 голос
/ 05 сентября 2011

Одна из причин, по которой вы получаете местоположение из точки A, заключается в том, что CoreLocation возвращает последнее действительное местоположение, которое было у него первым, до тех пор, пока оно не сможет получить более точное местоположение. Когда вы звоните [locationManager startUpdatingLocation];, он будет возвращать -didUpdateToLocation снова и снова, пока вы не будете зарегистрированы, и, наконец, позвоните -stopUpdatingLocation.

Я думаю, вам просто нужно немного подождать, пока он исправит свое местоположение, прежде чем прекратить обновлять свое местоположение. Я бы посоветовал перенести место остановки обновления с вашего -didUpdateToLocation на другой метод.

0 голосов
/ 05 сентября 2011

Удалить [locationManager stopUpdatingLocation]; из вашего кода и попробуйте.

...