我有以下代码:

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/

10-09 19:41