当设备缓慢移动或静止时 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()
中计算 Location
s 的加权移动平均值。您可以根据 getAccuracy()
值对每个 Location
进行加权。
我在使用 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()
中计算 Location
s 的加权移动平均值。您可以根据 getAccuracy()
值对每个 Location
进行加权。