+++ /dev/null
-package tim.prune.load;
-
-import java.util.Calendar;
-
-/**
- * Class to hold a single NMEA message
- */
-public class NmeaMessage
-{
- private String _latitude = null;
- private String _longitude = null;
- private String _altitude = null;
- private String _timestamp = null;
- private String _date = null;
- private boolean _fix = false;
- private boolean _segment = false;
-
- /**
- * Constructor
- * @param inLatitude latitude
- * @param inLongitude longitude
- * @param inAltitude altitude
- * @param inTimestamp timestamp
- * @param inFix fix = 0, 1 or 2
- */
- public NmeaMessage(String inLatitude, String inLongitude,
- String inAltitude, String inTimestamp, String inFix)
- {
- _latitude = inLatitude;
- _longitude = inLongitude;
- _altitude = inAltitude;
- _timestamp = inTimestamp;
- _fix = (inFix != null && !inFix.equals("0"));
- }
-
- /**
- * @return true if message has a fix
- */
- public boolean hasFix() {
- return _fix;
- }
-
- /**
- * @param inSegment segment flag
- */
- public void setSegment(boolean inSegment)
- {
- _segment = inSegment;
- }
-
- /**
- * @param inDate date from MRC sentence
- */
- public void setDate(String inDate) {
- _date = inDate;
- }
-
- /**
- * @return String array for loading
- */
- public String[] getStrings()
- {
- String[] results = new String[] {modify(_latitude), modify(_longitude), _altitude,
- getTimestamp(), (_segment?"1":"")};
- return results;
- }
-
- /**
- * Insert a separator between degrees and minutes
- * @param inCoordinate NMEA coordinate string
- * @return modified string or input string if format wasn't what was expected
- */
- private static String modify(String inCoordinate)
- {
- if (inCoordinate != null && inCoordinate.length() > 6)
- {
- int dotPos = inCoordinate.indexOf('.');
- if (dotPos > 0) {
- return inCoordinate.substring(0, dotPos-2) + "d" + inCoordinate.substring(dotPos-2);
- }
- }
- return inCoordinate;
- }
-
- /**
- * Use time from NMEA message, and today's date (as date isn't given in GPGGA messages)
- * @return Timestamp in parseable format
- */
- private String getTimestamp()
- {
- try
- {
- Calendar cal = Calendar.getInstance();
- // use date if available (today if not)
- if (_date != null && _date.length() == 6) {
- try {
- cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(_date.substring(0, 2)));
- cal.set(Calendar.MONTH, Integer.parseInt(_date.substring(2, 4))-1); // month starts at zero
- int year = Integer.parseInt(_date.substring(4, 6));
- if (year < 80) {year += 2000;} else {year += 1900;} // two-digit year hack
- cal.set(Calendar.YEAR, year);
- }
- catch (Exception e) {} // ignore exceptions for date, still take time
- }
- cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(_timestamp.substring(0, 2)));
- cal.set(Calendar.MINUTE, Integer.parseInt(_timestamp.substring(2, 4)));
- cal.set(Calendar.SECOND, Integer.parseInt(_timestamp.substring(4, 6)));
- cal.set(Calendar.MILLISECOND, 0);
- // Return time as number of milliseconds
- return "" + cal.getTimeInMillis();
- }
- catch (Exception e) {} // ignore parsing errors, just have no timestamp
- return null;
- }
-}