2009-02-24 115 views
6

我正在尝试将GPS功能添加到我的iPhone应用程序。这是一个锻炼应用程序,将在步行或跑步时使用。所以我想要使用GPS来显示人员以英里/小时的速度行驶的速度。iPhone CoreLocation:如何获得最准确的速度

我该如何配置CLLocationManager才能获得最佳结果?我应该如何设置所需的精度和距离滤波器?

我已经试过:

distanceFilter = 10和desiredAccuracy = kCLLocationAccuracyNearestTenMeters

和阅读

CLLocation.speed财产

测试,同时在我的车带动周边精度似乎不错与汽车车速表相比,尽管需要一段时间才能更新。我意识到,更新延迟很可能是查询GPS位置所需的时间,但我不确定是否更改上述两个参数会给出更好的结果。

我应该使用kCLLocationAccuracyBest和distanceFilter的其他值吗?

我很想听听其他人使用CoreLocation来获得速度。你在做什么来获得更准确的结果?

回答

3

声明:我只玩过CoreLocation,我没有非常仔细地测试过这个准确性。

我希望您能通过使用distanceFilter和desiredAccuracy的默认值来获得最准确的结果。不太频繁的更新只会减少数据的使用。

您可能遇到的一个问题是定位失败一段时间后又回来了。天真的,连接点的方法来计算出行驶距离往往会低估跑步者的实际速度。而不是使用CLLocation.speed,你可能会得到更好的结果,计算速度的基础上,一些启发式近似于跑步者实际遵循的线。

5

为了获得最佳效果,您应该使用kCLLocationAccuracyBest。你放入距离过滤器的内容取决于你愿意放置哪些故障。基本上,你将不得不根据准确性和可用性做出决定。也就是说,在最准确的答案不可用的期间,你会显示什么?

一种方法是让手机提供准确度较低的答案,并利用上次发现的最佳准确度信息的情况进行投影,看看您是否有意义。

也就是说,假设我正以6英里/小时的速度向北方慢跑。你沿着A点,B点,C点绘制我......然后你得到一个低精确度的答案(也许是kCLLocationAccuracyNearest100Meters。)看看它说我的位置,并找出“我能得到那个如果我继续沿着我现在的路线继续前进,对C点进行适当的调整,对可能的速度变化做出合理的调整?“如果是这样,那么这个新点就在可能范围之内。 (如果没有,然后抛出。)然后从C点以我最后已知的速度进行投射,然后找出你认为我可能在哪里,弹道式地。保存为弹道点D。

当然,你正在使用加速度计来获得某种惯性感,我去了哪个方向,对吧?所以,你无法知道方向(你不知道手机指向什么方向),但你可以在远处做出合理的刺。

使用所有这些信息,绘制你认为我可能是最有可能的位置。

注意:测试时,不要只在良好的小区覆盖区域驾驶。了解您的应用如何在山上执行,远离手机。很多人喜欢骑自行车&慢跑这些地方!