Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android上跑步时如何计算距离?_Android_Gps_Accelerometer - Fatal编程技术网

在Android上跑步时如何计算距离?

在Android上跑步时如何计算距离?,android,gps,accelerometer,Android,Gps,Accelerometer,我知道有三种方法 基于GPS的:以较小的时间间隔(5-10秒)累计短距离行驶(使用Location.distanceTo计算),但此方法容易出现GPS错误,且不适用于室内或短距离行驶区域(如小公园) 加速度的二次积分:我可以对加速度计数据进行二次积分来计算距离,但加速度计读数中的噪声可能会导致误差累积 步长计数:我可以通过测量加速计数据中的峰值或使用Google Fit API检测步长,然后将总步长乘以平均步长。但这里的问题是计算出平均步幅 我倾向于使用#3,因为它在室内工作,不太容易出错或电池

我知道有三种方法

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


    有人知道这些方法的任何组合可以获得最佳结果吗?或者其他完全不同但有效的方法?

    这是一种工程——没有简单的答案;) 你提到的所有这些方法都有其优缺点

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

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

  • 从GPS计算位置(从网络提供商或GPS提供商-最佳精度赢)
  • 开始使用基于加速度计的algorytm
  • 在以下情况下停止使用基于加速度计的algorytm:

    • GPS和加速计测量值非常不同
    • 基于加速度计的算法发现,计算出的四元数与磁强计所说的不同
    • 测量得到的速度或加速度大于给定值
  • 转到第1点

  • 希望能有所帮助

    我知道解决方案并不简单。什么是基于加速度计的算法?第三步速度的“给定值”是多少?