如何在Android中获取气压高度?

5

计算气压高度需要哪些数据?我该如何获取这些数据并计算高度?

此外,与GPS高度相比,气压高度有多准确?我尝试过GPS,但在网上搜索了数小时后,我无法找到合适的大地水准面库。

如果我有任何错误的概念,请纠正我。

2个回答

11
你需要使用压力传感器来测量压力,然后使用SensorManager.getAltitude(float, float)方法将测量值与参考海平面气压一起转换为海拔高度。
棘手的部分是如何选择参考气压。这会随着天气而变化,并且会随时间漂移。通常,您需要进行某种校准以设置这些值并可能对其进行更新。根据你的用例,选择正确的解决方案。
如果经过正确校准的基于压力的高度比基于GPS的高度更准确,特别是如果您感兴趣的是高度差异而不是绝对高度。通过对原始压力传感器值进行一些过滤,您可以轻松检测将手机放在脸部水平或伸出手臂之上,而不是使用GPS。

我正在使用SensorManager.PRESSURE_STANDARD_ATMOSPHERE作为参考,但我的海拔高度显示为-50。 - Mahmoud Omara
这并不奇怪。大气压力与天气有着大约+-5%的范围,这会导致相当大的高度变化。正如我所说,校准是最困难的部分,它真的取决于您的使用情况,什么可能是明智的。 - Ifor
有趣的是,我在一个Note 10+旁边放了一个Note 4,运行了相同的代码,读数上竟然有20米的差异,这简直让我的整个用例都无法实现。 - Mahmoud Omara
这意味着您需要一个校准策略,不仅依赖于给定位置的静态值。传统的方法是知道在给定点的正确高度,然后使用它来计算标准大气压下要使用的压力。你的两部手机最终会得到不同的值,但一旦校准好了,你希望它们能够很好地跟踪在一起。 - Ifor
是的,有点这个意思,刚开始考虑这个问题,感谢帮助。 - Mahmoud Omara

1
参数包括:GPS高度(最好是从测量数组计算得出的平均值)和气压。该方法返回海平面处的气压(从SensorManager.getAltitude(float p0, float p)中的公式反推而来)。
public static float getSealevelPressure (float alt, float p)
{
    float p0 = (float) (p / Math.pow(1 - (alt/44330.0f), 5.255f));
    return p0;
}

我正在使用默认值: SensorManager.PRESSURE_STANDARD_ATMOSPHERE,直到GPS 收集 10个锁定。之后,调用上述方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接