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

Posted

技术标签:

【中文标题】如何在Android中获得气压高度?【英文标题】:How to get barometric altitude in Android? 【发布时间】:2014-06-28 04:23:56 【问题描述】:

计算气压高度需要哪些数据?我如何得到它们然后计算高度?

与 GPS 高度相比,气压的准确度如何?我尝试了 GPS,但在网上搜索了几个小时后,我找不到合适的大地水准面库。

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

【问题讨论】:

【参考方案1】:

您需要使用pressure sensor 来测量压力,然后使用SensorManager.getAltitude(float, float) 调用将测量压力与参考海平面压力一起转换以获得海拔高度。

棘手的一点是使用什么作为参考压力。这会随着天气的变化而变化,并且会随着时间的推移而漂移。通常,您会进行某种校准以设置此值并可能对其进行更新。这取决于您的用例,什么是正确的解决方案。

如果正确校准的基于压力的高度比基于 gps 的高度要准确得多,特别是如果您希望对高度差异而不是绝对高度感兴趣。通过对原始压力传感器值进行一些过滤,您可以轻松地检测到您将手机保持在面部水平或头顶上方手臂长度,您希望使用 gps 进行操作。

【讨论】:

我使用 SensorManager.PRESSURE_STANDARD_ATMOSPHERE 作为参考,我的高度是 -50 这并不奇怪。大气压力与天气有一个+- 5%的范围,这变成了一个很好的高度。正如我所说,校准它是困难的,它真的取决于你的用例,什么是明智的。 这有点好笑,因为我在注释 4 旁边放了一个注释 10+ 并运行相同的代码,但读取的差异会产生 20 米的差异,这真的让我的整个用例都崩溃了窗外 这意味着您需要一种校准策略,而不仅仅是依赖于给定位置的静态值。经典的方法是知道给定点的正确高度,然后用它来计算出标准大气压力使用的压力。你的两部手机最终会得到不同的值,但一旦校准,你会希望它们能很好地一起跟踪。 是的,刚刚开始考虑这一点,感谢帮助【参考方案2】:

参数是: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 次锁定。之后调用上述方法。

【讨论】:

以上是关于如何在Android中获得气压高度?的主要内容,如果未能解决你的问题,请参考以下文章

我的 iPhone 如何获得它的高度?

如何计算 Android 手机离地面的高度

Android:如何处理不准确的气压计?

如何将外部传感器连接到 Android 设备?

Android 如何在 LocationManager 中获取高度。我总是归零

关于博世BMP180气压计受到太阳照射影响的说明