ios - 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)
}
}
解决方案
@Anand,CLLocationManager 可以通过以下两种方式之一获得速度:
测量两个 lat/long/alt 三元组之间的距离并除以某种时间参考
使用 GPS 芯片上的本机多普勒速度测量。为特定 GPS 芯片看到的所有卫星计算多普勒速度。也许苹果公司会公布 iPhone 内部 GPS 芯片的名称和型号,我不知道。
我不知道 CLLocationManager 使用了哪种技术。
我认为您必须以几种速度和三个方向(正北、正东以及与正北和正东 45 度角)测试您的系统。
如果所有测量结果都显示相同的 1.45 软糖因子,那么您可能很适合:
let speedInKmph = location.speed * 3.6 * (1/1.45)
如果您的测量结果彼此不匹配,则需要进行更多研究。如果我弄清楚了,我会在这里发布。链接的 youtube 可能是个好主意。
推荐阅读
- c - 如何使客户端服务器套接字程序异步?
- c++ - 无法使用 mysql_real_connect() 连接到 mysql 服务器
- jenkins - 如何从同一个 Jenkins 构建管道打包多个 MSI
- c++ - C++ CppUnitTestFramework 构建后运行测试
- apache-kafka - Kafka Connect - 如何使用转换自定义 json
- javascript - 如何在类似于 pandas style.bar 的 DataTable 中放置百分比条
- c# - 如何填充 Web 表单以导入数据
- ios - 如何让背景图像无限循环
- aurelia - Aurelia 非 html-only 自定义元素 notrendering
- winforms - 如何将我的表单应用程序发布到 Internet?