Почему мое базовое приложение «барометр / повышение» заявляет о значении, отличном от фактического фактического превышения? - PullRequest
0 голосов
/ 11 июня 2019

Я играю с iOS-разработкой и использую API-интерфейс CMAltimeter на iOS и замечаю некоторые странные несоответствия между моим очень простым приложением и высотным приложением, которое я нашел в магазине приложений: https://apps.apple.com/us/app/my-altitude/id465262694

Мое приложение вычисляет гипсометрическую высоту с помощью следующего кода:

import UIKit
import CoreMotion

class FirstViewController: UIViewController {

    let altimeter: CMAltimeter = CMAltimeter()

    @IBOutlet weak var altitudeStatus: UILabel!
    @IBOutlet weak var pressureStatus: UILabel!
    @IBOutlet weak var elevationStatus: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        if CMAltimeter.isRelativeAltitudeAvailable() {
            self.altimeter.startRelativeAltitudeUpdates(to: OperationQueue.main) { (data, error) in
                if let err = error {
                    print(err)
                    return
                }
                if let altitudeData = data {
                    self.altitudeStatus.text = "Relative altitude: " + altitudeData.relativeAltitude.stringValue
                    self.pressureStatus.text = "Pressure: " + altitudeData.pressure.stringValue
                    self.elevationStatus.text = "Elevation: " +
                        String(format:"%f", self.getHypsometricAltitude(kiloPascals: altitudeData.pressure.doubleValue)) + "m"
                }
            }
        }
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        altimeter.stopRelativeAltitudeUpdates()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func getHypsometricAltitude(kiloPascals: Double, celsiusTemp: Double = 15.00) -> Double {
        let p = 101325 / (kiloPascals * 1000)
        let pExponent = 1 / 5.25579
        let pPower = pow(p, pExponent)
        let minusOne = pPower - 1
        let kelvin = celsiusTemp + 273.15
        let multipliedByKelvin = minusOne * kelvin
        let altitude = multipliedByKelvin / 0.0065

        return altitude

    }
}

Логика функции getHypsometricAltitude получена из https://keisan.casio.com/exec/system/1224585971, и значения совпадают с формой при подключении кте же значения, полученные из API альтиметра iOS.

Вышеупомянутое приложение «Моя высота» имеет настройку, позволяющую переключаться между использованием барометрического датчика и нет, и при его использовании я заметил, что сообщенные паскали соответствуют моему приложению и моему сценариюв итоге при использовании барометрического датчика он увеличивается примерно на 1000 Паскалей.Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...