Рассчитать скорость между двумя точками местоположения в Android

Кажется, что это должно быть достаточно просто, но я не могу получить четкий пример того, как рассчитать мою скорость с помощью служб определения местоположения Android.

Все, что я хочу сделать, это рассчитать свою скорость на основе моей предыдущей и текущей позиции GPS. getSpeed() не работает, потому что в какой-то момент его нужно установить с помощью setSpeed().

Итак, есть ли какой-нибудь пример кода, который я могу запустить в Eclipse на своем эмуляторе Android, работающем с файлом GPX, который покажет мне мой темп в любых измерениях (метры, футы, мили и т. д., не имеет значения - я всегда могу преобразовать это в то, что мне нужно).

Заранее спасибо, Алекс


person Alex T    schedule 20.11.2011    source источник


Ответы (2)


getSpeed() не работает, потому что в какой-то момент его нужно установить с помощью setSpeed().

(Если вы используете реальное устройство -- ). Нет, скорость определяется набором микросхем GPS, и она должна быть более точной, чем определение расстояния и времени между двумя последовательными местоположениями. Вам не нужно setSpeed() . Позвоните hasSpeed(), чтобы узнать, действительна ли скорость. .


(Если вы не используете реальное устройство) Мне удалось успешно использовать поставщика фиктивного местоположения, где вы можете установить Location объект, который хотите, с помощью setSpeed() в метрах в секунду.

Вот несколько способов сделать это:

person Reno    schedule 22.11.2011

Вы просто имеете в виду что-то вроде этого? Выдает скорость в м/с.

oldLocation.distanceTo(newLocation) / (newLocation.getTime() - oldLocation.getTime())

person Philip Pearl    schedule 20.11.2011
comment
это, вероятно, будет работать, но иногда может давать немного дрянные результаты (например, высокие колебания из-за одного неверно рассчитанного местоположения). Вы можете сделать его более плавным, рассчитав среднее значение большего количества наборов данных о местоположении. - person stefan; 20.11.2011
comment
Также имейте в виду, что getTime() возвращает миллисекунды, а не секунды. Таким образом, вы ошибаетесь в 10 ^ 3 раза, если ожидаете m/s. - person ; 20.11.2011