Pregunta

HI

He intentado poner en práctica un simple rastreador GPS. Por lo tanto se utiliza

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

Luego utiliza el

public void onLocationChanged(Location location) {

método para leer la altura de mi ubicación actual.

Pero Realmente no sé qué vuelve Location.getAltitude (). El documento dice que devuelve la altitud. ¿Pero esto es en metros? o pies? si pongo el teléfono en el escritorio junto a mí, este valor cambia entre 500 y -500 ??

¿Cómo funciona esto realmente ???

¿Fue útil?

Solución

El valor de altitud que se obtiene es en metros desde el GPS (WGS84) referencia elipsoide y no desde el geoide .

A partir de mi propia experiencia de los GPS son realmente malo en los valores de altitud.

He leído esto en el GPS Status Preguntas:

GPS no informa la altura sobre el nivel medio del mar, en lugar del sistema GPS compara la altura al elipsoide de referencia WGS84, que puede estar por encima o por debajo del nivel del mar real. En diferentes partes de la tierra puede ser apagado por más de 200 metros (dependiendo de la distribución de la masa de la Tierra). Por ejemplo la superficie del geoide alrededor de la Florida está por encima del nivel medio del mar por unos 30-40 metros, con lo que se coloca en la orilla mostraría que -30m como la altitud. Esto es normal y no es un error, y es causada por el hecho de que la altitud es relativo a una superficie de referencia artificial y no al nivel del mar. Si está interesado en este tema, recomiendo leer nivel medio del mar, GPS y el geoide .

Otros consejos

postal antigua, i REKON, pero alguien todavía podría estar interesado. mientras escucha GPS, puede analizar NMEA GPGGA frase ( http://aprs.gids.nl/nmea/ #gga ), en la que no es la altura del geoide (altura del geoide anteriormente WGS84 elipsoide). Sólo resta este heigh de la getAltitude volvió valor, uno y que tendrá un valor de elevación más precisa.

Editar después de varios meses de uso y la información recibida de los usuarios de mi aplicación

Una mejor solución es obtener directamente el valor de elevación en la 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();
        }
    } 
}

Asumo que su escritorio se encuentra dentro de un edificio. Si obtiene una posición de GPS en un edificio que no se debe esperar que la precisión sea muy alta. Tienen que intentó conseguir la exactitud de la solución llamando getAccuracy ()?

GPS simplemente mide el tiempo de una señal conocida se envía desde varios satélites. Cuantos más satélites a la vista de su receptor GPS más preciso será su posición se determinará en relación con esos satélites. Si bien el sistema es propenso a algún ruido de fondo de errores (la señal del satélite es relativamente débil y el espacio es relativamente ruidoso), baja precisión pieza de tiempo en su receptor, GDOP: dilución en geométrica de precisión (todos los satélites agrupados en una esquina del cielo), refracción de la señal debido a las alturas cambiantes ionosfera, - en general es muy preciso en la determinación de su distancia desde un satélite. Geométricamente se necesitan al menos 3 satélites a la vista para conseguir una posición y una cuarta para obtener la altitud. Más satélites contribuyen a una mayor exactitud y en algunos receptores más complejos (no nuestros teléfonos sino específicamente aplicaciones de la aviación) RAIM: supervisión de la integridad autónoma del receptor, se proporciona a la exactitud del pronóstico es decir, en un área y tiempo antes de que un avión aterriza ...

La altitud es problemático para el sistema GPS, porque la tierra no se curva en constante matemática. Así, mientras que el sistema sepa dónde se encuentra en relación con el satélite que ahora debe superponer que en un modelo matemático de la tierra. En la aviación los receptores más precisos GPS debe tener altitud suplementado con barómetros y en algunos receptores de posición mejorada debido a un conocido comparación punto levantado (WAAS y LAAS).

Esto se produce cuando se utiliza el LocationManager.NETWORK_PROVIDER como proveedor de ubicación, asegúrese de que utiliza LocationManager.GPS_PROVIDER como su proveedor favorito de GPS.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top