почему было вызвано обновление, когда устройство не перемещается

Я использую CLLocation для приложения, которое записывает след людей в представлении карты, когда они бегут или идут, но я обнаружил, что, когда мое устройство все еще (не перемещено), менеджер - (void) locationManager: (CLLocationManager *) didUpdateLocations: (NSArray *) ) локации тоже часто называют? В настоящее время желаемая точность моего locationmanager составляет 10 метров, а DistanceFilter - 10.

как бороться с этой ситуацией? Я пробовал использовать значение фильтра большого расстояния (например, 150), но обнаружил, что если я сделаю это, то не смогу точно записать, когда люди бегут или ходят.


person ximmyxiao    schedule 20.02.2013    source источник


Ответы (3)


GPS не точен. Вы можете пройти несколько футов и оказаться в том же месте. Или вы можете сесть и услышать, что вы переместились на несколько футов.

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

person rmaddy    schedule 20.02.2013
comment
Я нашел другое решение для решения этой проблемы: используйте ivar скорости CLLocation, на самом деле я обнаружил, что все местоположения, которые вы получаете, когда ваше устройство не перемещается, имеют отрицательную скорость, поэтому мы можем фильтровать все местоположения с отрицательным скорость . - person ximmyxiao; 04.03.2013
comment
Или вы можете сесть и услышать, что вы переместились на несколько футов. Я думаю, это не совсем потому, что он обнаруживает реальное движение, а потому, что ему просто нужно часто проверять ваше местоположение, и очевидно, что GPS-слежение не является 100% точным. При этом может получиться другой результат. Частота, которую он проверяет, вероятно, зависит от ряда факторов, вашей желаемой точности, ваших недавних перемещений и расстояния. - person Honey; 03.08.2017

Вы звонили stopUpdatingLocation после начального startUpdatingLocation? Он будет продолжать обновлять местоположение, если вы его не назовете.

person Tommy Devoy    schedule 20.02.2013
comment
но я не могу сразу вызвать stopUpdatingLocation, потому что мне нужно быть готовым отслеживать, когда люди движутся :( - person ximmyxiao; 20.02.2013

Как система узнает, действительно ли вы переехали? Он ДОЛЖЕН получить ваше местоположение, чтобы узнать. Чем точнее будет ваша желаемая точность, тем более энергично и часто она будет выглядеть. Под энергичным я подразумеваю, что если предполагается использовать информацию о вышках сотовой связи, то для лучшей триангуляции потребуется больше вышек сотовой связи. Или, проще говоря, интервал между его выборками был бы меньше. Заключение: ОС будет получать данные, даже если вы не двигаетесь.

Кроме того, для триангуляции вашего местоположения ОС (в зависимости от вашей желаемой точности и предыдущих перемещений) будет использовать сочетание GPS, Wi-Fi и вышки сотовой связи. И поскольку кто-то может внезапно выключить / включить свой Wi-Fi, или спутник, который вы использовали для определения вашего местоположения, немного сместился, или спутники изменились, или сигнал вышки сотовой связи может стать более или менее точным из-за его пропускной способности ограничения, то ваше рассчитанное местоположение может измениться, что приведет к обратному вызову, если оно больше вашего distanceFilter. (Я не верю, что вы получаете обратные вызовы меньше, чем ваш distanceFilter, но я могу ошибаться) Это, вероятно, означает, что ваш distanceFilter установлен на очень маленькое число, которое в зависимости от ваших бизнес-требований может быть или не может быть хорошим выбором. Вывод: ваше местоположение никогда не бывает точным на 100%

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

person Honey    schedule 03.08.2017