Ни один из датчиков не является точным сам по себе, и существует слишком много факторов реального мира, чтобы сказать, какой из них может быть наиболее точным.
Тем не менее, я ввел средневзвешенное значение каждого датчика, взвешенное покак свежесть, так и заявленная точность:
- Отслеживание последнего исправления местоположения для каждого LocationProvider в отдельности.Я использую
Map
каждого LocationProvider
имени для соответствующего Location
объекта. - При каждом обновлении вычисляют новое средневзвешенное значение из набора самых последних исправлений:
- Выброситьлюбые исправления старше, чем некоторый возрастной порог (скажем, 20 минут)
- Рассчитайте вес оставшихся на основе обратного значения точности каждого исправления.
- Чтобы предотвратить разрывы, следует меньше амортизировать исправления местоположениячем некоторое меньшее пороговое значение (скажем, 10 минут) до нуля при первом пороговом значении.
- Суммируйте веса и вычисляйте процент каждого веса по отношению к общему.
- Суммируйте каждую широту какweight_percent * fix.getLatitude ().Повторите эти действия для долготы.
- Создайте новый
Location
объект с искусственным именем LocationProvider "medium" и вычисленным lat
/ lon
для использования в остальной части вашей программы.
Также см. Следующее: http://developer.android.com/guide/topics/location/obtaining-user-location.html#BestEstimate