2010-09-15 3 views
2

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

Одна из возможностей, которые я хотел бы реализовать это одометр ,

Я получаю местонахождение периодически через didUpdateToLocation.

Я пробовал измерять расстояние между newLocation и oldLocation и накапливать результат, но это не очень точно. Накопленное значение обычно намного больше, чем фактическое пройденное расстояние.

Какой алгоритм я могу использовать для повышения точности этого расчета?

+0

Вы нашли ответ на этот вопрос? – chris

+0

Я думаю, что идея использования фильтра нижних частот звучит, но у меня еще не было возможности попробовать это. – Avalanchis

ответ

1

Похоже, что плохой сигнал GPS перемещает (сообщается) местоположение вашего устройства повсюду, которое ваше приложение интерпретирует как пользователь, постоянно меняющий направление. Возможно, это поможет отделить движение от одного места к другому в его x- и y-компоненту и запустить их через какой-то фильтр нижних частот. Это должно минимизировать влияние «плохих» обновлений, которые влияют на перемещение вашего местоположения полностью из вашего фактического пути.

1

Я пытаюсь понять это и думаю, что что-то можно сделать с помощью CLLocationManagerdistanceFilter. Свойство позволяет ограничить didUpdateToLocation делегирование вызовов для обновлений, которые, по крайней мере, на минимальном расстоянии от предыдущего обновления. Например, с проблемой одометра, скажем, вы стоите, но gps беспорядочно сообщает о позициях 1 м вокруг вас. Если вы установите distanceFilter на 2, то ни одно из этих обновлений не будет зарегистрировано как движение.

Хитрость заключается в том, чтобы найти значение distanceFilter, который работает, и я считаю, что это как-то связано с horizontalAccuracy от GPS (который я предполагаю, является причиной ошибочных обновлений) и скорость, с которой вы путешествуете , horizontalAccuracy должен быть хорошим с активностью на открытом воздухе, но предполагается, что эти небольшие неточности накапливаются и вызывают неправильное считывание показаний одометра.

Если каждый вызов didUpdateLocation вводит небольшое количество ошибок (скажем, до 10 см в чтении), то это имеет смысл, медленная активность, такие как ходьба будет грубо неточной, если вызов был сделан каждый метр на didUpdateToLocation. Это будет до (10 см/1 м =) 10% от ошибки за обновление. Если это было сделано в автомобиле, движущемся со скоростью 100 км/ч, а distanceFilter были установлены на 10 м (что является безопасной установкой, так как автомобиль, движущийся со скоростью 100 км/ч, будет двигаться очень близко к прямой линии более 10 м), то та же ошибка 10 см будет иметь максимум (10 см/10 м =) 1% ошибки за обновление. Скорее всего, это сложнее, но я пытаюсь проиллюстрировать, что скорость играет определенную роль.

Я думаю, что решение состоит в том, чтобы выбрать значение для distanceFilter, что минимизирует ошибочные обновления, но, самое главное, учитывает скорость пользователя (например, с автомобилем в предыдущем примере). Кто-нибудь хочет найти алгоритм или формулу?

Смежные вопросы