Question

HI

J'ai essayé de mettre en œuvre d'un simple tracker GPS. Par conséquent est utilisé

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

Alors j'utilisé la balise

public void onLocationChanged(Location location) {

méthode pour lire l'altitude de mon emplacement actuel.

Mais je ne sais pas vraiment ce que les rendements Location.getAltitude (). Le document indique qu'il retourne l'altitude. Mais est-ce en mètres? ou feets? si je mets le téléphone sur le bureau à côté de moi, cette valeur change entre 500 et -500 ??

Comment cela fonctionne vraiment ???

Était-ce utile?

La solution

La valeur d'altitude vous obtenez est en mètres de le GPS (WGS84) référence ellipsoïde et non de la géoïde .

De ma propre expérience du GPS sont vraiment mauvais à des valeurs d'altitude.

Je lis ceci sur le GPS Statut FAQ:

  

GPS ne signale pas la hauteur au-dessus du niveau moyen de la mer, plutôt le système GPS compare la hauteur à l'ellipsoïde de référence WGS84 qui peut être au-dessus ou en dessous du niveau de la mer réelle. Dans différentes parties de la terre, il peut être hors de plus de 200 mètres (en fonction de la distribution de masse de la Terre). Par exemple la surface du géoïde autour de la Floride est au-dessus du niveau moyen de la mer par un bon 30-40 mètres, ce qui signifie que sur le rivage vous montrerais -30m en altitude. Ceci est normal, et non une erreur, et causé par le fait que l'altitude est par rapport à une surface de référence artificielle et non au niveau de la mer. Si vous êtes intéressé par ce sujet, je vous recommande de lire Mean Sea Level, GPS, et géoïde.

Autres conseils

ancien poste, je REKON, mais quelqu'un pourrait encore être intéressé. tout en écoutant GPS, vous pouvez analyser phrase NMEA GPGGA ( http://aprs.gids.nl/nmea/ #gga ), dans lequel il y a la hauteur du géoïde (hauteur de géoïde dessus WGS84 ellipsoïde). juste soustraire cette heigh de la getAltitude valeur renvoyée, l'un et vous aurez une valeur d'élévation plus précis.

Modifier après plusieurs mois d'utilisation et les commentaires reçus des utilisateurs de mon application

Une meilleure solution est d'obtenir directement la valeur d'élévation dans la phrase GPGGA:

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();
        }
    } 
}

Je suppose que votre bureau est situé à l'intérieur d'un bâtiment. Si vous obtenez une solution GPS dans un bâtiment que vous ne devriez pas attendre la précision soit très élevée. Je dois essayé d'obtenir la précision de la correction en appelant getAccuracy ()?

GPS mesure simplement le temps un signal connu est envoyé par plusieurs satellites. Plus satellites en vue de votre récepteur GPS plus précis de votre position sera déterminée par rapport à ces satellites. Bien que le système est sujette à un bruit de fond ERROR- (le signal satellite est relativement faible et l'espace est relativement bruyant), morceau de temps faible précision dans votre récepteur, GDOP: dillution géométrique de précision (tous les satellites regroupés dans un coin de ciel), réfraction du signal en raison des hauteurs changeantes ionosphère, - dans l'ensemble, il est très précis pour déterminer la distance d'un satellite. Géométriquement dont vous avez besoin au moins 3 satellites en vue d'obtenir une position et une 4ème pour obtenir l'altitude. Plus de satellites contribuent à une plus grande précision et dans certains récepteurs plus complexes (et non pas nos téléphones, mais plus particulièrement les applications aéronautiques) RAIM: récepteur de surveillance autonome de l'intégrité, est fourni à la précision prévu dans une zone et le temps-à-dire avant l'atterrissage des avions ...

Altitude est problématique pour le système GPS, car la terre ne courbe à constante mathématique. Ainsi, alors que le système sait où vous êtes par rapport au satellite, il doit maintenant superposer que sur un modèle mathématique de la terre. Dans l'aviation les récepteurs GPS plus précis doivent avoir l'altitude complétée par des baromètres et dans certains récepteurs améliorée position en raison d'une comparaison point levé connu (WAAS et LAAS).

Ce produit où vous utilisez le LocationManager.NETWORK_PROVIDER comme fournisseur d'emplacement, assurez-vous que vous utilisez LocationManager.GPS_PROVIDER comme votre fournisseur Gps favori.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top