Я играю с 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 Паскалей.Есть идеи?