Skip to content

Commit

Permalink
Fix #253 - Add support for $GNGGA NMEA sentences for MSL altitude
Browse files Browse the repository at this point in the history
  • Loading branch information
barbeau committed Jan 28, 2019
1 parent 01e6f0f commit 5b434e8
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 4 deletions.
10 changes: 6 additions & 4 deletions GPSTest/src/main/java/com/android/gpstest/util/GpsTestUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -320,27 +320,29 @@ public static void writeGnssMeasurementToLog(GnssMeasurement measurement) {
}

/**
* Given a $GPGGA or $GNGNS NMEA sentence, return the altitude above mean sea level (geoid
* Given a $GPGGA, $GNGNS, or $GNGGA NMEA sentence, return the altitude above mean sea level (geoid
* altitude),
* or null if the altitude can't be parsed.
*
* Example inputs are:
* $GPGGA,032739.0,2804.732835,N,08224.639709,W,1,08,0.8,19.2,M,-24.0,M,,*5B
* $GNGNS,015002.0,2804.733672,N,08224.631117,W,AAN,09,1.1,78.9,-24.0,,*23
* $GNGGA,172814.00,2803.208136,N,08225.981423,W,1,08,1.1,-19.7,M,-24.8,M,,*5F
*
* Example outputs would be:
* 19.2
* 78.9
* -19.7
*
* @param nmeaSentence a $GPGGA or $GNGNS NMEA sentence
* @param nmeaSentence a $GPGGA, $GNGNS, or $GNGGA NMEA sentence
* @return the altitude above mean sea level (geoid altitude), or null if altitude can't be
* parsed
*/
public static Double getAltitudeMeanSeaLevel(String nmeaSentence) {
final int ALTITUDE_INDEX = 9;
String[] tokens = nmeaSentence.split(",");

if (nmeaSentence.startsWith("$GPGGA") || nmeaSentence.startsWith("$GNGNS")) {
if (nmeaSentence.startsWith("$GPGGA") || nmeaSentence.startsWith("$GNGNS") || nmeaSentence.startsWith("$GNGGA")) {
String altitude;
try {
altitude = tokens[ALTITUDE_INDEX];
Expand All @@ -361,7 +363,7 @@ public static Double getAltitudeMeanSeaLevel(String nmeaSentence) {
return null;
}
} else {
Log.w(TAG, "Input must be a $GPGGA or $GNGNS NMEA: " + nmeaSentence);
Log.w(TAG, "Input must be $GPGGA, $GNGNS, or $GNGGA NMEA: " + nmeaSentence);
return null;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,21 @@ public void testGetAltitudeFromNmea() {
= "$GPGGA,032739.0,2804.732835,N,08224.639709,W,1,08,0.8,19.2,M,-24.0,M,,*5B";
final String gnssSentence
= "$GNGNS,015002.0,2804.733672,N,08224.631117,W,AAN,09,1.1,78.9,-24.0,,*23";
final String gnGga1 = "$GNGGA,114926.00,3206.341435,N,11850.092448,E,1,11,0.9,19.9,M,2.2,M,,*7E";
final String gnGga2 = "$GNGGA,172814.00,2803.208136,N,08225.981423,W,1,08,1.1,-19.7,M,-24.8,M,,*5F";

altitude = GpsTestUtil.getAltitudeMeanSeaLevel(gpsSentence);
assertEquals(19.2d, altitude);

altitude = GpsTestUtil.getAltitudeMeanSeaLevel(gnssSentence);
assertEquals(78.9d, altitude);

altitude = GpsTestUtil.getAltitudeMeanSeaLevel(gnGga1);
assertEquals(19.9d, altitude);

altitude = GpsTestUtil.getAltitudeMeanSeaLevel(gnGga2);
assertEquals(-19.7d, altitude);

final String badGnssSentence
= "$GNGNS,015002.0,2804.733672,N,08224.631117,W,AAN,09,1.1,BAD,-24.0,,*23";
altitude = GpsTestUtil.getAltitudeMeanSeaLevel(badGnssSentence);
Expand Down

0 comments on commit 5b434e8

Please sign in to comment.