检查设备是否真的在移动

时间:2014-01-22 14:41:53

标签: android performance gps location distance

我正在开发一个我需要获得汽车速度的应用程序。为了获得速度,我知道我可以使用类似double speed = locationB.getSpeed();`但是当我测试时,当我刚坐在我的笔记本电脑后面时,速度在0.0到40 km / h之间变化一动不动。在汽车中,速度实际上接近汽车速度,所以这应该不是问题。

检查设备是否真正移动的最佳方法是什么?我已经尝试了locationAlocationB之间的距离,并将其用于获取2个位置所需的时间,以获得速度。

double distance = locationA.distanceTo(locationB);
double speed = (distance / time) * 3600 / 1000;

然而,这似乎根本不稳定,例如getSpeed()方法。

有没有办法只在设备移动时显示速度?它会可靠吗?

感谢任何帮助,

感谢。

2 个答案:

答案 0 :(得分:2)

检查Location的水平准确度属性 如果它低于30米,您可以忽略该位置。

如果你坐在你的笔记本电脑上并获得速度= 40km / h(我从未在好的GPS设备中看到过),那么看看它是什么。准确性是。 它可能超过30米。

在基于GPS的系统中,永远不要通过位置变化来计算速度, 只需使用location.getSpeed()。 原因是GPS芯片在内部通过物理多普勒效应计算速度,而不是通过位置变化。 虽然静止不动,或者速度非常低,但效果不佳,所以你必须滤除非常低的速度和不良的GPS信号。 (通过水平准确度估计)

答案 1 :(得分:0)

我认为您应该将A和B之间的距离限制为最小长度。小距离会给速度计算带来更多误差。

Boolean moving - false;
double distance = locationA.distanceTo(locationB);
double speed = (distance / time) * 3600 / 1000;
if (distance > SOME_THRESHOLD) {
   moving = true
}