CLLocationManager-返回错误的速度

时间:2018-06-27 05:29:21

标签: ios swift cllocationmanager

我正在尝试计算用户当前的行驶速度,但是cllocationmanager速度和实际行驶速度之间存在巨大差异。

当我以50公里/小时的速度行驶时,分区管理器显示〜72 /〜73公里/小时。下面是我正在使用的代码。

        locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
        locationManager.requestWhenInUseAuthorization()
        locationManager.allowsBackgroundLocationUpdates = true
        locationManager.pausesLocationUpdatesAutomatically = false
        locationManager.distanceFilter = 1.0
        locationManager.headingFilter = 0.1
        locationManager.startUpdatingLocation()

下面是位置管理器协议

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

    let speedInKmph = location.speed * 3.6
    if speedInKmph > 10 {
        MyRide.shared.speedInfo.append(SpeedInfo(speed: speedInKmph))
        self.view.showToast("\(speedInKmph)  **********", position: .bottom, popTime: 2.0, dismissOnTap: false)
    }
}

1 个答案:

答案 0 :(得分:0)

@Anand,CLLocationManager 可以通过以下两种方式之一获得速度:

  1. 测量两个纬度/经度/纬度三元组之间的距离并除以某种时间参考

  2. 使用 GPS 芯片上的原生多普勒速度测量。为特定 GPS 芯片看到的所有卫星计算多普勒速度。也许苹果公布了 iPhone 内置 GPS 芯片的名称和型号,我不知道。

我不知道 CLLocationManager 使用了哪种技术。

我认为您必须以几种速度和三个方向(正北、正东以及与正北和正东成 45 度角)来测试您的系统。

如果所有测量结果都显示相同的软糖系数 1.45,那么您可能很适合:

let speedInKmph = location.speed * 3.6 * (1/1.45)

如果您的测量值彼此不匹配,则需要进行更多研究。如果我弄明白了,我会把它贴在这里。链接的 youtube 可能是个好主意。