ios - IOS trueHeading打开时值不同
问题描述
我使用 GPS 跟踪和 Unity3D 指南针创建了一个 AR 应用程序。
例如,当我打开应用程序时,trueHeading 是 260,当我关闭它并以不同的方向再次打开时,将设备转到以前的状态,trueHeading 是 210。
我用swift尝试IOS原生应用程序,但出现同样的问题。
这是我的 Swift 代码
import UIKit
import CoreLocation
class ViewController: UIViewController ,CLLocationManagerDelegate {
var lm:CLLocationManager!
override func viewDidLoad() {
super.viewDidLoad()
lm = CLLocationManager()
lm.delegate = self
lm.startUpdatingHeading()
Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(printHeading), userInfo: nil, repeats: true)
}
@objc func printHeading() {
print(self.lm.heading?.trueHeading)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
同样的问题发生在magneticHeading
.
IOS 文档说该属性中的值表示相对于地理北极的航向。但它没有按预期工作。
解决方案
我了解您无法从应用程序运行到下一次运行获得相同/相似的真/磁航向 - 可重复性差。
作为第一步,检查内置指南针应用程序是否提供与您的应用程序相同的结果。如果两个结果一致,那就是您的硬件性能。你能做的几乎没有。
我用两部不同的 iPhone 测试了我的应用程序。即使我经常将两部手机放在同一个方向,两者都会产生不小的差异 - 10-20 度。通过与真正的(SUNTO 的)指南针进行比较,我意识到由于某种原因,一部手机的性能(实际价值和可重复性)较差。我想手动校准 iphone 的指南针,但 iOS 没有提供这样的 UI/API - 只有 ios 确定何时校准。
真正的航向只是通过向磁航向添加偏移量来给出,其偏移量由位置决定。因此,如果磁航向的可重复性很差,那么真航向也是如此。
推荐阅读
- python - 为什么 (lambda x: x * 99 + x)(1 ** 5 * 5) 等于 500
- terminal - 在终端中输入 pwd --held 后无法显示信息
- reactjs - 使用 Material-UI 数据网格的无效挂钩调用
- java - Java 记录和字段注释
- python - 递归方程不收敛
- laravel - Laravel 是什么意思“未定义的数组密钥 client_secret”
- configuration - Quarkus 反应式数据源 SSL 握手错误
- javascript - 如何将输入框的 id 传递给按钮 id 值
- list - 长度为 N 的 Prolog 二进制数
- arrays - 如何获得数组的排序排列?