altoslib: Start restructuring AltosState harder
[fw/altos] / altosui / AltosKML.java
index 7e3b0e0834d56f4ff553feeda81d9a180b9c053c..140f3f0766b9bdb792a733c02d48dbf68f3fc869 100644 (file)
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  */
 
-package AltosUI;
+package altosui;
 
-import java.lang.*;
 import java.io.*;
-import java.text.*;
-import java.util.*;
-import org.altusmetrum.AltosLib.*;
+import org.altusmetrum.altoslib_1.*;
 
 public class AltosKML implements AltosWriter {
 
@@ -29,6 +26,7 @@ public class AltosKML implements AltosWriter {
        PrintStream             out;
        int                     state = -1;
        AltosRecord             prev = null;
+       double                  gps_start_altitude;
 
        static final String[] kml_state_colors = {
                "FF000000",
@@ -110,9 +108,15 @@ public class AltosKML implements AltosWriter {
 
        void coord(AltosRecord record) {
                AltosGPS        gps = record.gps;
+               double          altitude;
+
+               if (record.height() != AltosRecord.MISSING)
+                       altitude = record.height() + gps_start_altitude;
+               else
+                       altitude = gps.alt;
                out.printf(kml_coord_fmt,
                           gps.lon, gps.lat,
-                          record.filtered_altitude(), (double) gps.alt,
+                          altitude, (double) gps.alt,
                           record.time, gps.nsat);
        }
 
@@ -133,8 +137,7 @@ public class AltosKML implements AltosWriter {
 
                if (gps == null)
                        return;
-               if ((record.seen & (AltosRecord.seen_flight)) == 0)
-                       return;
+
                if ((record.seen & (AltosRecord.seen_gps_lat)) == 0)
                        return;
                if ((record.seen & (AltosRecord.seen_gps_lon)) == 0)
@@ -142,11 +145,9 @@ public class AltosKML implements AltosWriter {
                if (!started) {
                        start(record);
                        started = true;
+                       gps_start_altitude = gps.alt;
                }
-               if (prev != null &&
-                   prev.gps.second == record.gps.second &&
-                   prev.gps.minute == record.gps.minute &&
-                   prev.gps.hour == record.gps.hour)
+               if (prev != null && prev.gps_sequence == record.gps_sequence)
                        return;
                if (record.state != state) {
                        state = record.state;