IOS trueHeading在打开时的值不同

时间:2018-09-02 21:55:30

标签: ios swift unity3d location compass

我使用GPS跟踪和指南针以及Unity3D创建了一个AR应用。

例如,当我打开应用程序时,trueHeading为260,当我关闭它并以不同方向再次打开时,将设备转到以前的状态,则trueHeading为210。

我尝试快速运行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 documentation说,此属性中的值表示相对于地理北极的标题。但这不能按预期工作。

1 个答案:

答案 0 :(得分:0)

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

第一步,请检查内置指南针应用程序是否给出与您的应用程序相同的结果。如果两个结果都相同,那就是您的硬件性能。您几乎无能为力。

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

仅通过向磁航向添加偏移量即可得出真实航向,磁航向的偏移量由位置决定。因此,如果磁航向的可重复性很差,那么真实航向也会如此。