Android GPS Местоположение Скорость ненадежная
Запись приложения для регистрации GPS ~
Я нахожу, что значения, возвращаемые методом getSpeed()
на Locations
, сообщенные LocationManager
, являются массово ненадежными. Я использую LocationManager.GPS_PROVIDER
, фильтруя местоположения, предоставленные через onLocationChanged
, для лучшей точности. Даже при одном уровне точности цифр возвращаемая скорость, как правило, смехотворно высока. Мы говорим до 200 мп/ч (да, я знаю, что он регистрировался в метрах/сек), когда телефон неподвижен.
Я тестирую одну и ту же базу кода на двух разных телефонах модели Android, используя две разные версии ОС и видя те же проблемы, поэтому я ожидаю, что это проблема с кодом.
Что мне не хватает? Я пробовал усреднять места за время, безрезультатно. Должен ли я разрабатывать свои собственные значения скорости на основе пройденного расстояния/времени? Это было бы неутешительно.
Как вы увидите, я не делаю ничего особенного - небольшая фильтрация для точности, даже после этого оба AverageSpeed
и _bestLocation.getSpeed()
регулярно неоправданно высоки, даже если точность местоположения хорошая.
public void onLocationChanged(Location location) {
if (location.getAccuracy() < 25f) {
_recentLocations.add(location);
if (_bestLocation == null || location.getAccuracy() <= _bestLocation.getAccuracy())
_bestLocation = location;
}
if ((_bestLocation != null && _bestLocation.getAccuracy() < 10f && _recentLocations.size() >= 10)
|| _recentLocations.size() >= 25)
{
int Count = 0;
float TotalSpeed = 0f;
float AverageSpeed = 0f;
for (int i = 0; i<_recentLocations.size(); i++) {
if (_recentLocations.get(i).hasSpeed()) {
Count++;
TotalSpeed += _recentLocations.get(i).getSpeed();
}
}
if (Count > 0)
AverageSpeed = TotalSpeed / Count;
}
}
Ответы
Ответ 1
Я работал над оборудованием GPS уже более 7 лет. Точность чтения также не на 100% точна.
Производители сохраняют точность и систему, используемую для ее измерения.
CEP, RMS, 2DRMS и R95 - некоторые из систем.
Прочтите эту статью для получения дополнительной информации: http://en.wikipedia.org/wiki/Circular_error_probable
Показатель точности не включает выбросы. Например, если заявленная точность 5 метров, то показания, полученные в хороших условиях сигнала, будут иметь максимальную погрешность 5 метров, в 95% случаев. О остальных 5% -ных показаниях ничего не говорится. Защита от этих
выбросы - это особый соус, который делает хорошее приложение, основанное на местоположении, выделяющимся среди остальных.
Некоторые вещи, которые вы можете сделать, это:
- Отфильтруйте безумно высокие скорости. Используйте высоту в качестве намека на то, чтобы быть в самолете.
- Корреляция информации от датчиков движения и выяснение, согласны ли они с
GPS. Сигналы датчиков движения будут сильно отличаться в стационарном состоянии
и в движении.
- Типичный размер ячейки GSM/3G составляет менее километра в городских
районов и 5-10 километров в малонаселенных районах. Если
транспортное средство движется с высокой скоростью в течение некоторого времени, а ячейковая башня
информация по-прежнему остается прежней, вы знаете, что что-то не так.
- Зафиксирует ли GPS исправление на север в один момент и на юг
на высокой скорости? Если да, это скорее всего ошибка GPS.
- Проверьте количество спутников, используемых в GPS-калибровке. 12 является выдающимся, 9 - здоровым, 5 или менее бедным, 4 - минимальным для лат, lon + высота
расчет, 3 - минимальный минимум для вычисления лата, lon. Анинг менее 3 не является допустимым показанием. Вы можете быть гораздо увереннее в достоверности данных, если число стаеллитов велико.
Ответ 2
GPS-устройства - это позиционные спидометры, основанные на том, как далеко приемник с момента последнего измерения. Его расчет скорости не с учетом тех же источников ошибок, что и спидометр транспортного средства (размер колес, коэффициент передачи/привода). Вместо этого позиционирование GPS точность и, следовательно, точность его расчетной скорости, в зависимости от качества спутникового сигнала в то время. скорость расчеты будут более точными на более высоких скоростях, когда отношение позиционная ошибка в изменении позиции ниже.
Из Википедии.
Вероятно, вы должны попробовать это, где у вас хорошая сила сигнала.
Ответ 3
У меня такая же проблема. Я думаю, что сигнал GPS зависит от местоположения, какое-то место может дать точный вывод местоположения, иначе "не столь надежный" результат. В моем случае я был расположен примерно в 200 метрах от моего фактического местоположения. Как насчет вас?
Чтобы добавить, GPS_PROVIDER здесь не работает. NETWORK_PROVIDER делает, и это тот, который дает результат 200 метров.
Ответ 4
Похоже, что большинство людей полагают, что информация о скорости из GPS основана на сравнении позиций, связанных с разностью во времени. Этот метод не очень хорош для определения скорости и хуже при более низких скоростях движения.
GPS-приемники могут выводить измерение скорости на основе доплеровского сдвига от измерений сателлита. Точность измерения скорости, основанная на доплеровском режиме, намного лучше, чем измерение скорости, основанное на расчетах местоположения/времени.
Google на скорости допплера gps и вы найдете много, чтобы прочитать.
Одна ссылка здесь:
http://nujournal.net/HighAccuracySpeed.pdf
/Urban Holmdahl
Ответ 5
если gps не удается.
теперь html5 предоставляет API геолокации
http://diveintohtml5.info/geolocation.html