当设备缓慢移动或静止不动时,GPS会发生波动

时间:2018-01-10 10:07:49

标签: java android gps accelerometer

我遇到GPS fluctuation.

的问题

我正在计算distance upon the location change callback,所以当设备处于空闲状态时,由于这种波动问题,距离会增加。

我一直在使用 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);
}

2 个答案:

答案 0 :(得分:2)

GPS的定位精度不高于4或5米。也就是说,每次计算位置时,它都可以在半径范围内,且不小于约4米。有时候,计算出的位置将向前移动米,有时向左,向后等等。

如果您希望不考虑这些小变化,那么必须是您的代码才能区分用户是否真的感动了。

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

答案 1 :(得分:1)

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

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

也许更高级的方法可能更好用于计算LocationLocationResult.getLocations()的加权移动平均值。您可以按LocationgetAccuracy()对每个connectionNameList mqhost1(1414), mqhost2(1414) 进行加权。