Leo*_*nto 6 android altitude sensormanager
我有以下代码:
public SensorEventListener sensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float pressure_value = 0.0f;
float height = 0.0f;
if (Sensor.TYPE_PRESSURE == event.sensor.getType())
{
pressure_value = event.values[0];
height = SensorManager.getAltitude(SensorManager.PRESSURE_STANDARD_ATMOSPHERE, pressure_value);
}
value = String.valueOf(height);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
Run Code Online (Sandbox Code Playgroud)
我在09.AM有高度计,例如43,xxxxxxx.
我在09.PM再次检查,结果正在发生变化.它改变2米或更多.
是因为月亮或其他任何东西改变了压力?
以及如何解决这个问题?
我已阅读以下主题:Android:如何获得准确的海拔高度?
但我仍然感到困惑.你能指导我如何编写代码吗?值得注意的是,我想基于气压传感器使用它.
气压计提供压力读数,而不是高度读数.
现在因为有一个渐变的压力,一般来说它会随高度而减小,理论上你可以推断出高度与压力差的差异.这就是你所知道的非校准高度计:你不知道你当前的高度,但你会知道你何时爬升或下降以及多少.
要根据当前压力计算高度,您需要一个参考压力.例如,您需要知道海平面的压力.因此,如果在海平面上的压力为x hPa,并且气压计读数为x + 3 hPa,并且您知道压力增加+ 1hPa/m,则您的海拔高度将高出海平面3m.
问题是任何参考压力都会因气象现象而发生变化.所以它只会在某个区域有效.机场为飞机提供此信息,以便他们可以使用正确的参考压力(例如,QNH)设置其高度计.一旦你知道这个参考压力归一化到海平面(QNH不是,你最好使用QFF),你可以将它作为第一个参数传递给这个方法:
SensorManager.getAltitude(<reference pressure at sea level>, pressure_value);
Run Code Online (Sandbox Code Playgroud)
请记住,您无法对参考压力进行硬编码.它像温度一样不断变化.您需要在互联网上查找,或使用航空气象服务.
| 归档时间: |
|
| 查看次数: |
267 次 |
| 最近记录: |