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 类?请记住,应该计算这些值!
谢谢
如果您从海拔高度进行校准(毕竟您有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
| 归档时间: |
|
| 查看次数: |
1855 次 |
| 最近记录: |