X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosui%2FAltosKML.java;h=ae1f8259c4d19d459502a525c40f2f1d23494dfa;hp=281638bf3e92c0b14b200e58a854677e9a173b33;hb=2625a464417c8475c66101757ca2c30cd6c74e0c;hpb=7894c27b2b2c3c46a7c107c8acd5977830f006cf diff --git a/altosui/AltosKML.java b/altosui/AltosKML.java index 281638bf..ae1f8259 100644 --- a/altosui/AltosKML.java +++ b/altosui/AltosKML.java @@ -18,14 +18,15 @@ package altosui; import java.io.*; -import org.altusmetrum.AltosLib.*; +import org.altusmetrum.altoslib_3.*; public class AltosKML implements AltosWriter { File name; PrintStream out; - int state = -1; - AltosRecord prev = null; + int flight_state = -1; + AltosState prev = null; + double gps_start_altitude; static final String[] kml_state_colors = { "FF000000", @@ -82,7 +83,7 @@ public class AltosKML implements AltosWriter { "\n" + "\n"; - void start (AltosRecord record) { + void start (AltosState record) { out.printf(kml_header_start, record.flight, record.serial); out.printf("Date: %04d-%02d-%02d\n", record.gps.year, record.gps.month, record.gps.day); @@ -93,24 +94,30 @@ public class AltosKML implements AltosWriter { boolean started = false; - void state_start(AltosRecord record) { - String state_name = Altos.state_name(record.state); - out.printf(kml_style_start, state_name, kml_state_colors[record.state]); + void state_start(AltosState state) { + String state_name = Altos.state_name(state.state); + out.printf(kml_style_start, state_name, kml_state_colors[state.state]); out.printf("\tState: %s\n", state_name); out.printf("%s", kml_style_end); out.printf(kml_placemark_start, state_name, state_name); } - void state_end(AltosRecord record) { + void state_end(AltosState state) { out.printf("%s", kml_placemark_end); } - void coord(AltosRecord record) { - AltosGPS gps = record.gps; + void coord(AltosState state) { + AltosGPS gps = state.gps; + double altitude; + + if (state.height() != AltosLib.MISSING) + altitude = state.height() + gps_start_altitude; + else + altitude = gps.alt; out.printf(kml_coord_fmt, gps.lon, gps.lat, - record.altitude(), (double) gps.alt, - record.time, gps.nsat); + altitude, (double) gps.alt, + state.time, gps.nsat); } void end() { @@ -125,42 +132,40 @@ public class AltosKML implements AltosWriter { } } - public void write(AltosRecord record) { - AltosGPS gps = record.gps; + public void write(AltosState state) { + AltosGPS gps = state.gps; if (gps == null) return; - if ((record.seen & (AltosRecord.seen_flight)) == 0) - return; - if ((record.seen & (AltosRecord.seen_gps_lat)) == 0) + if (gps.lat == AltosLib.MISSING) return; - if ((record.seen & (AltosRecord.seen_gps_lon)) == 0) + if (gps.lon == AltosLib.MISSING) return; if (!started) { - start(record); + start(state); 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 == state.gps_sequence) return; - if (record.state != state) { - state = record.state; + if (state.state != flight_state) { + flight_state = state.state; if (prev != null) { - coord(record); + coord(state); state_end(prev); } - state_start(record); + state_start(state); } - coord(record); - prev = record; + coord(state); + prev = state; } - public void write(AltosRecordIterable iterable) { - for (AltosRecord record : iterable) - write(record); + public void write(AltosStateIterable states) { + for (AltosState state : states) { + if ((state.set & AltosState.set_gps) != 0) + write(state); + } } public AltosKML(File in_name) throws FileNotFoundException {