首页 > 解决方案 > 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)
    }
}

标签: iosswiftcllocationmanager

解决方案


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

  1. 测量两个 lat/long/alt 三元组之间的距离并除以某种时间参考

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

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

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

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

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

如果您的测量结果彼此不匹配,则需要进行更多研究。如果我弄清楚了,我会在这里发布。链接的 youtube 可能是个好主意。


推荐阅读