]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/load/NmeaMessage.java
Version 8, September 2009
[GpsPrune.git] / tim / prune / load / NmeaMessage.java
1 package tim.prune.load;
2
3 import java.util.Calendar;
4
5 /**
6  * Class to hold a single NMEA message
7  */
8 public class NmeaMessage
9 {
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;
16
17         /**
18          * Constructor
19          * @param inLatitude latitude
20          * @param inLongitude longitude
21          * @param inAltitude altitude
22          * @param inTimestamp timestamp
23          * @param inFix fix = 0, 1 or 2
24          */
25         public NmeaMessage(String inLatitude, String inLongitude,
26                 String inAltitude, String inTimestamp, String inFix)
27         {
28                 _latitude = inLatitude;
29                 _longitude = inLongitude;
30                 _altitude = inAltitude;
31                 _timestamp = inTimestamp;
32                 _fix = (inFix != null && !inFix.equals("0"));
33         }
34
35         /**
36          * @return true if message has a fix
37          */
38         public boolean hasFix() {
39                 return _fix;
40         }
41
42         /**
43          * @param inSegment segment flag
44          */
45         public void setSegment(boolean inSegment)
46         {
47                 _segment = inSegment;
48         }
49
50         /**
51          * @return String array for loading
52          */
53         public String[] getStrings()
54         {
55                 String[] results = new String[] {modify(_latitude), modify(_longitude), _altitude,
56                         getTimestamp(), (_segment?"1":"")};
57                 return results;
58         }
59
60         /**
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
64          */
65         private static String modify(String inCoordinate)
66         {
67                 if (inCoordinate != null && inCoordinate.length() > 6)
68                 {
69                         int dotPos = inCoordinate.indexOf('.');
70                         if (dotPos > 0) {
71                                 return inCoordinate.substring(0, dotPos-2) + "d" + inCoordinate.substring(dotPos-2);
72                         }
73                 }
74                 return inCoordinate;
75         }
76
77         /**
78          * Use time from NMEA message, and today's date (as date isn't given in GPGGA messages)
79          * @return Timestamp in parseable format
80          */
81         private String getTimestamp()
82         {
83                 try
84                 {
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();
92                 }
93                 catch (Exception e) {}  // ignore parsing errors, just have no timestamp
94                 return null;
95         }
96 }