Frage

HALLO

Ich habe versucht, einen einfachen GPS-Tracker zu implementieren. Daher verwendet wird

lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, this);  

Dann habe ich die

public void onLocationChanged(Location location) {

Methode, um die Höhe meiner aktuellen Position zu lesen.

aber ich weiß nicht wirklich, was Location.getAltitude () zurückkehrt. Das Dokument sagt, dass es die Höhe zurückkehrt. Aber ist das in Metern? oder Füße? wenn ich das Telefon auf dem Schreibtisch setzen neben mir, ändert sich dieser Wert zwischen 500 und -500 ??

Wie funktioniert das wirklich funktioniert ???

War es hilfreich?

Lösung

Der Höhenwert Sie erhalten, ist in Meter von die GPS (WGS84) Bezugsellipsoid und nicht von der Geoid .

Aus meiner eigenen Erfahrung ist die GPS auf Höhenwerten wirklich schlecht.

Ich lese diese auf der GPS-Status FAQ:

GPS berichtet nicht die Höhe über dem Meeresspiegel, eher das GPS-System vergleicht die Höhe des WGS84 Bezugsellipsoid, die über oder unter dem tatsächlichen Meeresspiegel liegen. In verschiedenen Teilen der Erde kann es von mehr als 200 m (abhängig von der Massenverteilung der Erde) aus sein. Zum Beispiel um Florida die Oberfläche des Geoid ist über dem mittleren Meeresspiegel um gut 30 bis 40 Meter, was bedeutet, dass am Ufer stehen würden Sie zeigen, wie Höhe -30m. Dies ist normal, und kein Fehler, und durch die Tatsache verursacht, dass die Höhe zu einer künstlichen Referenzoberfläche relativ und nicht auf den Meeresspiegel. Wenn Sie an diesem Thema interessiert sind, empfehle ich NHN, GPS zu lesen, und das Geoid .

Andere Tipps

alte Post, i REKON, aber jemand könnte noch interessiert sein. während auf GPS hören, können Sie NMEA GPGGA Satz ( http://aprs.gids.nl/nmea/ analysieren #gga ), in dem es die Geoidhöhe (Höhe der Geoid oben WGS84 Ellipsoid). gerade diese heigh subtrahiert von den getAltitude Wert zurückgegeben, ein und Sie erhalten einen genaueren Höhenwert haben.

Bearbeiten nach mehreren Monaten der Nutzung und Feedback von Nutzern meiner App erhalten

Eine bessere Lösung ist direkt mit dem Höhenwert im GPGGA Satz zu bekommen:

double GGA_ALTITUDE = 0d;
private static final String NMEA_GGA = "$GPGGA";    
private static final int altitude_element_id = 9;

@Override
public void onNmeaReceived(long timestamp, String nmea) {
    foundSats = true;
    // check that this is an RMC string
    if (nmea.startsWith(NMEA_GGA)) {
        String[] tokens = nmea.split(",");
        try {
            // get orthometric elevation
            String elevation = tokens[altitude_element_id];             
            if (!elevation.equals("")) {
                Log.d("NMEA", "ortho elev: " + ortho);
                GGA_ALTITUDE = Double.parseDouble(elevation);                   
            }
        } catch (Exception ex) {
            Log.e("NMEA", "onNmeaReceived: "
                    + ex.getMessage());

            onNmeaException(ex.getMessage());               
            ex.printStackTrace();
        }
    } 
}

Ich gehe davon aus, dass Ihr Schreibtisch in einem Gebäude befindet. Wenn Sie ein GPS-Fix in einem bekommen bauen Sie nicht die Genauigkeit erwarten sollte sehr hoch sein. Müssen versucht, die Genauigkeit der fix bekommen durch den Aufruf getAccuracy ()?

GPS misst einfach die Zeit ein bekanntes Signal von mehreren Satelliten gesendet wird. Je mehr Satelliten in Reichweite Ihres GPS-Empfänger die genauere Ihre Position wird auf diesen Satelliten bestimmt relativ werden. Während das System bis zu einem gewissen fehler- Hintergrundrauschen anfällig ist (das Satellitensignal relativ schwach ist und Raum ist relativ laut), geringe Präzision Zeitstück in Ihrem Receiver, GDOP: geometrische dillution Präzision (alle Satelliten in einer Ecke des Himmels gruppiert), Brechung des Signals aufgrund der Ionosphäre wechselnden Höhen, - insgesamt ist es sehr genau in Ihrem Abstand von einem Satelliten zu bestimmen. Geometrisch benötigen Sie mindestens drei Satelliten in Sicht eine Position und eine vierte zu bekommen, um Höhe zu bekommen. Mehr Satelliten zu größerer Genauigkeit und in einigen komplexeren Empfänger (nicht unsere Telefone aber speziell Luftfahrt-Anwendungen) beitragen RAIM: Empfänger autonome Integritätsüberwachung, liegt in einem Gebiet und Zeit, dh vor einem Flugzeug Prognosegenauigkeit bereitgestellt landet ...

Höhe ist für das GPS-System problematisch, weil die Erde nicht Kurve auf mathematischen Konstante. So, während das System weiß, wo Sie in Bezug auf den Satelliten sind, müssen sie nun überlagern, dass auf einem mathematischen Modell der Erde. In der Luftfahrt müssen die genauere GPS-Empfänger Höhe mit Barometern ergänzt haben und in einigen Empfängern verbesserte Position aufgrund eines bekannten vermessenen Punkt Vergleich (WAAS und LAAS).

Dies kann der Fall, wo Sie die LocationManager.NETWORK_PROVIDER wie Standortanbieter verwenden, stellen Sie sicher, dass Sie LocationManager.GPS_PROVIDER wie Ihre Lieblings-GPS-Provider verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top