我有以下代码:
public SensorEventListener sensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float pressure_value = 0.0f;
float height = 0.0f;
if (Sensor.TYPE_PRESSURE == event.sensor.getType())
{
pressure_value = event.values[0];
height = SensorManager.getAltitude(SensorManager.PRESSURE_STANDARD_ATMOSPHERE, pressure_value);
}
value = String.valueOf(height);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
我有海拔高度计,例如09.AM的43,xxxxxxx。
我在09.PM再次检查了一下,结果正在改变。它改变2米或更多。
是因为月亮或其他因素改变了压力吗?
以及如何解决这个问题?
我已阅读以下线程:Android: How to get accurate altitude?
但是我还是很困惑。你能指导我怎么写代码吗?并请注意,我想基于气压传感器使用它。
最佳答案
气压计提供的压力读数,而不是海拔高度的读数。
现在,由于存在压力梯度,并且通常随高度降低,因此理论上可以从压力差中推断出高度差。使用未校准的高度计,您就知道了这么多:您不知道当前的海拔高度,但是您会知道何时攀登或下降以及下降的高度。
要从当前压力计算海拔高度,您需要一个引用压力。例如,您需要知道海平面上的压力。因此,如果在海平面上的压力为x hPa,并且气压计的读数为x + 3 hPa,并且您知道压力每米增加+ 1hPa,则您的海拔高度应比海平面高3m。
问题在于,任何引用压力都会由于气象现象而总是在变化。因此,它仅在特定区域内有效一段时间。机场为飞机提供此信息,以便它们可以使用正确的引用压力(例如QNH)设置高度表。一旦知道该引用压力已标准化为海平面(不是QNH,最好使用QFF),就可以将其作为第一个参数传递给此方法:
SensorManager.getAltitude(<reference pressure at sea level>, pressure_value);
请记住,您无法对引用压力进行硬编码。它在不断变化,就像温度一样。您需要在Internet上或使用航空气象服务进行查找。
关于android - 为什么在晚上或晚上,海拔会发生变化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31691096/