8

我一直在尝试实现一项功能,以根据 Android Galaxy S5 手机的气压计传感器获得正确的高度。唯一的问题是,我认为它不准确。基于http://www.whatismyelevation.com,它显示我的海拔高度约为 114 米。但是,在我的手机上,根据气压计传感器显示它是 210 米。然而,我在一座高楼里,但我不认为它有 100 米高。

这是我的简单代码:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.configure_settings);
    context = getApplicationContext();

    mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    sensors = mSensorManager.getSensorList(Sensor.TYPE_PRESSURE);

    if (sensors.size() > 0)
    {
        sensor = sensors.get(0);
        mSensorManager.registerListener(this, sensor,
                SensorManager.SENSOR_DELAY_NORMAL);
    }

}

@Override
public void onSensorChanged(SensorEvent event)
{
    float pressure = event.values[0];
    altitude = String.valueOf(SensorManager.getAltitude(
            SensorManager.PRESSURE_STANDARD_ATMOSPHERE, pressure));

}

谢谢!

4

3 回答 3

6

第一:气压计非常精确,但并不准确。如果您将 10 部 Android 手机并排放置在一张桌子上,您会发现设备之间的气压差高达 3 mb。这是错误的来源之一。

第二:不同的群体会以不同的方式定义“高度”,因此请确保您使用相同的定义。例如,在 Location 类中,getAltitude 定义为

获取高度(如果可用),以 WGS 84 参考椭球上方的米为单位。

http://developer.android.com/reference/android/location/Location.html#getAltitude()

第三,天气会影响气压计读数高达 40 mb。如果您想从气压计获得更准确的高度读数,则必须从当前天气中偏移。大气每小时可以改变当地压力高达 1-2 毫巴(在极端情况下)

第四:使用智能手机中的气压计还无法获得完全准确的高度读数。还没有人解决这个问题——例如,仅气压计不足以实现楼层检测。

顺便说一句,我是PressureNet的开发者——我已经从智能手机收集了超过 20 亿个压力读数,而且我每天都会看到所有这些类型的错误。

最后:如果您想获得“高度”的值,气压计提供给您的读数需要在使用前进行大量解释。默认情况下,从每个气压计读取的每个值都是“错误的”;你必须做一些具体的工作才能让它为你工作,这取决于你的确切需求。

github.com/cbsoftware/pressurenet

于 2015-07-21T20:30:39.957 回答
2

智能手机型设备的气压传感器的绝对精度非常差。即,当您静止时,读取的值可能不等于您从其他来源读取的值。

然而,它非常擅长测量气压的变化。因此,如果您读取一个高度的气压,然后快速移动到另一个高度,您将获得相当准确的高度差异测量值(前提是您使用正确的高度公式,例如https://physics.stackexchange.com /questions/333475/how-to-calculate-altitude-from-current-temperature-and-pressure

即,如果您知道其中一个位置的绝对高度,则可以计算出另一个位置的相当准确的值。

同样重要的是要记住,任何位置的气压都会因天气变化而变化。在有风的环境中,您通常会发现值不太准确,除非您对这些值进行时间平均或低通滤波。

当涉及到由谷歌、GPS 或其他来源提供的海拔值时,它们通常将某个位置的海拔高度与地球表面的理想形状相关联。这种形状通常被称为大地水准面(一种与地球实际形状非常相似的椭球体)。地球的实际表面,无论是陆地还是海洋,在大多数地方的形状都与理想的大地水准面有偏差。对于在上一个冰河时代被厚厚的冰层覆盖的地区,土地可能仍低于大地水准面参考线 30-50 米。更多详细信息可在此处找到:https ://www.esri.com/news/arcuser/0703/geoid1of3.html 。

出于法线映射的目的,高度参考某种形式的常数。当在 LAT(最低天文潮)处接近海平面 == 0 时,本地地图对海拔的参考因此传统上参考此水平。还使用了其他更“现代”的参考资料。谷歌、基于卫星的全球定位系统等不使用此参考,因此您从它们获得的高度与您在本地计算(或读取地图)的高度通常不匹配。

于 2020-07-11T13:46:10.120 回答
0

与气象站压力传感器/算法相比,仅针对三星 S7 智能手机上的 Android 8.1 的报告。

Samsung S7 phone=970 millibars
Weather station=1010 millibars (at the same time)

这与两个值的算术平均值(990 毫巴)相差约 +/- 2%。

然而,GPS 的高度误差限制约为 3%。在大约 5 分钟的跨度内,消费级 GPS 报告附近山顶的海拔高度一般在 1080 英尺到 1150 英尺之间,孤立的读数低于和高于这些读数。算术平均值为 1115 英尺,上下限值约为 1115 英尺值的 +/- 3%。国家大地测量图显示山顶的官方海拔高度为 1110 英尺,非常接近这两个值的平均值。

于 2020-05-18T18:17:31.163 回答