Saltar al contenido

Android: ¿Cómo obtener una altitud precisa?

Solución:

Hay dos problemas con el uso de la altitud del GPS de un teléfono inteligente / tableta:

  1. La altitud es la altitud por encima del elipsoide de referencia WGS84. No es la altitud sobre el nivel del suelo o el nivel del mar. Aquí hay más detalles sobre eso: http://www.gpspassion.com/forumsen/topic.asp?TOPIC_ID=10915. Este error se puede corregir; aquí hay una descripción de cómo hacerlo a mano: http://www.unavco.org/edu_outreach/tutorial/geoidcorr.html. El artículo web se vincula a una calculadora para obtener la altura del geoide para su corrección; No sé si también hay un servicio web disponible para este cálculo.
  2. La altitud GPS es terriblemente inexacta para receptores GPS relativamente baratos. Aquí hay un artículo sobre eso: http://gpsinformation.net/main/altitude.htm. Un método para hacer frente a este tipo de inexactitud es filtrar los datos de altitud. Usé una estructura de datos de matriz circular para recordar las últimas lecturas de altitud (usé 4) y calcular el promedio. Esto fue suficiente para obtener una lectura relativamente precisa de la velocidad vertical para mi aplicación.

Otra forma sería analizar cadenas NMEA. La oración $ GPGGA ya contiene los datos de altitud corregidos sobre el nivel del mar.

Entonces, simplemente cree un oyente para cadenas NMEA para su LocationManager y analice los mensajes:

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

Puede reemplazar la altitud del último objeto de ubicación recibido a través de un detector de ubicación o analizar toda la nueva ubicación a través de NMEA.

Otro enfoque es medir la altitud con el barómetro.

Utilizando la presión puede calcular la altitud del usuario. No estoy seguro del nivel de precisión de esto y si es más preciso que el enfoque de la otra respuesta.

Mediante el uso de la fórmula hipsométrica puede calcular la altitud:

fórmula hipsométrica

Definición de variable:

P0: Sea-level pressure 
P: Atmospheric pressure 
T: Temperature 

Puede obtener la presión en Android de los sensores ambientales

SensorManager.getAltitude(SensorManager.PRESSURE_STANDARD_ATMOSPHERE,pressure)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *