FusedLocationProvider иногда дает неверное местоположение

1

Я использую FusedLocationProviderClient для получения обновлений местоположения в службе переднего плана. При тестировании и наблюдениях в течение нескольких дней я обнаружил неправильные местоположения, которые находились далеко от моего фактического местоположения примерно на 4 км, подобно этому Изображение 174551, но у LocationResult была точность 24 метра. Как это вообще возможно?

Его можно устранить, если точность была около 4 км. Такое поведение встречается не очень часто, но, по крайней мере, один раз в 4 из 10 устройств. Это становится проблемой, когда я вычисляю пройденное расстояние.

Я могу сказать, что это не кэшированное местоположение, потому что я обычно выключал и включал Location Services каждый день. (Согласно документам, отключение служб определения местоположения очищает расположение кэша.)

Любая идея, почему это дает неправильное местоположение и как это устранить? А также очистка кеш-памяти без отключения Location Services?

Теги:
location
android-fusedlocation

1 ответ

3
Лучший ответ

FusedLocationProvider МОЖЕТ давать неверные результаты, например, когда соединение с GPS для устройства не работает (или недостаточно спутников для просмотра точных данных). Он будет использовать данные о ближайшей сотовой вышке/местонахождении, предоставленные маршрутизатором Wi-Fi (Google отслеживает это автоматически), давая ДИКОМ Неверные результаты в тех местах, где Google не имеет сильного отображения местоположения - что находится за пределами городского центра.

У вас есть два варианта:

  1. Используйте решение, не основанное на googleplay, основанное на сервисе определения местоположения - оно позволяет игнорировать данные о местоположении, отличные от gps (Wi-Fi/сотовая связь).

    LocationManager locationManager = (LocationManager)
    getApplicationContext().getSystemService(LOCATION_SERVICE);  
    Location location = locationManager.getLastKnownLocation(LocationManager.GPS_Provider);
    

    Вы даже можете указать количество спутников, необходимых для приемлемых данных, чтобы вы могли получить ДЕЙСТВИТЕЛЬНО точные данные о местоположении. Вы потеряете информацию, когда GPS не получит координаты (например, в помещении), но взамен будет меньше "шума" из неверно сопоставленного местоположения, согласно вашему требованию.

  2. Используйте API "привязки к дорогам". Существует бесплатная версия, использующая открытые данные карт улиц, называемая Project OSRM (Open Source Routing Machine), которая обеспечивает бэкэнд при размещении (локально или в облаке) с использованием докера или создания исходного кода самостоятельно (подробности в ссылке).

    curl "http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true "

Этот запрос вернет местоположение, которое "привязано" к ближайшей дороге. Существуют различные варианты, такие как выделение приоритета для автомагистралей и т.д. Затем вы можете отбросить точки, которые не находятся на "пути", на котором ранее находился пользователь, так как быстрый переход к дороге в 4 км и последующий возврат маловероятны.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню