【问题标题】:How to implement an odometer on an iPhone如何在 iPhone 上实现里程表
【发布时间】:2010-09-15 18:50:35
【问题描述】:

我正在为 iPhone 开发一个相当简单的旅行应用程序,以便在跑步、骑自行车等时使用。

我想要实现的功能之一是里程表。

我通过 didUpdateToLocation 定期获取位置。

我尝试测量 newLocation 和 oldLocation 之间的距离并累积结果,但这不是很准确。累计值一般远大于实际行驶距离。

我可以使用什么算法来提高这个计算的准确性?

【问题讨论】:

  • 你找到答案了吗?
  • 我认为使用低通滤波器的想法是合理的,但我还没有机会尝试。

标签: iphone gps core-location


【解决方案1】:

听起来较差的 GPS 信号正在将您设备的(报告的)位置移动到各处,您的应用将其解释为用户不断改变方向。也许它将从一个位置到下一个位置的运动分离为其 x 和 y 分量,并通过某种低通滤波器运行它们会有所帮助。这应该可以最大限度地减少“不良”更新的影响,这些更新会导致您的位置完全脱离实际路径。

【讨论】:

    【解决方案2】:

    我正在尝试解决这个问题,并认为可以使用 CLLocationManager distanceFilter 属性来做一些事情。该属性允许您将didUpdateToLocation 委托调用限制为与先前更新至少有最小距离的更新。例如,对于里程表问题,假设您静止不动,但 gps 不规律地报告您周围 1m 的位置。如果您将distanceFilter 设置为 2,则这些更新都不会被注册为移动。

    诀窍是找到一个有效的 distanceFilter 值,我相信这在某种程度上与 GPS 的 horizontalAccuracy (我认为这是错误更新的原因)和你的速度有关正在旅行。 horizontalAccuracy 应该适合户外活动,但假设是这些小错误累积并导致里程表读数不正确。

    如果每次调用 didUpdateLocation 都会引入少量错误(例如,每次读数最多 10 厘米),那么如果每米调用 @987654329,慢速活动(例如步行)将非常不准确,这是有道理的@。每次更新最多有 (10cm/1m=) 10% 的错误。如果这是在以 100km/h 行驶的汽车中完成的,并且 distanceFilter 设置为 10m(这是一个安全设置,因为以 100km/h 行驶的汽车将非常接近超过 10m 的直线行驶),那么同样10cm 的误差每次更新最多只有 (10cm/10m=) 1% 的误差。它可能比这更复杂,但我试图说明速度起着重要作用。

    我认为解决方案是为distanceFilter 选择一个值,以最大限度地减少错误更新,但最重要的是考虑用户的速度(例如前面示例中的汽车)。有人想找出一个算法或公式吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 2011-03-23
      • 1970-01-01
      相关资源
      最近更新 更多