Je dois obtenir une mesure précise de l'altitude à l'aide du GPS uniquement.
J'ai essayé Location.getAltitude()
, mais c'est terriblement inexact ..__ Un conseil?
L'utilisation de l'altitude d'un smartphone/tablette GPS pose deux problèmes:
Une autre façon serait d'analyser les chaînes NMEA. La phrase $ GPGGA contient déjà les données d'altitude corrigées au-dessus du niveau de la mer.
Donc, créez simplement un écouteur pour les chaînes NMEA pour votre LocationManager et analysez les messages:
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]);
}
}
}
}
Vous pouvez remplacer l'altitude du dernier objet Location reçu via un écouteur d'emplacement ou analyser le nouvel emplacement complet via NMEA.
Il existe d'autres moyens d'obtenir l'altitude que par GPS. Vous pouvez utiliser le baromètre, mais comme il n’ya pas encore beaucoup d’appareils dotés de capteurs barométriques (seuls les nouveaux). Je recommanderai d'utiliser un service Web pour acquérir les données souhaitées.
Voici une question qui devrait vous aider à: Obtenir l'altitude par longitude et latitude dans Android
Une autre approche consiste à mesurer l'altitude à partir du baromètre.
En utilisant la pression, vous pouvez calculer l'altitude de l'utilisateur. Je ne suis pas sûr du niveau de précision de ce point et s'il est plus précis que l'approche de l'autre réponse.
En utilisant la formule hypsometric vous pouvez calculer l’altitude:
Définition de variable:
P0: Sea-level pressure
P: Atmospheric pressure
T: Temperature
Vous pouvez obtenir la pression dans Android à partir de capteurs d’environnement
SensorManager.getAltitude(SensorManager.PRESSURE_STANDARD_ATMOSPHERE,pressure)
Pour les nouveaux arrivants, j'ai créé une bibliothèque qui encapsule LocationManager dans des observables rxjava et ajoute quelques aides observables pour obtenir le niveau de la mer de Nmea/GPGGA mre info ici