FusedLocationProvider иногда дает неверное местоположение - PullRequest
1 голос
/ 29 марта 2019

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

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

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

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

1 Ответ

3 голосов
/ 29 марта 2019

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 км, а затем возвращаться снова маловероятно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...