编写GPS日志应用程序~
我发现LocationManager报告的Locations上的getSpeed()方法返回的值非常不可靠。我正在使用LocationManager.GPS_PROVIDER,过滤通过onLocationChanged提供的位置以获得最佳精度。即使在个位数精度级别,返回的速度通常也高得离谱。当手机处于静止状态时,我们谈论的速度高达200MP/h(是的,我知道它是以米/秒为单位)。
我在两个不同型号的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;
}
}发布于 2012-07-27 19:23:35
我已经在GPS硬件上工作了7年多了。准确的读数也不是100%准确的。制造商声明准确度以及用于测量它的系统。其中包括CEP、RMS、2DRMS和R95。有关更多信息,请阅读本文:http://en.wikipedia.org/wiki/Circular_error_probable
准确率数字不包括异常值。例如,如果规定精度为5米,则在良好信号条件下获取的读数的最大误差为5米,95%的时间。关于剩下的5%的读数或在坏信号条件下取得的读数,什么都不能说。针对这些异常值的保护是一种特殊的调料,它使一个好的基于位置的应用程序脱颖而出。
您可以执行的一些操作包括:
发布于 2012-07-27 18:27:42
全球定位系统设备是基于自上次测量以来接收器移动了多远的位置速度计。它的速度计算不会受到与车辆速度计相同的误差来源(车轮尺寸、变速器/传动比)的影响。相反,GPS的定位精度,因此其计算速度的准确性,取决于当时的卫星信号质量。当位置误差与位置变化的比率较低时,速度计算在较高的速度下将更加准确。
来自维基百科。
也许你应该在你有良好信号强度的地方尝试一下。
发布于 2012-07-27 18:38:13
我也遇到了同样的问题。我认为GPS信号取决于位置,一些位置可能会给出准确的位置输出,否则就会产生“不太可靠”的结果。在我的例子中,我的位置离我的实际位置大约200米远。你呢?
补充一句,GPS_PROVIDER在我所在的区域不起作用。NETWORK_PROVIDER是这样做的,并且是它给出了200米以外的结果。
https://stackoverflow.com/questions/11685842
复制相似问题