如何在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中获得气压高度?的主要内容,如果未能解决你的问题,请参考以下文章