Получение текущего местоположения пользователя из mapView без отображения карты на экране - PullRequest
0 голосов
/ 09 марта 2012

Я пишу приложение, которое хранит местоположение мест, где вы были в течение дня.Я провел много исследований по CLLocationManager и тестировал свое приложение в течение последних 3 недель.Места, которые я получаю с помощью CLLocationManager, иногда очень неточны, иногда в 4 или 5 милях от того места, где я нахожусь.У меня есть журнал в моем тестовом приложении и я понял, что каждый раз, когда я получаю новое местоположение, мой метод DidUpdateToLocation вызывается 3 раза подряд, как в течение одной секунды, и я получаю 3 разных местоположения.Один из них всегда прав, а два других выключены.Я тестировал его с разной точностью (сотня метров, ближайшие тэнметры и лучшие), но все еще имел ту же проблему.Итак, мой первый вопрос:

В любом случае я могу узнать, какое из этих мест является правильным, чтобы я мог сохранить его?

Я также понял, что текущее местоположение пользователявид карты всегда очень точный, поэтому я подумал о том, чтобы получить местоположение пользователя из mapView (синяя точка) вместо CLLocationManager, но я узнал, что объект mapView будет возвращать только текущее местоположение, если карта на самом деле на экране,и это не тот случай, так как я хочу, чтобы мое приложение работало в фоновом режиме.Итак, второй вопрос:

Есть ли способ получить текущее местоположение пользователя из mapView без отображения карты на экране?Или, по крайней мере, использовать ту же технику, что mapView использует для поиска текущего местоположения?

Если у вас есть опыт работы с mapKit и CLLocationManager, поделитесь своими мыслями.

Спасибо за ваше время.Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 09 марта 2012

Могу ли я в любом случае выяснить, какое из этих мест является правильным, чтобы я мог сохранить его?

Посмотрите на свойство horizontalAccuracy получаемых вами местоположений.Не используйте местоположения, которые являются менее точными, чем то, что вы ищете.

Я также понял, что текущее местоположение пользователя на карте всегда очень точное

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

1 голос
/ 09 марта 2012

Взгляните на образец кода Apple. Найдите меня. Используется переменная:

CLLocation *bestEffortAtLocation;

для определения после обновления, является ли местоположение меньше, чем последнее местоположение, и меньше, чем ограничение по времени, установленное до тех пор, пока не будет найдено наиболее точное местоположение. В частности, посмотрите на GetLocationViewController в примере кода. Я использовал этот код в своих приложениях, и он прекрасно работает.

https://developer.apple.com/library/ios/#samplecode/LocateMe/Listings/Classes_GetLocationViewController_m.html#//apple_ref/doc/uid/DTS40007801-Classes_GetLocationViewController_m-DontLinkElementID_8

...