如何在iPhone上实现里程表

时间:2010-09-15 18:50:36

标签: iphone gps core-location

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

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

我通过didUpdateToLocation定期获取该位置。

我已经尝试过测量newLocation和oldLocation之间的距离并累积结果,但这不是很准确。累积值通常远大于实际行进距离。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我正试图弄明白这一点,并认为可以使用CLLocationManager distanceFilter属性完成某些操作。该属性允许您将didUpdateToLocation委托调用限制为与上一次更新至少保持最小距离的更新。例如,在里程表问题上,假设你站着不动,但是gps不稳定地报告你身边1米的位置。如果将distanceFilter设置为2,则这些更新都不会被注册为移动。

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

如果每次拨打didUpdateLocation都会引入少量错误(例如,每次阅读最多10厘米),那么如果每个电表都拨打电话,那么行走等慢速活动就会非常不准确didUpdateToLocation。这将达到(10cm / 1m =)每次更新错误的10%。如果这是在一辆以100公里/小时的速度行驶并且distanceFilter被设定为10米的车辆(这是一个安全的设置,因为以100公里/小时的速度行驶的车将非常接近直线超过10米),那么相同的10cm误差每次更新最多只有(10cm / 10m =)1%误差。它可能比这更复杂,但我试图说明速度起作用。

我认为解决方案是为distanceFilter选择一个最小化错误更新的值,但最重要的是考虑用户的速度(例如上一个例子中的汽车)。有人想找出算法或公式吗?