我一直在尝试基于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));
}
谢谢!
最佳答案
第一:气压计非常精确,但不准确。如果将10部Android手机彼此并排放置在桌子上,您会发现设备之间的气压差最大为3 mb。这是错误的来源之一。
第二:不同的组对“海拔”的定义不同,因此请确保使用相同的定义。例如,在Location类中,将getAltitude定义为
http://developer.android.com/reference/android/location/Location.html#getAltitude()
第三,天气会影响气压计的读数达40 mb。如果要从气压计获得更准确的高度读数,则必须从当前天气中偏移。大气层每小时最多可改变1-2毫巴的局部压力(在极端情况下)
第四:使用智能手机中的气压计尚无法获得完全准确的高度读数。尚无人解决此问题-例如,仅气压计不足以实现地板水平检测。
顺便说一下,我是PressureNet的开发人员-我已经从智能手机中收集了超过20亿个压力读数,而且每天我都会看到所有这些类型的错误。
最后:如果要获得“海拔”值,则气压计提供给您的读数需要在使用前进行大量解释。默认情况下,从每个晴雨表读取的每个值都是“错误的”。您必须根据自己的确切需求进行特定的工作才能使其适合您。
github.com/cbsoftware/pressurenet