android - FusedLocationProvider 有时会给出错误的位置

标签 android location android-fusedlocation fusedlocationproviderclient

我正在使用 FusedLocationProviderClient 在前台服务中获取位置更新。经过几天的测试和观察,我发现错误的位置与我的实际位置相距约 4 公里,类似于此 image ,但 LocationResult 的精度为 24 米。这怎么可能?

如果精度在 4 公里左右,则可以消除。此行为不会经常发生,但在 10 个设备中至少有 4 个发生一次。当我计算行进距离时,这就成了一个问题。

我可以看出它不是缓存位置,因为我以前每天都会关闭和打开定位服务。 (根据 docs ,关闭位置服务会清除缓存位置。)

知道为什么它给出了错误的位置以及如何消除它吗?还要在不关闭定位服务的情况下清除缓存位置?

最佳答案

FusedLocationProvider 可能会给出不正确的结果,例如当设备的 GPS 连接中断时(或者“ View ”中没有足够的卫星来提供准确的数据)。它将使用 wifi 路由器提供的最近的蜂窝塔/位置数据(谷歌自动跟踪此数据)在谷歌没有强大的位置映射存在的地方 - 这是城市中心以外的任何地方 - 给出错误的结果。

恕我直言,您有两个选择:

  1. 使用基于位置服务的非基于 googleplay 的解决方案 - 这有一个选项可以忽略非 gps 位置数据(wifi/蜂窝)。

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

    您甚至可以指定 number of satellites required for acceptable data这样您就可以获得真正准确的位置数据。当 gps 不接收坐标时(例如在室内),您将丢失信息,但作为交换,根据您的要求,来自错误映射位置的“噪音”会更少。

  2. 使用“捕捉道路”API。有一个使用开放街道 map 数据的免费版本,名为 Project OSRM(Open Source Routing Machine)在使用 docker 或自己构建源代码托管(本地或云端)时提供后端(链接中的详细信息)。

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

此请求将返回“捕捉”到最近道路的位置。有多种选择,例如优先考虑高速公路等。然后您可以丢弃不在用户之前所在的“路径”上的点,因为快速转移到 4 公里外的道路然后再回来是不可能的。

关于android - FusedLocationProvider 有时会给出错误的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55413441/

相关文章:

java - Android 上的 javax.xml.parsers 的 ParserConfigurationException

android - 位置更新在设备管理员/托管工作配置文件模式下不起作用

android - 无法在android studio中单击按钮查看当前坐标

android - 在FusedApi中有问题

Android随机数和edittext

android - 以编程方式打开未知来源设置

android - 导航组件 : Toolbar issue in conditional navigation

java - 地理位置检索背后的概念

使用 FusedLocationProviderApi 进行 Android 定位

java - 如何使用 FusedLocationProviderClient 在 GoogleMap 中获取当前位置