package com.buglabs.nmea2; import com.buglabs.nmea.DegreesMinutesSeconds; import com.buglabs.nmea.sentences.NMEAParserException; /** * Contains RMC type NMEA sentences. * * @author kgilmer * */ public final class RMC extends AbstractNMEASentence { private String magneticVariation; private String timeOfFix; private String dataStatus; private String latitude; private String longitude; private String groundSpeed; private String trackMadeGood; private String dateStamp; protected RMC(String sentence) { super(sentence); } protected void initialize() { magneticVariation = ""; timeOfFix = ""; dataStatus = ""; latitude = ""; longitude = ""; groundSpeed = ""; trackMadeGood = ""; dateStamp = ""; } protected void parseField(int index, String field, String fields[]) { switch (index) { case 1: timeOfFix = field; break; case 2: dataStatus = field; break; case 3: latitude = field + "," + fields[index + 1]; break; case 5: longitude = field + "," + fields[index + 1]; break; case 7: groundSpeed = field; break; case 8: trackMadeGood = field; break; case 9: dateStamp = field; break; case 10: if (fields.length > 11) { magneticVariation = field + "," + fields[index + 1]; if (magneticVariation.length() == 1) { magneticVariation = ""; } } break; default: break; } } protected void validate() { if (isEmpty(latitude) || isEmpty(longitude)) { throw new NMEAParserException("RMC sentence without long or lat defined."); } } /** * @return Magnetic Variation */ public String getMagneticVariation() { return magneticVariation; } /** * @return Time of Fix */ public String getTimeOfFix() { return timeOfFix; } /** * @return Data Status */ public String getDataStatus() { return dataStatus; } /** * @return Latitude */ public String getLatitude() { return latitude; } /** * @return Longitude */ public String getLongitude() { return longitude; } /** * Calculate latitude in degrees minutes seconds units. * * @return */ public DegreesMinutesSeconds getLatitudeAsDMS() { return new DegreesMinutesSeconds(latitude); } /** * Calculate longitude in degrees minutes seconds units. * * @return */ public DegreesMinutesSeconds getLongitudeAsDMS() { return new DegreesMinutesSeconds(longitude); } /** * @return Ground Speed */ public String getGroundSpeed() { return groundSpeed; } /** * @return Trakc Make Good */ public String getTrackMadeGood() { return trackMadeGood; } /** * @return Date of sample */ public String getDateStamp() { return dateStamp; } }