2015-07-21 10 views
5

Próbowałem wprowadzić funkcję, aby uzyskać odpowiednią wysokość na podstawie czujnika barometru z telefonów z Androidem Galaxy S5. Jedynym problemem jest to, że nie uważam, że jest to dokładne. Opierając się na http://www.whatismyelevation.com na mojej konkretnej lokalizacji, pokazuje, że moja wysokość wynosi około 114 metrów. Jednak na moim telefonie pokazuje, że jest to 210 metrów w oparciu o czujnik barometru. Jestem jednak w wysokim budynku, ale nie sądzę, że ma 100 metrów wysokości.Czytanie wysokościomierza z Androidem jest nieprawidłowe?

Oto mój prosty kod:

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

} 

Dzięki!

+1

100m = 30 piętra, lub w tej okolicy. Bez względu na to, ciśnienie barometryczne zależy od warunków pogodowych i niezbyt dokładnych w pomieszczeniach. Wątpię, czy możesz go użyć do niezawodnego określenia wysokości. – 323go

+0

Oto niektóre dodatkowe zasoby: http://stackoverflow.com/questions/23581378/how-to-getometric-altitude-in-android http://stackoverflow.com/questions/17871735/android- how-does-one-deal-with-niedokładne-baromtery Proponuję wyszukiwanie google, aby dowiedzieć się o kalibracji barometru w systemie Android. Odkryłem, że ze względu na zależność od pogody trudno jest utrzymać określoną kalibrację. – CubeJockey

Odpowiedz

4

Po pierwsze: barometry są bardzo precyzyjne, ale nie dokładne. Jeśli umieścisz 10 telefonów z systemem Android obok siebie na stole, możesz znaleźć różnice ciśnienia barometrycznego do 3 mb między urządzeniami. Jest to jedno źródło błędu.

Po drugie: Różne grupy będą definiować inaczej "wysokość", więc upewnij się, że używasz tych samych definicji. Na przykład w klasie Location getAltitude jest zdefiniowany jako

Get wysokość jeśli są dostępne, w metrach nad WGS 84 elipsoidy odniesienia.

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

trzecie, pogoda wpłynie na odczyt barometru nawet do 40 MB. Jeśli chcesz uzyskać dokładniejszy odczyt wysokości z barometru, będziesz musiał odciąć się od aktualnej pogody. Atmosfera może zmienić lokalne ciśnienie nawet o 1-2 milibary na godzinę (w skrajnych przypadkach).

Po czwarte: nie jest jeszcze możliwe uzyskanie dokładnego odczytu wysokości za pomocą barometru w smartfonie. Nikt tego jeszcze nie rozwiązał - sam barometr jest niewystarczający, aby na przykład uzyskać wykrywanie poziomu podłogi.

Jestem deweloperem PressureNet, przy okazji - zebrałem ponad 2 miliardy odczytów ciśnienia ze smartfonów i każdego dnia widzę te wszystkie typy błędów.

Na zakończenie: odczyt, który barometr dostarcza do ciebie, wymaga znacznej interpretacji przed użyciem, jeśli chcesz osiągnąć wartość dla "wysokości". Każda wartość odczytana z każdego barometru jest domyślnie "zła"; będziesz musiał wykonać konkretną pracę, aby zadziałała, w zależności od Twoich konkretnych potrzeb.

github.com/cbsoftware/pressurenet

Powiązane problemy