ios - CLLocation distanceFromLocation 返回错误答案,然后返回正确答案

标签 ios iphone swift cllocationmanager cllocation

我正在开发一个正在运行的应用程序,因此计算某人走过的总距离对我的项目很重要。在我的 didUpdateLocations 方法中,我将新位置附加到数组,然后计算两个最新值之间的距离。然而,第一个计算是一个大得离谱的数字。无论我使用何种精度设置,问题仍然存在。

部分代码:

var locationIndex = 0
    var distanceTraveled: CLLocationDistance = 0.0
    var allLocations = [CLLocation]()

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

        print(allLocations.count)

        if locations[0].horizontalAccuracy < 15 {

        self.allLocations.append(locations[0])

        if allLocations.count > 1 {

            var distanceIncrement = CLLocationDistance()

            distanceIncrement = allLocations[allLocations.endIndex - 2].distanceFromLocation(allLocations[allLocations.endIndex - 1])

            self.distanceTraveled += distanceIncrement
            print(distanceTraveled)

        }

        } else {

            print("Invalid")

        }

    }

当我打印 (distanceTraveled) 时,第一个值是,例如,模拟运行时的 34.5,这是荒谬的,因为这意味着运行者在大约 1.3 秒内移动了 34.5 米(更新之间的时间) .然后,在第一次打印后,数字以合理的数量增加,例如:34.5、39.8、43.3 等……有时第一次打印的数字甚至可以在 500s 左右,这显然是不正确的。这是模拟器的问题还是我的实现?我该怎么做才能解决这个问题?

最佳答案

根据我的经验,您从位置管理器获得的第一个值是不好的。第一个位置读数通常是 GPS 上次“点亮”时的缓存读数。您可以通过检查位置上的时间戳来检测和拒绝过时的读数。如果超过一秒,则丢弃它。

接下来,您获得的前几个位置读数通常非常不准确。您想要检查水平精度读数,它实际上是一个“半径”值(以米为单位),它指定了该位置可能位于的圆的半径。值越小越好。

您应该检查水平精度读数并丢弃精度低于您选择的某个阈值的读数。我建议20米左右。根据条件,您可能无法获得比这更准确的任何读数。

模拟器对于测试这些东西几乎毫无值(value)。您需要创建一个测试应用程序来记录您获得的读数,然后带着它出去走走(和/或作为乘客乘坐汽车/公共(public)汽车)并进行测试。您甚至可以在拥有手机和 Mac 的情况下找人开车带您四处转转,​​并在系留状态下从 Xcode 运行应用程序。 (当我第一次弄清楚位置管理器的微妙之处时,我就这样做了。)

关于ios - CLLocation distanceFromLocation 返回错误答案,然后返回正确答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36802863/

相关文章:

ios - uiviewcontroller alloc 在访问时更改 setter/getter 值?

ios - 自动布局高度等于 MAX(多个 View 高度)

ios - 无法将 Facebook 和 Twitter 添加到 UIActivityViewController

ios - 查找iPhone中后台运行的应用程序

iphone - Youtube 嵌入 html for uiwebview 不工作(在 iOS 4.2 iPhone 3G 上)

iphone - 如何在 _NSLockError() 上设置断点

ios - 如何在执行其他事件时忽略该事件?

swift - 是否可以在创建新用户之前访问 Firebase 数据? ( swift )

php - 如何从 iPhone 应用程序获取 html 文件的内容(JSON 对象)?

ios - 具有多个参数的动画 View