我正在处理一个需要获得汽车速度的应用程序。为了达到速度,我知道我可以使用诸如 double speed =
locationb.getspeed()之类的东西;`但是,当我进行测试时,当我坐在笔记本电脑后面时,速度在0.0至40 km/h之间变化。在汽车中,速度实际上接近汽车速度,因此这不是问题。
检查设备是否真正移动的最佳方法是什么?我已经试图获得locationA
和locationB
之间的距离,并在获得两个位置的时间以获取速度。
double distance = locationA.distanceTo(locationB);
double speed = (distance / time) * 3600 / 1000;
但是,这似乎根本不稳定,例如getSpeed()
方法。
有没有办法仅在设备移动时显示速度?它会可靠吗?
任何帮助都将受到赞赏,
谢谢。
检查 Location
的horicontal精度属性。
如果不到30m,则可以忽略该位置。
如果您坐在笔记本电脑上并获得速度= 40 km/h(我从未在GPS设备中看到的),请看看HOR。精度是。它可能超过30m。
在基于GPS的系统中,切勿按时间变化计算速度,只需使用location.getSpeed()即可。原因是GPS芯片内部通过物理多普勒效应而不是通过位置变化来计算速度。静止不动,或者在非常低的速度下,这不能很好地工作,因此您必须过滤出非常低的速度和不良的GPS信号。(通过Horicontal精度估算)
我认为您应该将A和B之间的距离限制为最小长度。小距离将在您的速度计算中引入更多错误。
Boolean moving - false;
double distance = locationA.distanceTo(locationB);
double speed = (distance / time) * 3600 / 1000;
if (distance > SOME_THRESHOLD) {
moving = true
}