编写GPS日志应用程序~
我发现LocationManager
报告的Locations
上的getSpeed()
方法返回的值非常不可靠。我使用LocationManager.GPS_PROVIDER
,过滤通过onLocationChanged
提供的位置以获得最佳精度。即使在个位数的精度水平下,返回的速度通常也高得离谱。当手机静止时,我们的通话速度高达200英里/小时(是的,我知道它的记录单位是米/秒)。
我正在两款不同型号的安卓手机上测试相同的代码库,运行两个不同的操作系统版本,发现了相同的问题,所以我认为这是一个代码问题。
我错过了什么?我试过在一段时间内平均位置,但没有成功。我是否必须根据行驶距离/时间计算出自己的速度值?这将是令人失望的。
正如你所看到的,我没有做任何特别的事情——对准确性进行一点过滤,即使在这之后,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;
}
}
我在GPS硬件方面工作了7年多。准确度读数也不是100%准确。制造商说明了测量系统的准确性。CEP、RMS、2DRMS和R95是其中一些系统。阅读本文了解更多信息:http://en.wikipedia.org/wiki/Circular_error_probable
准确度数字不包括异常值。例如,如果规定的精度为5米,那么在良好的信号条件下读取的读数将在95%的时间内具有5米的最大误差。关于剩余的5%读数或在坏信号重叠群中获得的读数,什么都不能说。针对这些异常值的保护是一种特殊的酱汁,它使一个好的基于位置的应用程序脱颖而出
你可以做的一些事情是:
- 过滤掉疯狂的高速。利用高度作为在飞机上的暗示
- 关联来自运动传感器的信息,查看它们是否符合GPS。运动传感器特征在稳定状态下会非常不同并且在运动中
- GSM/3G蜂窝的典型尺寸在城市中不到一公里在人口稀少的地区有5-10公里。如果车辆高速行驶了一段时间,蜂窝塔信息仍然是一样的,你知道有些地方出了问题
- GPS定位是不是一会儿读向北,一会儿读向南以高速行驶?如果是,则很可能是GPS错误
- 检查GPS计算中使用的卫星数量。12分是优秀的,9分是健康的,5分或更少是差的,4分是lat、lon+海拔的最低要求计算,3是lat,lon计算的最小值。任何小于3的读数都不是有效的读数。如果卫星数量多,你可以对数据的有效性更有信心
GPS设备是基于接收器距离的位置测速仪自上次测量以来已移动。它的速度计算不是受到与车辆速度表相同的误差源的影响(车轮尺寸、变速器/传动比)。相反,GPS的位置准确度,因此计算速度的准确度,是取决于当时的卫星信号质量。速度当相对于位置变化的位置误差较低。
来自维基百科。
也许你应该在信号强度好的地方试试这个。
我遇到了同样的问题。我认为GPS信号取决于位置,某些位置可能会给出准确的位置输出,否则结果"不那么可靠"。在我的情况下,我的位置距离我的实际位置大约200米。你呢?
需要补充的是,GPS_PROVIDER在我所在的地区不起作用。NETWORK_PROVIDER做到了,这就是200米外的结果。
似乎大多数人都认为来自GPS的速度信息是基于与时间差相关的位置比较。这种方法对于确定速度不是很好,并且在较低的行驶速度下更差。
GPS接收机可以根据卫星测量值的多普勒频移输出速度测量值。与基于位置/时间计算的速度测量相比,基于多普勒的速度测量的精度要好得多。
谷歌上的gps速度多普勒和你会发现很多阅读。
这里有一个链接:http://nujournal.net/HighAccuracySpeed.pdf
/城市Holmdahl