2009-02-24 3 views
6

Я экспериментирую с добавлением функций GPS в свое приложение для iPhone. Это приложение для тренировки, которое будет использоваться во время ходьбы или бега. Поэтому я хочу использовать GPS для того, чтобы показать скорость, с которой человек движется в Mph и минуту/миля.iPhone CoreLocation: Как получить максимальную скорость

Как настроить CLLocationManager, чтобы получить наилучшие результаты? Что я должен установить, желательно, для функции «Охват» и «DistanceFilter»?

Я попытался с:

distanceFilter = 10 и desiredAccuracy = kCLLocationAccuracyNearestTenMeters

и чтение

CLLocation.speed свойство

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

Должен ли я использовать kCLLocationAccuracyBest и другое значение для distanceFilter?

Мне интересно услышать от других, используя CoreLocation, чтобы получить скорость. Что вы делаете, чтобы получить более точные результаты?

ответ

3

Отказ от ответственности: Я играл с CoreLocation немного, я не очень точно тестировал точность.

Я ожидаю, что вы получите самые точные результаты, используя значения по умолчанию для distanceFilter и wishAccuracy. Менее частые обновления позволят вам меньше данных для работы.

Одна проблема, с которой вы, вероятно, столкнетесь, - это когда исправление местоположения потеряно на некоторое время, а затем возвращается. Наивный подход, основанный на подключении к точке, чтобы определить пройденное расстояние, будет склонен недооценивать фактическую скорость бегуна. Вместо того, чтобы использовать CLLocation.speed, вы можете получить лучшие результаты, вычисляя скорость, основанную на некоторой эвристической аппроксимации линии, на которой выполняется бегун.

5

Для получения наилучших результатов вы должны использовать kCLLocationAccuracyBest. То, что вы помещаете в свой дистанционный фильтр, зависит от того, с какой ошибкой вы готовы поставить. В принципе, вам придется принимать решения на основе точности и доступности. То есть, в периоды, когда лучший ответ не доступен, что вы будете отображать?

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

То есть предположим, что я бегом на 6 миль в час на север. Вы замышляете меня по точкам-точке, точке-B, точке-C ... тогда вы получите ответ с низкой точностью (возможно, kCLLocationAccuracyNearest100Meters.) Посмотрите на то место, где говорится, что я и выясняю, «мог ли я получить это пятно от точки-C, если бы я продолжил свой текущий путь, внеся разумные корректировки для возможных изменений скорости? " Если это так, то новая точка находится в пределах возможностей. (Если нет, то выбросьте его.) Затем проецируйте с точки-C на мою последнюю известную скорость и выясните, где вы думаете, я, вероятно, баллистически. Сохраните это как баллистическая точка-D.

Конечно, вы используете акселерометр, чтобы получить какое-то инерционное чувство, каким образом я пошел, правильно?Таким образом, вы не можете знать направление (вы не знаете, как указывает телефон), но вы можете сделать разумный удар на расстоянии.

Используя всю эту информацию, заговорите наиболее вероятное место, где, по вашему мнению, я, вероятно, есть.

ПРИМЕЧАНИЕ. При тестировании не просто входите в зоны покрытия хорошей ячейки. Посмотрите, как ваше приложение работает на холмах, вдали от сотовых телефонов. Многим людям нравится ездить на велосипеде & jog те области!

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