首页 > 解决方案 > 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 文档说该属性中的值表示相对于地理北极的航向。但它没有按预期工作。

标签: iosswiftunity3dlocationcompass

解决方案


我了解您无法从应用程序运行到下一次运行获得相同/相似的真/磁航向 - 可重复性差。

作为第一步,检查内置指南针应用程序是否提供与您的应用程序相同的结果。如果两个结果一致,那就是您的硬件性能。你能做的几乎没有。

我用两部不同的 iPhone 测试了我的应用程序。即使我经常将两部手机放在同一个方向,两者都会产生不小的差异 - 10-20 度。通过与真正的(SUNTO 的)指南针进行比较,我意识到由于某种原因,一部手机的性能(实际价值和可重复性)较差。我想手动校准 iphone 的指南针,但 iOS 没有提供这样的 UI/API - 只有 ios 确定何时校准。

真正的航向只是通过向磁航向添加偏移量来给出,其偏移量由位置决定。因此,如果磁航向的可重复性很差,那么真航向也是如此。


推荐阅读