Android 气压计高度读数错误?

Android Barometer Altitude Reading Is Wrong?

我一直在尝试实现一项功能,以根据 Android Galaxy S5 phones 的气压计传感器获取正确的高度。唯一的问题是,我认为它不准确。根据我的特定位置 http://www.whatismyelevation.com,它显示我的海拔高度约为 114 米。但是,在我的 phone 上,它显示基于气压计传感器是 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));

}

谢谢!

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

其次:不同的群体对 'altitude' 的定义不同,因此请确保您使用的是相同的定义。例如,在 Location class 中,getAltitude 定义为

Get the altitude if available, in meters above the WGS 84 reference ellipsoid.

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

第三,天气会对气压计的读数产生高达40 mb的影响。如果您想从气压计上获得更准确的高度读数,您将不得不根据当前天气进行偏移。大气可以每小时改变局部压力高达 1-2 毫巴(在极端情况下)

第四:目前还不可能使用智能手机中的气压计获得完全准确的高度读数。还没有人解决这个问题 - 例如,气压计本身不足以实现地面检测。

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

最后:如果您想达到 'altitude' 的值,则在使用前需要对气压计提供给您的读数进行重要的解释。默认情况下,从每个气压计读取的每个值都是 'wrong';你必须做特定的工作才能让它为你工作,这取决于你的确切需求。

github.com/cbsoftware/pressurenet

只是 Android 三星 S7 智能手机上的 8.1 与气象站压力 sensor/algorithms 相比的报告。

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 英尺,非常接近两个值的平均值。

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

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

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

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

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

出于法线贴图的目的,高度参考某种形式的常量。当在 LAT(最低天文潮汐)处接近海面高度 == 0 时,因此传统上参考该高度的本地映射参考高度。其他更多 'modern' 引用也被使用。 Google,基于卫星的全球定位系统等不使用此参考,因此您从它们获得的高度与您在本地计算(或从地图上读取)的高度通常不匹配。