2014-01-22 4 views
1

Я работаю над приложением, где мне нужно получить скорость автомобиля. Чтобы получить скорость, я знаю, что могу использовать что-то вроде double speed = locationB.getSpeed ​​(); `однако, когда я тестирую, скорость варьируется от 0,0 до 40 км/ч, когда я просто сижу прямо за ноутбуком, не двигаясь вообще. В машине скорость фактически приближается к скорости автомобилей, поэтому это не должно быть проблемой.Проверьте, действительно ли устройство работает.

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

double distance = locationA.distanceTo(locationB); 
double speed = (distance/time) * 3600/1000; 

Однако это, как представляется, не стабильна на всех, как и метод getSpeed().

Есть ли способ показывать только скорость, если устройство движется? И будет ли он надежным?

Любая помощь с учётом,

Thanks.

ответ

2

Проверьте атрибут точности horicontal Location.
Если это менее 30 м, вы можете игнорировать местоположение.

Если вы сидите на своем ноутбуке и получаете скорость = 40 км/ч (что я никогда не видел в хороших устройствах GPS), то посмотрите, что такое hor. точность есть. Это, вероятно, намного больше 30 м.

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

+0

Очень полезно, спасибо! – Jef

+0

@AlexWien Любые указатели на атрибут точности горизонтальности местоположения –

+0

@hemanthkumar прочитал документ android Location class – AlexWien

0

Думаю, вы должны ограничить расстояние между A и B минимальной длиной. Небольшие расстояния вносят больше ошибок в вычисления скорости.

Boolean moving - false; 
double distance = locationA.distanceTo(locationB); 
double speed = (distance/time) * 3600/1000; 
if (distance > SOME_THRESHOLD) { 
    moving = true 
} 
+0

Очень просто, я так и не подумал об этом! Спасибо за ваш вклад, сразу же проверим его. – Jef

+0

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

+0

Спасибо за подсказку, будет использовать '.getSpeed ​​()'. Но использование порога, как сказал Мартин, по-прежнему очень полезно, не так ли? – Jef

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