Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓气压计高度读数错误?_Java_Android_Geolocation_Altitude - Fatal编程技术网

Java 安卓气压计高度读数错误?

Java 安卓气压计高度读数错误?,java,android,geolocation,altitude,Java,Android,Geolocation,Altitude,我一直在尝试实现一项功能,根据Android Galaxy S5手机的气压计传感器获得正确的高度。唯一的问题是,我认为它不准确。根据我的具体位置,它显示我的海拔高度在114米左右。然而,在我的手机上,根据气压计传感器显示它是210米。然而,我在一座高楼里,但我不认为它有100米高 以下是我的简单代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceSta

我一直在尝试实现一项功能,根据Android Galaxy S5手机的气压计传感器获得正确的高度。唯一的问题是,我认为它不准确。根据我的具体位置,它显示我的海拔高度在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));

}

谢谢

首先:气压计非常精确,但不精确。如果你把10部安卓手机放在一张桌子上,你会发现设备之间的气压差高达3MB。这是一个错误的来源

第二:不同的组对“高度”的定义不同,因此请确保使用相同的定义。例如,在Location类中,getAltitude定义为

获取WGS 84参考椭球体上方的高度(如果可用)

第三,天气将影响气压计读数高达40 mb。如果你想从气压计上获得更准确的高度读数,你必须抵消当前天气的影响。大气可使局部压力每小时变化1-2毫巴(极端情况下)

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

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

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


关于三星S7智能手机安卓8.1与气象站压力传感器/算法的对比报告

Samsung S7 phone=970 millibars
Weather station=1010 millibars (at the same time)
这两个值的算术平均值相差约+/-2%,即990毫巴


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

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

然而,它在测量气压变化方面相当出色。因此,如果您读取一个高度的气压,然后快速移动到另一个高度,您将获得相当准确的高度差测量值(前提是您使用正确的高度公式,例如)

也就是说,如果你知道一个位置的绝对高度,你可以为另一个位置计算一个相当准确的值

记住,由于天气变化,任何位置的气压都是可变的,这一点也很重要。在有风的环境中,除非对值进行时间平均或低通滤波,否则通常会发现值的准确性较低

当涉及到谷歌、全球定位系统或其他来源提供的高度值时,他们通常将某个位置的高度表示为理想的地球表面形状。这种形状通常被称为大地水准面(一种非常接近地球实际形状的球体形状)。地球的实际表面,无论是陆地还是海洋,在大多数地方都与理想的大地水准面形状不同。对于在上一个冰河期被厚厚的冰层覆盖的地区,土地可能仍然低于大地水准面基准30-50米。更多详细信息可在此处找到:


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

100m=30层,或大约30层。不管怎样,大气压力取决于天气,在室内不是很准确。我怀疑你能用它来可靠地确定海拔高度。这里有一些额外的资源:我建议用谷歌搜索来查询android中气压计的校准。我发现由于它依赖于天气,所以很难维持特定的校准。