如何使用Android GPS计算累计行驶距离?
我正在使用Android位置服务收听位置更改事件,但只是找到距离从最后一点到新点的距离并将其添加到运行总计中,这告诉我当我文具时我已经走了一段距离。
public void onLocationChanged(Location newLocation) {
if (lastLocation != null)) {
distanceTravelled = distanceTravelled + lastLocation.distanceTo(newLocation);
Toast.makeText(this, distanceTravelled + "", Toast.LENGTH_SHORT).show();
}
lastLocation = newLocation;
}
我猜我需要在将每个点添加到累计总数之前考虑每个点的位置准确性。有算法吗?
提前致谢!
答案 0 :(得分:1)
有几种方法可以做到这一点。一个是放弃小动作。如果您获得位置更新并且移动的距离小于R,请忽略它。随着R变大,你将完全消除噪音,但也可以消除小于R的实际移动。根据反复试验,你可以找出一个足以解决问题的R。
另一种方法是做卡尔曼滤波器,它将你的位置视为概率函数。但这会导致很多复杂的数学运算,并且与drop方法有一些相同的问题。
另一种方法是将数据与加速度计数据结合起来,以确定您是否真正开始移动。 Google在其活动检测代码中执行此操作。这里的目标是通过观察加速度峰值来确定何时开始和停止移动,并且如果没有尖峰之前忽略小的移动(包括仍然可能以恒定速度运动的大运动)。
当然,没有什么能让你100%准确。但是你应该能够从这些技术中获得相当好的结果。