package com.buglabs.nmea2;
import com.buglabs.nmea.Time;
import com.buglabs.nmea.sentences.NMEAParserException;
/**
* Stores GGA type NMEA sentence data
*
* @author kgilmer
*
*/
public final class GGA extends AbstractNMEASentence {
/**
* Time 170834 17:08:34 Z Latitude 4124.8963, N 41d 24.8963' N or 41d 24'
* 54" N Longitude 08151.6838, W 81d 51.6838' W or 81d 51' 41" W Fix
* Quality: Number of Satellites 05 5 Satellites are in view Horizontal
* Dilution of Precision (HDOP) 1.5 Relative accuracy of horizontal position
* Altitude 280.2, M 280.2 meters above mean sea level Height of geoid above
* WGS84 ellipsoid -34.0, M -34.0 meters Time since last DGPS update blank
* No last update DGPS reference station id blank No station id Checksum *75
* Used by program to check for transmission errors
*/
private Time time;
private String latitude;
private String longitude;
private int fixQuality;
private int numOfSatellites;
private float precision;
private double altitude;
private char unitOfAltitude;
private double geoidHeight;
private char unitOfGeoidHeight;
protected GGA(String sentence) {
super(sentence);
}
protected void initialize() {
precision = (float) -1.0;
}
protected void parseField(int index, String field, String fields[]) {
try {
switch (index) {
case 1:
time = new Time(field);
break;
case 2:
latitude = field + "," + fields[index + 1];
break;
case 4:
longitude = field + "," + fields[index + 1];
break;
case 6:
fixQuality = Integer.parseInt(field);
break;
case 7:
numOfSatellites = Integer.parseInt(field);
break;
case 8:
precision = Float.parseFloat(field);
break;
case 9:
altitude = Double.parseDouble(field);
break;
case 10:
unitOfAltitude = field.charAt(0);
break;
case 11:
geoidHeight = Double.parseDouble(field);
break;
case 12:
unitOfGeoidHeight = field.charAt(0);
break;
case 14:
break;
default:
break;
}
} catch (NumberFormatException e) {
throw new NMEAParserException("Unable to parse sentence.", e);
}
}
public Time getTime() {
return time;
}
public String getLatitude() {
return latitude;
}
public String getLongitude() {
return longitude;
}
public int getFixQuality() {
return fixQuality;
}
public int getNumOfSatellites() {
return numOfSatellites;
}
public float getPrecision() {
return precision;
}
public double getAltitude() {
return altitude;
}
public char getUnitOfAltitude() {
return unitOfAltitude;
}
public double getGeoidHeight() {
return geoidHeight;
}
public char getUnitOfGeoidHeight() {
return unitOfGeoidHeight;
}
protected void validate() {
}
public String toString() {
return checksum + " " + time + " " + latitude + " " + longitude + " " + fixQuality + " " + numOfSatellites + " " + precision + " " + altitude + " "
+ unitOfAltitude + " " + geoidHeight + " " + unitOfGeoidHeight;
}
}