写一个GPS测井应用~
我发现由报告的getSpeed()
方法返回的值非常不可靠。我正在使用,过滤通过提供的位置以获得最佳准确性。即使在个位数的精度水平下,返回的速度通常也高得离谱。当手机静止时,我们正在谈论高达 200 英里/小时(是的,我知道它以米/秒为单位)。Locations
LocationManager
LocationManager.GPS_PROVIDER
onLocationChanged
我正在两个不同型号的 Android 手机上测试相同的代码库,运行两个不同的操作系统版本,并看到相同的问题,所以我认为这是一个代码问题。
我错过了什么?我试过在一段时间内平均位置,但无济于事。我是否必须根据行驶距离/时间计算出自己的速度值?这将令人失望。
正如您将看到的,我没有做任何特别的事情 - 稍微过滤以提高准确性,即使在这之后,即使位置的准确性很好AverageSpeed
,_bestLocation.getSpeed()
也经常不可行地高。
public void onLocationChanged(Location location) {
if (location.getAccuracy() < 25f) {
_recentLocations.add(location);
if (_bestLocation == null || location.getAccuracy() <= _bestLocation.getAccuracy())
_bestLocation = location;
}
if ((_bestLocation != null && _bestLocation.getAccuracy() < 10f && _recentLocations.size() >= 10)
|| _recentLocations.size() >= 25)
{
int Count = 0;
float TotalSpeed = 0f;
float AverageSpeed = 0f;
for (int i = 0; i<_recentLocations.size(); i++) {
if (_recentLocations.get(i).hasSpeed()) {
Count++;
TotalSpeed += _recentLocations.get(i).getSpeed();
}
}
if (Count > 0)
AverageSpeed = TotalSpeed / Count;
}
}