2012-06-23 3 views
5

Ich teste gerade eine Android-App, die den Standort aufzeichnet (lat/long/alt). Ich bin mit der App auf einem Samsung GTS5830 Telefon mit Android 2.2.1Ist die GPS-Höhe von Android falsch, weil die Geoidhöhe nicht eingeschlossen ist?

Ich lese hier und da, dass GPS-Höhe aufgrund der Erde oft falsch ist nicht perfekt sphärisch ist. An meinem Standort ist zum Beispiel the geoid's height 52 Meter.

Mein Verständnis ist, dass diese Höhe von einer „reinen“ GPS-Höhe abgezogen werden würde. Dies würde Sinn für meine Lage machen wie:

- altitude from GPS phone: 535 m 
- geoid altitude: 52 m 
- altitude from phone's GPS minus geoid height: 482m 

- correct atlitude: 478 m 

482 an der Realität nahe genug ist für mich Erhebung zu verfolgen, wenn

  1. Ist die obige Formel der Höhe GPS Wander minus Geoid Höhe korrekt ?
  2. Bin ich richtig anzunehmen, dass Android die Höhe des Geoids nicht berücksichtigt, wenn er die GPS-Höhe zurückgibt?
  3. Wenn das Obige wahr ist, gilt es für alle Versionen von Android?

Hier ist der Code, den ich das GPS zu erhalten verwenden Koordinaten:

public class HelloAndroid extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     Log.d("main", "onCreate"); 
     setupGps(); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

    LocationListener locationListener; 
    LocationManager lm; 

    void setupGps() { 
     Log.d("gps", "Setting up GPS..."); 
     locationListener = new MyLocationListener(); 
     lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 20000, 5, 
       locationListener); 

     Log.d("gps", 
       "GPS supports altitude: " 
         + lm.getProvider(LocationManager.GPS_PROVIDER) 
           .supportsAltitude()); 
     Log.d("gps", "Finished setting up GPS."); 
    } 

    static class MyLocationListener implements LocationListener { 

     public void onLocationChanged(Location location) { 
      Log.d("gps", "long: " + location.getLongitude() + ", lat: " 
        + location.getLatitude() + ", alt: " 
        + location.getAltitude()); 
     } 
    } 
} 

Antwort

6

Die Antworten auf alle drei Ihrer Fragen sind ja.

Die Höhe Sie von GPS erhalten, ist die Höhe über dem WGS84 Ellipsoid in Metern, die eine Annäherung an die Erdoberfläche ist. Ich weiß das, weil ich Android-Software entwickelt habe, um es zu benutzen.

hat eine Korrektur angewandt werden, um die Zahl auf der Höhe über den Meeresspiegel oder Höhe zu wandeln, wie es üblicherweise bekannt ist. Beachten Sie, dass dies von der Höhe abweichen kann, die von einem auf den aktuellen Druck auf mittlerem Meeresspiegel eingestellten Höhenmesser gemeldet wird, da ein Höhenmesser tatsächlich den Luftdruck misst, aber der Luftdruck nicht nur eine Funktion der Höhe ist; es ist auch eine Funktion der Luftdichte und Temperatur, so dass ein Höhenmesser eine Annäherung zeigt. Dieser Effekt ist bei GPS nicht zu sehen.

Die Erdgravitationsmodell 2008 (EGM2008) bildet die Differenz in NHN mit dem Ellipsoid als Funktion der Länge und Breite. Details sind hier:

http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008/egm08_wgs84.html

Ein ungenaues Modell, das weniger Daten genannt EGM96 verwendet, ist ebenfalls erhältlich. Google beide, um diese besser zu verstehen.

+0

Auch die Antworten auf alle drei Ihrer Fragen sind ja. – davtom

+0

Setzen Sie diesen Kommentar in Ihre Antwort und ich werde dies die akzeptierte Antwort markieren. –

+0

Ich habe das getan, danke. – davtom

4

Fehler in der Höhe auf die GPS und Geoid Höhe Trennung können auch nicht nach unten sein.

Der Wert Höhe von jedem GPS-Empfänger zurückgegeben wird, ist immer die am wenigsten genaue Wert. Ich habe oft meinen Bürogebäudebericht gesehen, dass er sich in Höhenlagen zwischen -200 und +750 Metern bewegt. Ein grundlegender Grund ist, dass es unmöglich ist, eine gleichmäßige Ausbreitung von Satelliten in der Höhenrichtung zu erreichen; sie werden immer über dir sein, und wenn der Himmel in niedrigen Höhen verdunkelt ist, werden sie sich in einem Kegel über dir befinden. In der X- und Y-Richtung wird es bei einer guten Himmelsdarstellung immer links und rechts gespreizte Satelliten geben; vor und hinter dem Empfänger. Diese Verteilung erhöht die Genauigkeit der Positionslösung.

+0

"-200 bis +750 Meter": Ich glaube nicht für eine Sekunde, dass GPS-Empfänger mit der Höhe so ungenau sind, es sei denn, solche Variationen passen in die Genauigkeit der Messung, aber selbst das klingt unglaubwürdig. –

+0

Für eine an der Wand befestigte Antenne (die zu mehr als 50% des Himmels verdunkelt ist), zu bestimmten Tageszeiten, wenn die sichtbare Konstellation eine ungünstige Geometrie aufweist, und einen Kaltstart (dh widrige Betriebsbedingungen) sind dies die typischen Extreme, die ich habe gesehen. Diese Werte wurden mit SiRFStar-2, SiRFStar-3, Ublox 5 und Ublox 6 gesehen. Im Allgemeinen wird die Höhe nach einigen Minuten Dauerbetrieb auf +/- 75 Meter ansteigen. –

5

Es ist nicht ganz so einfach - die Android API hat sich entweder geändert oder hat Fehler. Ich habe zwei Android-Geräte - ein 'generisches' Telefon (Android 2.3.6) und ein Nexus 7 (Android 4.x).

Am Telefon gibt getAltitude() eine Antwort in Übereinstimmung mit meiner tatsächlichen Höhe AMSL (d. H. Korrigiert für geoid). Auf der Nexus 7 ist die zurückgegebene Höhe unkorrigiert. Die Dokumentation für die API gibt nicht an, welche zurückgegeben wird - in gewisser Weise sind beide "korrekt".

Beide Geräte scheinen anständig zu sein GPS modules - die $GPGGA NMEA Nachricht zeigt sowohl die richtige Höhen- als auch die Geoidkorrektur. Es sieht also so aus, als müsste man die Nachrichten selbst analysieren, um die richtige Höhe zu erhalten, und die Methode getAltitude() ist nicht vertrauenswürdig.

Verwandte Themen