Как получить максимально точную скорость от GPS в Android - PullRequest
3 голосов
/ 19 марта 2012

Как я могу получить точную скорость от GPS в Android? Да, мне известен метод location.getSpeed() в классе Location. Проблема в том, что реализация по умолчанию возвращает 0.0 как скорость: по-видимому, , это поведение по умолчанию .

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

a.distanceTo(b)/(b.getTime()-a.getTime());

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

Проблема в том, что это несколько неточно: при нормальных обстоятельствах точки данных настолько близки друг к другу, что неточность GPS действительно становится проблемой. Либо мне нужно будет уменьшить частоту обновления или рассчитать скорость относительно точки, находящейся дальше. Первое, что я не хочу делать, так как я хочу получить как можно более высокую частоту, но, возможно, я мог бы отфильтровать точки для расчета скорости на основе их расстояния друг к другу? Оптимальным решением, которое, как я предполагал, мог бы сделать метод getSpeed(), было бы вычисление скорости относительно самих спутников GPS, что позволило бы получить более точный результат. Я использую getSpeed() неправильно как-то?

Ответы [ 3 ]

0 голосов
/ 30 марта 2012

Используйте формулу, которую вы указали, чтобы определить среднюю скорость, но убедитесь, что ваши две точки находятся на прямой линии.Вы можете увидеть, движется ли пользователь в том же направлении, вызвав Location.getBearing ().Если это достаточно близко, можно предположить, что они путешествовали по прямой линии.Если не просто отказаться от результата.

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

0 голосов
/ 11 мая 2012

Эмулятор, очевидно, всегда отвечает 0 как скорость, но реальное устройство не должно.У вас такая же проблема на реальном устройстве?- Стефан 20 марта в 8: 21

Ответ Стефана был действительно правильным.Видимо, эмулятор не дает скорости, так как он не содержится во входных данных файла GPX в качестве данных тестирования.Так что, если вы хотите показать скорость, протестировать на реальном устройстве и пойти на пробежку, это сработает (для большинства устройств).

Ниже приведены некоторые соображения относительно других методов определения скорости, но они не являются строго релевантными., но может быть интересно, если вы работаете с GPS.

Из-за относительной погрешности GPS, особенно на медленных скоростях или извилистых дорогах, скорость вычислить сложно: либо расстояние между точками данных слишком малоПогрешность GPS приходит в игру, или так долго, она становится неточной, если не двигаться прямо.Кроме того, если минимальное расстояние между точками данных для расчета скорости велико, при медленных скоростях интервал обновления становится проблемой.Существует несколько способов решения этой проблемы, например использование метода getAccuracy () для вычисления минимального безопасного расстояния между точками данных и его динамическое использование, фильтрация точек данных на основе максимальных значений ускорения и замедления, направления движения и т. Д.Вы также можете рассчитать скользящее среднее, чтобы немного успокоить изменения и получить довольно хорошее представление о том, что к чему.

Приведенные выше методы могут быть полезны даже в том случае, если вы не рассчитываете скорость на основе пройденного расстояния,иногда кажется, что GPS возвращает скорость как 0, даже когда вы двигаетесь.В качестве фильтров я использовал цифры ускорения / замедления автомобилей F1:)

0 голосов
/ 19 марта 2012

Так как вы ведете историю, почему бы и нет ...

Получить текущее местоположение и время

Найти скорость между текущим и последним ~ 10

Взять в среднем ваши результаты

...