Est Android GPS altitude incorrecte en raison de ne pas y compris la hauteur du géoïde?
Je teste une application Android qui enregistre la position (lat/long/alt). Je suis de l'exécution de l'application sur un Samsung GTS5830 téléphone fonctionnant sous Android 2.2.1
J'ai lu ici et là que l'altitude GPS est souvent incorrect en raison de la terre n'étant pas parfaitement sphérique. À mon emplacement, par exemple, le géoïde est la hauteur est de 52 mètres.
Ma compréhension est que cette hauteur serait soustraite à partir d'une "pureté" de l'altitude GPS. Ce serait bon pour mon emplacement:
- altitude from GPS phone: 535 m
- geoid altitude: 52 m
- altitude from phone's GPS minus geoid height: 482m
- correct atlitude: 478 m
482 est assez proche de la vraie chose pour moi à l'altitude de piste lors d'une randonnée
- Est la formule ci-dessus de la GPS de la hauteur, moins le géoïde est la hauteur correcte?
- Ai-je raison de supposer que android n'est pas en tenant compte de la hauteur du géoïde lors du retour de l'altitude GPS?
- Si ce qui précède est vrai, tient-il pour toutes les versions d'Android?
Voici le code que j'utilise pour obtenir les coordonnées GPS:
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());
}
}
}
Vous devez vous connecter pour publier un commentaire.
Les réponses à tous les trois de vos questions sont oui.
L'altitude que vous obtenez de GPS est la hauteur au-dessus de l'ellipsoïde WGS84 en mètres, ce qui est une approximation de la surface de la terre. Je le sais parce que j'ai été en développement logiciel Android pour l'utiliser.
Une correction doit être appliquée pour convertir la figure de hauteur au-dessus du niveau moyen de la mer, ou de l'altitude, comme il est généralement connu. Notez que cela peut différer de l'altitude signalé par un altimètre réglé à la pression actuelle au niveau moyen de la mer en raison d'un altimètre mesure en réalité la pression de l'air, mais la pression de l'air n'est pas seulement une fonction de hauteur; elle est aussi fonction de la densité de l'air et de la température, de sorte qu'un altimètre indique une approximation. Cet effet n'est pas observé avec le GPS.
La Terre le Modèle Gravitationnel 2008 (EGM2008) des cartes de la différence de niveau moyen de la mer avec l'ellipsoïde en fonction de la longitude et de la latitude. Les détails sont ici:
http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008/egm08_wgs84.html
Moins un modèle précis qui utilise moins de données appelé EGM96 est également disponible. Google ces deux pour mieux les comprendre.
Ce n'est pas tout à fait aussi simple -- le
Android API
a changé ou a des bugs. J'ai deux appareils Android -- un "générique" de téléphone (Android 2.3.6
) et unNexus 7
(Android 4.x
).Sur le téléphone,
getAltitude()
donne une réponse cohérente avec mes altitudeAMSL
(c'est à dire, corrigée pourgeoid
). Sur leNexus 7
, l'altitude retournée est pas corrigée. La documentation pour laAPI
ne précise pas qui est retourné -- donc, dans un certain sens, les deux sont "correct".Les deux appareils semblent avoir décent
GPS modules
-- le$GPGGA NMEA
message indique à la fois le bon altitute et le géoïde de correction. Il semble donc que si on doit analyser les messages soi-même pour obtenir la bonne altitude, et lagetAltitude()
méthode est peu fiable.Des erreurs dans l'altitude peut très bien ne pas être en panne de GPS et de géoïde altitude de séparation.
L'altitude de la valeur retournée par n'importe quel récepteur GPS est toujours le moins de valeur précise. J'ai souvent vu mon bureau, immeuble de rapport qu'il se déplace en altitude comprise entre -200 et +750 mètres. Une raison fondamentale est qu'il est impossible d'obtenir une répartition homogène des satellites dans l'altitude de la direction; ils sont toujours au-dessus de vous, et si il n'y a aucun obscurcissement du ciel à basse altitude, ils seront situés dans un cône au-dessus de vous. Dans les directions X et Y, il y aura toujours, en supposant une bonne vue du ciel, être satellites répartis à gauche et à droite; devant et derrière le récepteur. Cet écart augmente la précision de la position de la solution.