Android: ¿Cómo obtener una altitud exacta?

Necesito obtener una medida exacta de la altitud usando GPS solamente.

Intenté Location.getAltitude (), pero eso es terriblemente inexacto. ¿Algún consejo?

3 Solutions collect form web for “Android: ¿Cómo obtener una altitud exacta?”

Hay dos problemas con el uso de la altitud de un smartphone / tablet GPS:

  1. La altitud es la altitud sobre el elipsoide de referencia WGS84. No es la altura 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í está una descripción cómo hacer eso a mano: http://www.unavco.org/edu_outreach/tutorial/geoidcorr.html . El artículo web enlaza con una calculadora para obtener la altura del geoide para la corrección; No sé si también hay un servicio web disponible para este cálculo.
  2. La altitud del GPS es terriblemente inexacta para los 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 imprecisión es filtrar los datos de altitud. Utilicé una estructura de datos de matriz circular para recordar las últimas (usé 4) lecturas de altitud y calcular el promedio. Esto bastó para obtener una lectura relativamente precisa de la velocidad vertical para mi aplicación.

Hay otras maneras de obtener la altitud que por GPS. Usted puede utilizar el barómetro, pero como no hay muchos dispositivos con sensores barométricos todavía (sólo los nuevos). Voy a recomendar el uso de un servicio web para adquirir los datos deseados.

Esta es una pregunta que debería ayudarle a: Obtener la altitud por longitud y latitud en Android

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

Por lo tanto, simplemente cree un listener a NMEA-strings 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 oyente de ubicación o analizar toda la nueva ubicación a través de NMEA.

  • El proveedor de ubicación fusionado setsmallestDisplacement no funciona en Android
  • Android GeoCoder devuelve sólo 1 resultado
  • MSecurityInputMethodService es nulo en logcat
  • ¿Cómo puedo obtener las coordenadas de un mapa al toque con MapFragment (no MapView)?
  • Android O - Old empezar el servicio de primer plano sigue funcionando?
  • Mantenga el servicio de ubicación activo cuando la aplicación esté cerrada.
  • ¿Cómo afecta la función Doze / Standby a las actualizaciones de ubicación?
  • Android: cómo arreglar gps con simulacros (falso) de coordenadas?
  • conexión a internet en pausa después de bloqueo de teléfono android
  • Actualizaciones de ubicación que no funcionan en interiores como lo reclaman las API del proveedor de ubicaciones de Fusion
  • ¿Dónde está la ubicación .apk para las aplicaciones que se instalan en sdcard?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.