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