当设备缓慢移动或静止时 GPS 会波动

GPS is fluctuating when the device moves slowly or stands still

我在使用 GPS.

提供的数据时遇到问题

我正在计算 distance upon the location change callback,所以当设备空闲时,由于 GPS 波动,距离会增加。

我一直在使用 FusedLocationProviderClient 获取位置更新。

 fusedLocationClient.requestLocationUpdates(locationRequest,
                   locationCallback, Looper.myLooper()); 




fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
            mLocationCallback = new LocationCallback() {
                @Override
                public void onLocationResult(LocationResult locationResult) {
                    super.onLocationResult(locationResult);
                    onNewLocation(locationResult.getLastLocation());
                }
            };


 private void createLocationRequest() {
    locationRequest = new LocationRequest();
    locationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
    locationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}

GPS定位精度不超过四五米。也就是说,每次计算位置时,它的半径都不会小于 4 米。有时计算出的位置会向前移动几米,有时向左、向后等移动。

如果您不想考虑这些微小的变化,则必须是您的代码来区分用户是否真的移动了。

这听起来很难,是的,但这是应用程序或 GPS 设备计算接近正确距离的优点。

Lluis Felisart 是正确的。回调中报告的位置存在看似随机的波动。

您可以尝试的一件简单的事情是,在您的 LocationCallback 中检查 LocationResult.getLocations(),其中最后两个元素将是您收到的最近两个 Location。对于这两个 Location,将它们的 getAccuracy() 值的总和乘以一些软糖因子 K 与这两个 Location 之间的距离进行比较。如果生成的精度小于位置之间的距离,则忽略位置更新。这绝对不是完美的,但会过滤掉一些噪音。

也许更高级、效果更好的方法是在 LocationResult.getLocations() 中计算 Locations 的加权移动平均值。您可以根据 getAccuracy() 值对每个 Location 进行加权。