Запись приложения для регистрации 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;
}
}