Domanda

Ciao

Ho cercato di implementare un semplice GPS tracker. Pertanto viene utilizzato

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

Poi ho usato il

public void onLocationChanged(Location location) {

metodo per leggere l'altitudine dalla mia posizione attuale.

Ma io veramente non so cosa ritorna Location.getAltitude (). Il documento dice che restituisce l'altitudine. Ma è in metri? o piedini? se ho messo il telefono sulla scrivania accanto a me, questo valore cambia tra 500 e -500 ??

Come funziona questo funziona davvero ???

È stato utile?

Soluzione

Il valore di altitudine che si ottiene è in metri dal GPS (WGS84) di riferimento ellissoide e non dal geoide .

Dalla mia esperienza i GPS sono davvero male a valori di altitudine.

Ho letto questo sul Stato GPS FAQ:

  

GPS non riporta l'altezza al di sopra del livello medio del mare, piuttosto il sistema GPS confronta l'altezza per l'ellissoide di riferimento WGS84 che può essere al di sopra o al di sotto del livello del mare vero e proprio. In diverse parti della terra può essere spento da più di 200 metri (a seconda della distribuzione di massa di terra). Per esempio la superficie del geoide intorno Florida è al di sopra del livello medio del mare di ben 30-40 metri, il che significa che in piedi sulla riva si mostrerà come -30m altitudine. Questo è normale, e non è un errore, e causato dal fatto che la quota è relativo ad una superficie di riferimento artificiale e non al livello del mare. Se siete interessati a questo argomento, vi consiglio di leggere livello medio del mare, GPS, e il geoide .

Altri suggerimenti

vecchio post, ho Rekon, ma qualcuno potrebbe ancora essere interessato. durante l'ascolto di GPS, è possibile analizzare NMEA GPGGA frase ( http://aprs.gids.nl/nmea/ #gga ), in cui v'è l'altezza geoide (altezza del geoide sopra WGS84 ellissoide). basta sottrarre questa altezza dal getAltitude restituito il valore, uno e avrete un valore di elevazione più precisa.

Modifica dopo diversi mesi di utilizzo e feedback ricevuti dagli utenti della mia app

Una soluzione migliore è quello di ottenere direttamente il valore di elevazione nella frase 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();
        }
    } 
}

Suppongo che la scrivania si trova all'interno di un edificio. Se si ottiene un fix GPS in un edificio non si deve aspettare l'accuratezza di essere molto alto. Devono cercato di ottenere la precisione della correzione chiamando getAccuracy ()?

GPS misura semplicemente il tempo che un segnale noto viene inviato da diversi satelliti. I satelliti più in vista dei ricevitore GPS più accurata la vostra posizione sarà determinato rispetto a quei satelliti. Mentre il sistema è incline a un certo degli errori rumore di fondo (il segnale satellitare è relativamente debole e lo spazio è relativamente rumoroso), pezzo di tempo scarsa precisione nel ricevitore, GDOP: dillution geometrica di precisione (tutti i satelliti raggruppati in un angolo del cielo), rifrazione del segnale dovuta alle altezze ionosfera che cambiano, - nel complesso è molto preciso nel determinare la distanza da un satellite. Geometricamente avete bisogno di almeno 3 satelliti in vista per ottenere una posizione e un 4 ° per ottenere altitudine. Più satelliti contribuiscono a una maggiore precisione e in alcuni ricevitori più complesse (non i nostri telefoni, ma in particolare le applicazioni aeronautiche) RAIM: ricevitore controllo autonomo dell'integrità, è previsto per l'accuratezza delle previsioni in un settore e il tempo cioè prima che un aereo atterra ...

altitudine è problematico per il sistema GPS perché la terra non fa curva costante matematica. Così, mentre il sistema sa dove sei rispetto al satellite si deve ora sovrapporre che su un modello matematico della terra. Nel settore dell'aviazione ricevitori precisare GPS deve avere altitudine integrato con barometri e in alcuni ricevitori posizione migliorata a causa di un noto punto di confronto intervistati (WAAS e LAAS).

Questo si verifica in cui si utilizza il LocationManager.NETWORK_PROVIDER come fornitore di posizione, accertarsi di utilizzare LocationManager.GPS_PROVIDER come il vostro Gps fornitore preferito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top