【问题标题】:CLLocationManager - returns wrong speedCLLocationManager - 返回错误的速度
【发布时间】:2018-12-05 21:30:13
【问题描述】:

我正在尝试计算用户当前的驾驶速度,但是 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)
    }
}

【问题讨论】:

标签: ios swift cllocationmanager


【解决方案1】:

@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 可能是个好主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多