2012-02-20 9 views
35

Potrzebuję uzyskać dokładny pomiar wysokości za pomocą samego GPS.Android: Jak uzyskać dokładną wysokość?

Próbowałem Location.getAltitude(), ale to jest strasznie niedokładne. Jakaś rada?

+0

Prawdopodobny duplikat [Uzyskaj wysokość według długości i szerokości geograficznej w systemie Android] (http://stackoverflow.com/questions/1995998/get-altitude-by- long-and-latitude-in-android) –

Odpowiedz

44

Istnieją dwa problemy z użyciem wysokość GPS smartphone/tablet:

  1. Wysokość jest wysokość nad elipsoidy odniesienia WGS84. To nie jest wysokość nad poziomem gruntu lub poziomu morza. Oto więcej szczegółów na ten temat: http://www.gpspassion.com/forumsen/topic.asp?TOPIC_ID=10915. Ten błąd można poprawić; tutaj jest opis, jak to zrobić ręcznie: http://www.unavco.org/edu_outreach/tutorial/geoidcorr.html. Artykuł internetowy łączy się z kalkulatorem, aby uzyskać wysokość geoidy do korekty; Nie wiem, czy istnieje również usługa internetowa dostępna dla tego obliczenia.
  2. Wysokość GPS jest strasznie niedokładna w przypadku stosunkowo tanich odbiorników GPS. Oto artykuł na ten temat: http://gpsinformation.net/main/altitude.htm. Jedną z metod radzenia sobie z tego rodzaju niedokładnością jest filtrowanie danych wysokości. Użyłem struktury danych w postaci okrągłych tablic, aby zapamiętać kilka ostatnich (użyłem 4) odczytów wysokości i obliczyć średnią. To wystarczało, aby uzyskać względnie dokładny odczyt prędkości pionowej dla mojej aplikacji.
+0

Dzięki. Sądzę więc, że nie mogę uzyskać dokładnej wysokości, chyba że mam dostęp do internetu w mojej aplikacji, aby poprawić wysokość Geoidu. – ask

+0

Możesz to zrobić offline. Trzeba tylko obliczyć różnicę między poziomem elipsoidy i poziomem morza. Co nie jest banalne. Zobacz tę odpowiedź: https://stackoverflow.com/a/12811478/1561404 –

1

Są inne sposoby na osiągnięcie wysokości niż GPS. Możesz użyć barometru, ale nie ma jeszcze wielu urządzeń z czujnikami barometrycznymi (tylko te nowe). Zalecę skorzystanie z usługi internetowej w celu uzyskania pożądanych danych.

Oto jest pytanie, które powinno pomóc poprzez: Get altitude by longitude and latitude in Android

2

Innym sposobem byłoby analizowania ciągów NMEA. $GPGGA sentence zawiera już skorygowane dane wysokości nad poziomem morza.

Tak, wystarczy utworzyć słuchacza do NMEA ciągów dla swojej LocationManager i analizować komunikaty:

private GpsStatus.NmeaListener mNmeaListener = new GpsStatus.NmeaListener() { 
    @Override 
    public void onNmeaReceived(long timestamp, String nmea) { 
     parseNmeaString(nmea); 
    } 
}; 

public void registerLocationManager(Context context) { 
     mLocationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE); 
     mLocationManager.addNmeaListener(mNmeaListener); 
} 

private void parseNmeaString(String line) { 
     if (line.startsWith("$")) { 
      String[] tokens = line.split(","); 
      String type = tokens[0]; 

      // Parse altitude above sea level, Detailed description of NMEA string here http://aprs.gids.nl/nmea/#gga 
      if (type.startsWith("$GPGGA")) { 
       if (!tokens[9].isEmpty()) { 
        mLastMslAltitude = Double.parseDouble(tokens[9]); 
       } 
      } 
     } 
    } 

możliwe jest zastąpienie wysokość ostatniej lokalizacja obiektu odbierany przez słuchacza lokalizacji lub analizować całość nowa lokalizacja poprzez NMEA.

Powiązane problemy