如何在Android上运行时计算距离?

时间:2016-02-01 15:12:38

标签: android gps accelerometer

我知道它有三种方法

  1. 基于GPS:以较短的时间间隔(5-10秒)添加行进的短距离(使用Location.distanceTo计算),但此方法容易出现GPS错误,无法在室内或在短暂的跑步区(如小公园)
  2. 加速度的双重积分:我可以对加速度计数据进行双积分来计算距离,但加速度计读数中的噪声引起的误差可能会增加。
  3. 步数我可以通过测量加速度计数据中的峰值或使用Google Fit API检测步数,然后将总步数乘以平均步幅。但这里的问题是计算平均步幅。
  4. 我倾向于使用#3,因为它在室内工作,并且不容易出错或电池耗尽。但是我如何获得每一步的平均步幅长度,特别是当跑步者的步幅在短跑和慢跑时变化时。

    有谁知道这些方法的任何组合才能获得最佳效果?或任何其他完全不同但有效的方法?

1 个答案:

答案 0 :(得分:0)

它的工程设计 - 没有简单的答案;) 你提到的所有这些方法都有其优点和缺点。

GPS跟踪不会导致每次测量的错误 - 它很好但另一方面每个位置都会有明显的错误。更有甚者,您在建筑物等中使用应用程序时会遇到问题。 由于时间误差增大到大数,加速度的双重积分在小距离上工作得很好。创建以适当方式计算它的程序也很困难。有很多重要的问题,例如采样或旋转的时间和转换矩阵计算,这使得这些应用程序在android上非常有问题。

在我的应用程序中,我使用了以下algorytm:

  1. 从GPS计算位置(来自网络提供商或GPS提供商 - 获得最佳精确度)
  2. 开始使用基于加速度计的algorytm。
  3. 在以下情况下停止使用基于加速计的algorytm:

    • GPS和加速度计测量非常不同
    • 基于加速计的algorythm发现计算出的四元数与磁力计所说的不同。
    • 测量的速度或加速度大于给定值。
  4. 转到第1点
  5. 希望有所帮助