Android: Comment obtenir une altitude précise?

je dois obtenir une mesure précise de l'altitude en utilisant le GPS seulement.

j'ai essayé Location.getAltitude() , mais c'est terriblement inexact. Tous les conseils?

41
demandé sur Sᴀᴍ Onᴇᴌᴀ 2012-02-20 17:23:55

3 réponses

il y a deux problèmes avec l'utilisation de l'altitude D'un smartphone / tablette GPS:

  1. 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.
  2. 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.
48
répondu Stefan 2012-02-24 14:29:54

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.

3
répondu sladstaetter 2017-06-13 10:05:28

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

1
répondu 7heViking 2017-05-23 12:17:16