FusedLocationProvider 有时会给出错误的位置
FusedLocationProvider gives wrong location sometimes
我正在使用 FusedLocationProviderClient
在前台服务中获取位置更新。经过几天的测试和观察,我发现错误的位置与我的实际位置相距约 4 公里,类似于此,但 LocationResult
的精度为 24 米。这怎么可能?
如果精度在4公里左右就可以剔除。此行为不会经常发生,但在 10 个设备中至少有 4 个发生一次。当我计算行进的距离时,它成为一个问题。
我可以看出它不是缓存位置,因为我以前每天都会关闭和打开定位服务。 (根据 docs,关闭定位服务会清除缓存位置。)
知道为什么它给出错误的位置以及如何消除它吗?还要在不关闭定位服务的情况下清除缓存位置?
FusedLocationProvider 可能会给出不正确的结果,例如当设备的 gps 连接中断时(或者 "view" 中的卫星数量不足以提供准确的数据)。它将使用 wifi 路由器提供的最近小区 tower/location 数据(google 自动跟踪此数据)在 google 没有强大位置映射存在的地方给出错误的结果 - 这位于城市中心以外的任何地方。
恕我直言,您有两个选择:
使用基于位置服务的非 google 播放解决方案 - 这有一个选项可以忽略非 gps 位置数据 (wifi/cellular)。
LocationManager locationManager = (LocationManager)
getApplicationContext().getSystemService(LOCATION_SERVICE);
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_Provider);
您甚至可以指定 number of satellites required for acceptable data 以便获得真正准确的位置数据。当 gps 不接收坐标时(例如在室内),您将丢失信息,但作为交换,根据您的要求,来自错误映射位置的信息会更少 "noise"。
使用一个"snap to roads"API。有一个使用名为 Project OSRM(Open Source Routing Machine) 的开放街道地图数据的免费版本,它在使用 docker 或您自己构建源代码(详情见 link)托管(本地或云端)时提供后端。
curl "http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true
"
此请求将 return 一个位置 "snapped" 到最近的道路。有多种选择,例如优先考虑高速公路等。然后您可以丢弃不在用户之前所在的 "path" 上的点,因为快速转移到 4 公里外的道路然后再回来是不可能的.
我正在使用 FusedLocationProviderClient
在前台服务中获取位置更新。经过几天的测试和观察,我发现错误的位置与我的实际位置相距约 4 公里,类似于此LocationResult
的精度为 24 米。这怎么可能?
如果精度在4公里左右就可以剔除。此行为不会经常发生,但在 10 个设备中至少有 4 个发生一次。当我计算行进的距离时,它成为一个问题。
我可以看出它不是缓存位置,因为我以前每天都会关闭和打开定位服务。 (根据 docs,关闭定位服务会清除缓存位置。)
知道为什么它给出错误的位置以及如何消除它吗?还要在不关闭定位服务的情况下清除缓存位置?
FusedLocationProvider 可能会给出不正确的结果,例如当设备的 gps 连接中断时(或者 "view" 中的卫星数量不足以提供准确的数据)。它将使用 wifi 路由器提供的最近小区 tower/location 数据(google 自动跟踪此数据)在 google 没有强大位置映射存在的地方给出错误的结果 - 这位于城市中心以外的任何地方。
恕我直言,您有两个选择:
使用基于位置服务的非 google 播放解决方案 - 这有一个选项可以忽略非 gps 位置数据 (wifi/cellular)。
LocationManager locationManager = (LocationManager) getApplicationContext().getSystemService(LOCATION_SERVICE); Location location = locationManager.getLastKnownLocation(LocationManager.GPS_Provider);
您甚至可以指定 number of satellites required for acceptable data 以便获得真正准确的位置数据。当 gps 不接收坐标时(例如在室内),您将丢失信息,但作为交换,根据您的要求,来自错误映射位置的信息会更少 "noise"。
使用一个"snap to roads"API。有一个使用名为 Project OSRM(Open Source Routing Machine) 的开放街道地图数据的免费版本,它在使用 docker 或您自己构建源代码(详情见 link)托管(本地或云端)时提供后端。
curl "http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true
"
此请求将 return 一个位置 "snapped" 到最近的道路。有多种选择,例如优先考虑高速公路等。然后您可以丢弃不在用户之前所在的 "path" 上的点,因为快速转移到 4 公里外的道路然后再回来是不可能的.