0

我为 iPhone 制作了步行/跑步时计算距离的应用程序。

我将我的应用程序与其他正在运行的应用程序进行了比较,没有人给出相同的距离。

耐克 GPS:2.1 公里
Runtastic:2.5 公里
我的应用程序:2.9 公里

这里计算距离的路由:

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation

 {
 float distInMeter = [newLocation distanceFromLocation:oldLocation]; // which returns in    meters
 }

我连接distInMeters到另一个变量。

为什么这些应用程序之间存在这样的差异?有没有其他方法可以更精确地计算距离?

谢谢你的帮助。

4

3 回答 3

1

这些应用程序长期以来一直在处理不准确的 GPS 数据,并创造了平滑位置随机跳跃的方法。您的实施没有考虑旧数据或虚假数据。

您可以尝试实现Ramer-Douglas-Peucker 算法这里是 Javascript算法)或阅读其中一些非常 复杂的论文,或者您可以丢弃旧的或非常不同的 GPS 读数并等待更准确的读数出现。

于 2013-08-11T14:24:22.420 回答
0

在计算距离之前,必须过滤 GP 位置。您不能简单地总结每个位置之间的所有距离。您的距离函数是正确的,但您的过滤不正确。只需可视化地图上的所有点(mkMapView),然后您就会看到在低速时 gps 会创建锯齿形随机误差线。从这个可视化中,您应该清楚地看到为什么您的距离要大得多。

于 2013-08-11T23:03:29.833 回答
0

由于位置管理器提供用户位置的方式,可能会发生这种差异。假设您正朝着某个方向行走,而 GPS 为您提供了一个完全偏离该方向的位置,但下一个位置又回到了正轨。如果您考虑到关闭的距离,那么您计算的距离比用户实际旅行的距离要长。所以你应该过滤掉那个。

如果 GPS 为您提供了另一个比应有的更远的位置,也会发生同样的情况。假设用户以 4 mph 的速度慢跑,那么用户不可能突然开始以 100 mph 的速度跑步,所以你也应该过滤掉那个。

基本上,您应该过滤掉那些不太可能发生的情况,这样您将获得更精确的距离。

于 2013-08-11T12:35:27.337 回答