2010-05-07 10 views
7

HI¿Cómo funciona GetAltitude() de la ubicación de Android GPS

He intentado implementar un rastreador de GPS simple. Por lo tanto se utiliza

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

Luego utiliza el método

public void onLocationChanged(Location location) { 

para leer la altura de mi ubicación actual.

Pero realmente no sé qué devuelve 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?

+8

Aún así, esto no es algo mejor que suponer (todos sabemos dónde asumir nos lleva a la programación). Especialmente porque el país del que hablas es donde se encuentra Google. Vamos a aceptar que la documentación podría mejorarse. – snapfractalpop

Respuesta

23

El valor de altitud que obtienes está en metros desde the gps (WGS84)reference ellipsoid y no desde geoid.

Según mi propia experiencia, los GPS son muy malos para los valores de altitud.

leí esto en el GPS Status FAQ:

GPS no informa de la altura sobre el nivel medio del mar, en lugar del sistema GPS compara la altura a la elipsoide de referencia WGS84, que puede estar por encima o por debajo de la real el nivel del mar. En diferentes partes de la tierra puede estar apagado en más de 200 metros (dependiendo de la distribución de masa de la Tierra). Por ejemplo, la superficie del geoide alrededor de Florida está por encima del nivel medio del mar en unos buenos 30-40 metros, lo que significa que pararse en la orilla le mostrará -30m como la altitud. Esto es normal, y no es un error, y es causado por el hecho de que la altitud es relativa a una superficie de referencia artificial y no al nivel del mar. Si está interesado en este tema, le recomiendo que lea Mean Sea Level, GPS, and the Geoid.

+0

¿Es justo decir que las mediciones son "precisas pero no precisas" en un entorno bastante localizado? En otras palabras, ¿se puede usar el GPS para medir con precisión la altitud relativa entre los puntos cercanos? – snapfractalpop

+0

@snapfractalpop: No, el GPS no es bueno para la altitud. Debe usar un barómetro para medir la altitud, los teléfonos Android más nuevos tienen eso, p. Nexus Galaxy. – Jonas

+0

gracias, es bueno saberlo. ¿Un barómetro sería problemático debido a las perturbaciones del clima? – snapfractalpop

1

Supongo que su escritorio se encuentra dentro de un edificio. Si obtiene una corrección de GPS en un edificio, no debe esperar que la precisión sea muy alta. Tiene que intentar obtener la precisión de la corrección llamando a getAccuracy()?

+0

sí está ubicado en un edificio pero lo puse en el marco de la ventana;) gracias por la sugerencia de getAccuracy – RoflcoptrException

5

anterior, pero alguien podría estar interesado. mientras escuchas el GPS, puedes analizar la oración NMEA GPGGA (http://aprs.gids.nl/nmea/#gga), en la que está la altura del geoide (altura del geoide sobre el elipsoide WGS84). simplemente reste esta altura del valor devuelto getAltitude, una y tendrá un valor de elevación más preciso.

Edición 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(); 
     } 
    } 
} 
+0

** Si ** el campo está lleno, que no tiene que ser, y ** si ** la oración es incluso salida, que no tiene que ser tampoco y ** si ** hay salida NMEA en todas; los dispositivos Android más baratos no lo tienen en absoluto. –

+0

Hola Jan, por supuesto, como puedes ver en mi código, se deben hacer algunos controles antes de leer ese valor. Supongo que en dispositivos más baratos, el evento onNmeaReceived nunca se activa;) – edestrero

+0

De hecho, hay muchos dispositivos que no devuelven NMEA en absoluto o solo devuelven información limitada en él. –

1

Gps simplemente mide el tiempo en que se envía una señal conocida desde varios satélites. Cuantos más satélites tenga a la vista de su receptor GPS, más precisa será su posición en relación con esos satélites.Mientras que el sistema es propenso a algunos errores-ruido de fondo (la señal del satélite es relativamente débil y el espacio es relativamente ruidoso), pieza de tiempo de baja precisión en su receptor, GDOP: dillución geométrica de precisión (todos los satélites agrupados en una esquina del cielo) refracción de la señal debido a la variación de la ionosfera; en general, es muy precisa para determinar la distancia desde un satélite. Geométricamente necesita al menos 3 satélites para obtener una posición y un 4 para obtener altitud. Más satélites contribuyen a una mayor precisión y en algunos receptores más complejos (no nuestros teléfonos, sino específicamente aplicaciones de aviación) RAIM: se proporciona monitoreo de integridad autónomo del receptor para pronosticar la precisión en un área y tiempo, es decir, antes de que aterrice un avión ...

La altitud es problemática para el sistema GPS porque la Tierra no se curva en la constante matemática. Entonces, aunque el sistema sabe dónde se encuentra en relación con el satélite, ahora debe superponer eso en un modelo matemático de la Tierra. En la aviación, los receptores Gps más precisos deben tener una altitud complementada con barómetros y en algunos receptores una posición mejorada debido a una comparación conocida de puntos encuestados (WAAS y LAAS).

0

Esto ocurre cuando utiliza el LocationManager.NETWORK_PROVIDER como proveedor de ubicación, asegúrese de utilizar LocationManager.GPS_PROVIDER como su proveedor de Gps favorito.

Cuestiones relacionadas