Android: Comment obtenir une altitude précise?
3 réponses
il y a deux problèmes avec l'utilisation de l'altitude D'un smartphone / tablette GPS:
- L'altitude est l'altitude au-dessus de l'ellipsoïde de référence WGS84. Il ne s'agit pas de l'altitude au-dessus du niveau du sol ou du niveau de la mer. Voici plus de détails à ce sujet: http://www.gpspassion.com/forumsen/topic.asp?TOPIC_ID=10915 . Cette erreur peut être corrigée; voici une description Comment faire cela à la main: http://www.unavco.org/edu_outreach/tutorial/geoidcorr.html . L'article web est relié à une calculatrice pour obtenir la hauteur géoïde pour la correction; Je ne sais pas s'il y a aussi un service web disponible pour ce calcul.
- l'altitude GPS est terriblement inexacte pour les récepteurs GPS relativement bon marché. Voici un article à ce sujet: http://gpsinformation.net/main/altitude.htm . Une méthode pour faire face à ce genre d'imprécision est de filtrer la les données d'altitude. J'ai utilisé une structure de données à matrice circulaire pour me souvenir des derniers relevés d'altitude (j'ai utilisé 4) et calculer la moyenne. Cela a suffi pour obtenir une lecture relativement précise de la vitesse verticale pour mon application.
une autre façon serait d'analyser les chaînes NMEA. La phrase $ GPGGA contient déjà les données d'altitude corrigées au-dessus du niveau de la mer.
ainsi, il suffit de créer un écouteur à NMEA-strings pour votre LocationManager et analyser les messages:
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]);
}
}
}
}
vous pouvez soit remplacer l'altitude du dernier objet de localisation reçu par un auditeur de localisation, soit analyser l'ensemble du nouvel emplacement par NMEA.
il y a d'autres moyens d'obtenir l'altitude que le GPS. Vous pouvez utiliser le baromètre, mais comme il n'y a pas encore beaucoup d'appareils avec un capteur barométrique (seulement les nouveaux). Je vous recommande d'utiliser un service web pour acquérir les données souhaitées.
Voici une question qui devrait vous aider à travers: obtenir l'altitude par la longitude et la latitude dans Android