Ненадежная скорость определения местоположения по GPS для Android

Написание приложения регистрации 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;
        }
}
10
задан galath 9 August 2015 в 09:29
поделиться