如何计算给定高度和压力的海平面压力

Joa*_*ker 5 java android wear-os

我正在写一个显示高度的表盘。高度是用 计算的SensorManager.getAltitude(seaLevelPressure, currentPresure)

但是为了初始化它,我需要海平面的压力。不幸的是没有SensorManager.getSeaLevelPressure(currentPressure,currentAltitude)

为此,我找到了以下公式(参见http://rechneronline.de/barometer/

private float calcSeaPressure(float pressure, int altitude) {
  float temperature = 9 + 273.15f;
  float tempGradient = 0.0065f;

  float v3 = temperature + tempGradient * altitude;
  float sealevelPressure = (float) (pressure / Math.pow((1 - tempGradient * altitude / v3), .03416f / tempGradient));
  sealevelPressure = (float) Math.round(sealevelPressure * 100) / 100;
  return sealevelPressure;
}
Run Code Online (Sandbox Code Playgroud)

但是这个算法和 SensorManager.getAltitude 中使用的算法似乎不太适合。如果我做:

public void setCurrentAltitude(int currentAltitude) {
  sealLevelPressure = calcSealevel(currentAltitude,currentPresure);
  altitude = SensorManager.getAltitude(seaLevelPressure, currentPresure)
}
Run Code Online (Sandbox Code Playgroud)

计算出的高度与给定的 currentAltitude 不同。对于小值 (<1000m),差异是可以接受的。但例如 4000m 的差异是 250m,这不再是可接受的。

现在我的问题是:如何计算海平面,以便 setCurrentAltitude() 不报告不同的值?

或者您是否知道可用于此目的的其他 Java 类?请记住,应该计算这些值!

谢谢

wes*_*ton 2

如果您从海拔高度进行校准(毕竟您有setCurrentAltitude方法),那么这就是技术:

public void setCalibrationAltitudeAndPressure(float calibrationAltitude, float currentPressure) {
   this.calibrationAltitude = calibrationAltitude;
   this.calibrationPressure = currentPressure;
}

public float getCurrentAltitude(float currentPressure) {
    float altitudeDifference =
            sensorManager.getAltitude(SensorManager.PRESSURE_STANDARD_ATMOSPHERE, currentPressure) -
            sensorManager.getAltitude(SensorManager.PRESSURE_STANDARD_ATMOSPHERE, calibrationPresure);
    return calibrationAltitude + altitudeDifference;
}
Run Code Online (Sandbox Code Playgroud)

现在您无需关心海平面压力。

校准

您需要校准高度,并且可以使用 GPS 来实现此目的。它的海拔高度不太可能那么准确(请参阅Android:如何获得准确的海拔高度?),但您可以使用纬度和经度从此服务获取海拔高度: https: //developers.google.com/maps/documentation/海拔/但这对于在飞机上使用该应用程序的人来说并不好!

但是,如果您要为此提供服务,那么不妨从服务中获取准确的海平面压力:http://www.worldweatheronline.com/api/marine-weather-api.aspx