1 package tim.prune.load;
3 import java.util.Calendar;
6 * Class to hold a single NMEA message
8 public class NmeaMessage
10 private String _latitude = null;
11 private String _longitude = null;
12 private String _altitude = null;
13 private String _timestamp = null;
14 private boolean _fix = false;
15 private boolean _segment = false;
19 * @param inLatitude latitude
20 * @param inLongitude longitude
21 * @param inAltitude altitude
22 * @param inTimestamp timestamp
23 * @param inFix fix = 0, 1 or 2
25 public NmeaMessage(String inLatitude, String inLongitude,
26 String inAltitude, String inTimestamp, String inFix)
28 _latitude = inLatitude;
29 _longitude = inLongitude;
30 _altitude = inAltitude;
31 _timestamp = inTimestamp;
32 _fix = (inFix != null && !inFix.equals("0"));
36 * @return true if message has a fix
38 public boolean hasFix() {
43 * @param inSegment segment flag
45 public void setSegment(boolean inSegment)
51 * @return String array for loading
53 public String[] getStrings()
55 String[] results = new String[] {modify(_latitude), modify(_longitude), _altitude,
56 getTimestamp(), (_segment?"1":"")};
61 * Insert a separator between degrees and minutes
62 * @param inCoordinate NMEA coordinate string
63 * @return modified string or input string if format wasn't what was expected
65 private static String modify(String inCoordinate)
67 if (inCoordinate != null && inCoordinate.length() > 6)
69 int dotPos = inCoordinate.indexOf('.');
71 return inCoordinate.substring(0, dotPos-2) + "d" + inCoordinate.substring(dotPos-2);
78 * Use time from NMEA message, and today's date (as date isn't given in GPGGA messages)
79 * @return Timestamp in parseable format
81 private String getTimestamp()
85 Calendar cal = Calendar.getInstance();
86 cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(_timestamp.substring(0, 2)));
87 cal.set(Calendar.MINUTE, Integer.parseInt(_timestamp.substring(2, 4)));
88 cal.set(Calendar.SECOND, Integer.parseInt(_timestamp.substring(4, 6)));
89 cal.set(Calendar.MILLISECOND, 0);
90 // Return time as number of milliseconds
91 return "" + cal.getTimeInMillis();
93 catch (Exception e) {} // ignore parsing errors, just have no timestamp