startMonitoringSignificantLocationChanges Отсутствие точности - PullRequest
3 голосов
/ 28 ноября 2011

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

В настоящее время я использую startUpdatingLocation из CLLocationManager, чтобы получить начальное местоположение GPS с точностью до 100 метров.Это работает нормально.

Затем я использую CLLocationManager startMonitoringSignificantLocationChanges, чтобы определить, достаточно ли далеко забрел пользователь.Я использую этот метод, так как он лучше работает от батареи, может работать в фоновом режиме и т. Д.

Теперь у меня возникает проблема с точностью местоположения, возвращаемого при использовании startMonitoringSignificantLocationChanges.Если я просто оставлю свой телефон на столе и подожду 10-20 минут, он автоматически завершит задачу из-за точности (или отсутствия таковой) позиции, возвращаемой из startMonitoringSignificantLocationChanges.Например:

2011-11-27 20:21:44.653 MyApp[2692:707] Location manager wants 100.000000 meter accuracy
2011-11-27 20:21:44.655 MyApp[2692:707] Location manager got 99.260482 meter accuracy
2011-11-27 20:27:52.975 MyApp[2692:707] visit location: lat 43.619912 long -70.237781
2011-11-27 20:27:52.977 MyApp[2692:707] current location: lat 43.619808 long -70.237561
2011-11-27 20:27:52.981 MyApp[2692:707] moved 21.155182 meters from visit origin
2011-11-27 20:37:53.205 MyApp[2692:707] visit location: lat 43.619912 long -70.237781
2011-11-27 20:37:53.207 MyApp[2692:707] current location: lat 43.628081 long -70.231727
2011-11-27 20:37:53.211 MyApp[2692:707] moved 1030.822457 meters from visit origin

Все вышеперечисленное произошло без моего перемещения устройства на дюйм.Я догадываюсь, что startMonitoringSignificantLocationChanges не достаточно точен, чтобы выполнить это требование.Это тот случай?Или я что-то упускаю из виду?

Любые отзывы будут оценены.Я не публиковал никакого кода, но это все довольно простые вещи CLLocationManager.Дайте мне знать, если вам нужно больше информации или фрагментов кода.

Заранее спасибо!

1 Ответ

5 голосов
/ 28 ноября 2011

С CLLocationManager документы :

Этот интерфейс [ например, startMonitoringSignificantLocationChanges ] доставляет новые события только тогда, когда он обнаруживает изменения, связанные с устройствомвышек сотовой связи, что приводит к менее частым обновлениям и значительному снижению энергопотребления.

Таким образом, маловероятно, что startMonitoringSignificantLocationChanges можно будет использовать для проверки местоположений на уровне точности, который вы ищете -- редко, когда вышка сотовой связи может так хорошо вас локализовать.Вы можете попробовать использовать startMonitoringForRegion:desiredAccuracy: вместо этого;он также работает в фоновом режиме и сделает большую грязную работу по тестированию области для вас.

...