2015-07-21 2 views
5

Ich habe versucht, ein Feature zu implementieren, um die richtige Höhe basierend auf dem Barometer-Sensor von Android Galaxy S5-Handys zu erhalten. Das einzige Problem ist, ich glaube nicht, dass es genau ist. Basierend auf http://www.whatismyelevation.com an meinem speziellen Standort, zeigt es, dass meine Höhe etwa 114 Meter ist. Auf meinem Handy zeigt es jedoch, dass es 210 Meter basierend auf dem Barometer-Sensor ist. Ich bin jedoch in einem hohen Gebäude, aber ich glaube nicht, dass es 100 Meter hoch ist.Android Barometer Höhenmessung ist falsch?

Hier ist mein einfacher Code:

@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)); 

} 

Dank!

+1

100m = 30 Stockwerke, oder so ähnlich. Unabhängig davon, der Luftdruck ist abhängig vom Wetter und nicht sehr genau in Innenräumen. Ich bezweifle, dass Sie es verwenden können, um die Höhe zuverlässig zu bestimmen. – 323go

+0

sind hier einige zusätzliche Ressourcen: http://stackoverflow.com/questions/23581378/how-to-get-barometric-altitude-in-android http://stackoverflow.com/questions/17871735/android- how-does-one-deal-mit-ungenau-baromters Ich schlage vor, eine Google-Suche nach Barometer-Kalibrierung in Android zu erkundigen. Ich fand heraus, dass es aufgrund seiner Wetterabhängigkeit schwierig ist, eine spezifische Kalibrierung beizubehalten. – CubeJockey

Antwort

4

Erstens: Die Barometer sind sehr präzise, ​​aber nicht genau. Wenn Sie 10 Android-Telefone nebeneinander auf einem Tisch platzieren, können Sie barometrische Druckunterschiede von bis zu 3 mb zwischen Geräten feststellen. Dies ist eine Fehlerquelle.

Zweitens: Verschiedene Gruppen definieren "Höhe" unterschiedlich, also stellen Sie sicher, dass Sie die gleichen Definitionen verwenden. In der Klasse Location wird getAltitude beispielsweise als

definiert. Falls verfügbar, die Höhe in Metern über dem Referenzellipsoid WGS 84 ermitteln.

http://developer.android.com/reference/android/location/Location.html#getAltitude()

Drittens das Wetter wird das Lesen des Barometers um bis zu 40 mb beeinflussen. Wenn Sie eine genauere Höhenmessung vom Barometer erhalten möchten, müssen Sie vom aktuellen Wetter abweichen. Die Atmosphäre kann den lokalen Druck um bis zu 1-2 Millibar pro Stunde verändern (im Extremfall)

Viertens: Mit dem Barometer in einem Smartphone ist es noch nicht möglich, eine absolut genaue Höhenmessung zu erhalten. Niemand hat das bisher gelöst - das Barometer alleine reicht beispielsweise nicht aus, um eine Bodenerkennung zu erreichen.

Ich bin der Entwickler von PressureNet, übrigens - ich habe über 2 Milliarden Druckmessungen von Smartphones gesammelt, und ich sehe all diese Arten von Fehlern jeden Tag.

Zum Schluss: Der Messwert, den das Barometer an Sie liefert, muss vor der Verwendung gut interpretiert werden, wenn Sie einen Wert für "Höhe" erreichen möchten. Jeder Wert, der von jedem Barometer gelesen wird, ist standardmäßig "falsch"; Sie müssen spezifische Arbeiten ausführen, um es für Sie arbeiten zu lassen, je nachdem, was genau Sie benötigen.

github.com/cbsoftware/pressurenet