【问题标题】:Android - How can I calculate the cumulative distance with GPSAndroid - 如何使用 GPS 计算累积距离
【发布时间】:2015-12-04 00:54:45
【问题描述】:

如何使用 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;
}

我猜我需要考虑每个点的位置精度,然后再将其添加到累计总数中。有这个算法吗?

提前致谢!

【问题讨论】:

    标签: android gps location


    【解决方案1】:

    有几种方法可以做到这一点。一是放弃小动作。如果您获得位置更新并且移动的距离小于 R,请忽略它。随着 R 变大,您将完全消除噪音,但也可能消除小于 R 的实际移动。您可以通过反复试验找出一个足以解决您的问题的 R。

    另一种方法是执行卡尔曼滤波器之类的操作,它将您的位置视为概率函数。但这涉及到很多复杂的数学运算,并且与 drop 方法存在一些相同的问题。

    另一种方法是将数据与加速度计数据结合起来,以确定您是否真的开始移动。 Google 在其活动检测代码中执行此操作。这里的目标是通过查看加速度计尖峰来确定您何时开始和停止移动,如果之前没有尖峰,则忽略小运动(包括静止的大运动,因为这可能是匀速运动)。

    当然,没有什么能给你 100% 的准确率。但是你应该能够从这些技术中获得相当不错的结果。

    【讨论】:

    • 感谢您的回复!我刚刚有了这个想法,我猜它是基于你提到的第一种技术。但不确定它是否有明显的问题? public void onLocationChanged(Location newLocation) { if (lastLocation != null && lastLocation.distanceTo(newLocation) >= lastLocation.getAccuracy() + newLocation.getAccuracy()) { distanceTravelled = distanceTravelled + lastLocation.distanceTo(newLocation); Toast.makeText(this, distanceTravelled + "", Toast.LENGTH_SHORT).show(); } lastLocation = newLocation; }
    • 因此 getAccuracy 返回 68% 的置信半径 - 您在 getAccuracy 位置的米数中有 68%。所以三分之一的时候你会在外面。由于您要添加 2 个精度,因此您会更频繁地进入其中。虽然你会错过小动作 - android 设备上的精度可能低至 10m,所以如果将它加倍,你会错过 20m 半径内的任何移动(除非移动最终离开它)。
    猜你喜欢
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多