Менеджер местоположений дает старые местоположения с новыми временными метками - PullRequest
5 голосов
/ 07 ноября 2011

У меня возникла следующая проблема в приложении для iPhone:

Я регулярно включаю диспетчер местоположения и жду нескольких обновлений местоположения.При получении нового местоположения я проверяю свойство метки времени нового местоположения, чтобы узнать, является ли оно старым местоположением или нет:

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation {

    numberOfUpdatesInInterval++;
    NSLog(@"%d;%f;%f;%.0f;%@;%@;%@",
                              numberOfUpdatesInInterval,
                              newLocation.coordinate.latitude,
                              newLocation.coordinate.longitude,
                              newLocation.horizontalAccuracy,
                              newLocation.timestamp,
                              [self getCurrentDateAsString],
                              newLocation);
}

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что я получаю новые местоположения, где отметка времениновый, но координаты все еще старые, я получил ранее.Я проверял это, когда ехал на своей машине со скоростью 120 км / ч, получая одни и те же координаты несколько раз, но с разными временными метками.У меня такая же проблема в iOS 4 и 5.

Как это возможно?Или как я могу справиться с этой проблемой?

Ответы [ 2 ]

1 голос
/ 09 января 2012

Существует несколько способов определения местоположения iPhone.

  • сигнал ячейки
  • WiFi точек доступа
  • Спутники GPS

Самый быстрый поиск местоположения - это определение местоположения сигнала ячейки. Пока у вас есть данные, большинство локальных башен будут кэшироваться. Точность сотовой вышки может варьироваться от 500 до 1500 м и более.

Вторым по быстродействию, если у вас есть подключение для передачи данных или вы недавно были в этом районе, это поиск по wifi. Это обеспечит очень точное местоположение. Предостережение заключается в том, что вы должны быть рядом с Wi-Fi и иметь хороший сигнал данных.

Самым медленным является GPS. GPS в iPhone является aGPS. Он использует данные из расположений вышек сотовой связи, чтобы лучше определить вашу позицию. Если у телефона нет соединения для передачи данных и нет Wi-Fi, это может занять от 2 до 4 минут, чтобы получить исправление. С информацией о вышке сотовой связи это может занять 30 секунд.

Из документов Apple:

При запросе высокоточных данных о местоположении начальное событие, доставленное службой определения местоположения, может не соответствовать запрошенной вами точности. Служба определения местоположения доставляет начальное событие как можно быстрее. Затем он продолжает определять местоположение с запрошенной вами точностью и по мере необходимости доставляет дополнительные события, когда эти данные доступны.

В автомобиле менее вероятно, что вы находитесь рядом с точками доступа Wi-Fi, и, возможно, придется ждать дольше, чтобы включить GPS-блокировку. Если locationManager считает, что вы все еще находитесь в диапазоне предыдущего местоположения, это может привести к появлению старой координаты с другой отметкой времени.

Проверьте точность данных по горизонтали, а также отметку времени, чтобы определить, является ли местоположение таким же точным, как вы запрашивали.

0 голосов
/ 27 марта 2014

Менеджер Cllocation по умолчанию обновляет местоположение как

locationManager.distanceFilter = kCLDistanceFilterNone;

, поэтому вы получаете повторяющиеся координаты. на самом деле, он очень часто обновляет детали, даже если в ALTITUDE есть изменения.

Так что лучше всего установить

locationManager.distanceFilter = 4.0f; 

// это будет отправлять новые данные об обновлении местоположения только тогда, когда вы перемещаетесь каждые 4 метра от вашего текущего местоположения.

...