我遇到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);
}
答案 0 :(得分:2)
GPS的定位精度不高于4或5米。也就是说,每次计算位置时,它都可以在半径范围内,且不小于约4米。有时候,计算出的位置将向前移动米,有时向左,向后等等。
如果您希望不考虑这些小变化,那么必须是您的代码才能区分用户是否真的感动了。
这听起来很难,是的,但这是应用程序或GPS设备计算接近正确距离的优点。
答案 1 :(得分:1)
Lluis Felisart是对的。回调中报告的位置存在随机看似波动。
您可以尝试的一个简单事项是,在LocationCallback
支票LocationResult.getLocations()
中,最后两个元素将是您收到的最近两个Location
。对于这两个Location
,将它们的getAccuracy()
值的总和,以及某些软糖因子K
的总和与这两个Location
之间的距离进行比较。如果得到的精度小于位置之间的距离,则忽略位置更新。这绝对不是完美的,但会过滤掉一些噪音。
也许更高级的方法可能更好用于计算Location
中LocationResult.getLocations()
的加权移动平均值。您可以按Location
值getAccuracy()
对每个connectionNameList
mqhost1(1414), mqhost2(1414)
进行加权。