我正在尝试计算用户当前的行驶速度,但是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)
}
}
答案 0 :(得分:0)
@Anand,CLLocationManager 可以通过以下两种方式之一获得速度:
测量两个纬度/经度/纬度三元组之间的距离并除以某种时间参考
使用 GPS 芯片上的原生多普勒速度测量。为特定 GPS 芯片看到的所有卫星计算多普勒速度。也许苹果公布了 iPhone 内置 GPS 芯片的名称和型号,我不知道。
我不知道 CLLocationManager 使用了哪种技术。
我认为您必须以几种速度和三个方向(正北、正东以及与正北和正东成 45 度角)来测试您的系统。
如果所有测量结果都显示相同的软糖系数 1.45,那么您可能很适合:
let speedInKmph = location.speed * 3.6 * (1/1.45)
如果您的测量值彼此不匹配,则需要进行更多研究。如果我弄明白了,我会把它贴在这里。链接的 youtube 可能是个好主意。