首页 > 解决方案 > 航行时使用 kCLLocationBestForNavigation 最小化速度变化

问题描述

我正在开发一个 GPS Apple Watch 应用程序,以便在航行时使用,这需要高精度的起跑线场景。我怀疑额外的陀螺仪/加速度计输入实际上是在伤害,而不是帮助 GPS 准确性。例如,CLLocation.speed与其他工具相比,可变性似乎非常高。(即 4.4 节、2.2 节、6.8 节、4.6 节……,当其他航海 GPS 仪器读数为 4.5 ,4.3 ,4.6 ,4.5,……)

我知道将 iPhone 放在附近会使手表将 GPS 处理任务转移到 iPhone 上。这肯定有助于准确性,但似乎无助于可变性。当我在水上进行测试(步行或骑自行车)时,变异性远低于航行。我在 iPhone 应用程序和手表(附近有 iPhone)上运行我的代码得到了类似的结果。

    func startReceivingLocationChanges(locationManager: CLLocationManager) -> Bool {
        // Do not start services that aren't available.
        if !CLLocationManager.locationServicesEnabled() {
            // Location services is not available.
            return false
        }
        // Configure and start the service.
        locationManager.desiredAccuracy = kCLLocationBestForNavigation // kCLLocationBestForNavigation seems to have accuracy issues when sailing, try kCLLocationBest???
        locationManager.distanceFilter = kCLDistanceFilterNone  // In meters.
        locationManager.delegate = self
        locationManager.startUpdatingLocation()
        return true 
    }

我正在考虑尝试使用 kCLLocationAccuracyBest 关闭 Gyro/accel,希望这可能会有所帮助。我假设speed并且course是基于纬度/经度变化的简单计算,但也许不是?如果需要,我可以自己进行这些计算。也有兴趣可能使用一些第 3 方过滤代码来“平滑”曲线。好奇其他人尝试过什么。(我怀疑这也可能是游泳者的问题,和/或运动不是“平滑”或容易被过滤掉的山地自行车跟踪场景。)

标签: ioscore-locationapple-watch

解决方案


推荐阅读