【问题标题】:Android Barometer Altitude Reading Is Wrong?Android 气压计高度读数错误?
【发布时间】:2015-10-11 01:27:44
【问题描述】:

我一直在尝试实现一项功能,以根据 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));

}

谢谢!

【问题讨论】:

  • 100m = 30 层左右。无论如何,气压取决于天气,在室内不是很准确。我怀疑你可以用它来可靠地确定高度。
  • 这里有一些额外的资源:@​​987654322@stackoverflow.com/questions/17871735/…我建议谷歌搜索查询android中的气压计校准。我发现由于它对天气的依赖性,很难保持特定的校准。

标签: java android geolocation altitude


【解决方案1】:

首先:气压计非常精确,但并不准确。如果您将 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

【讨论】:

    【解决方案2】:

    智能手机型设备的气压传感器的绝对精度很差。 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 时,本地地图对海拔的参考因此传统上参考此水平。还使用了其他更“现代”的参考资料。 Google、基于卫星的全球定位系统等不使用此参考,因此您从它们获得的高度与您在本地计算(或读取地图)的高度通常不匹配。

    【讨论】:

      【解决方案3】:

      仅针对三星 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 英尺,非常接近这两个值的平均值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-26
        • 2016-01-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多