X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosui%2FAltosKML.java;h=ae1f8259c4d19d459502a525c40f2f1d23494dfa;hp=6bac1d9c03eab2462c7b4ac9dedf51437c4e4abc;hb=2625a464417c8475c66101757ca2c30cd6c74e0c;hpb=97ab77d548964115e4b41ad5952194fcd1455c96 diff --git a/altosui/AltosKML.java b/altosui/AltosKML.java index 6bac1d9c..ae1f8259 100644 --- a/altosui/AltosKML.java +++ b/altosui/AltosKML.java @@ -17,18 +17,16 @@ package altosui; -import java.lang.*; import java.io.*; -import java.text.*; -import java.util.*; -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", @@ -85,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); @@ -96,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.filtered_altitude(), (double) gps.alt, - record.time, gps.nsat); + altitude, (double) gps.alt, + state.time, gps.nsat); } void end() { @@ -128,45 +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) { - System.out.printf ("no gps\n"); + if (gps == null) return; - } - System.out.printf ("seen %x\n", record.seen); - if ((record.seen & (AltosRecord.seen_flight)) == 0) + if (gps.lat == AltosLib.MISSING) return; - if ((record.seen & (AltosRecord.seen_gps_lat)) == 0) - 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 {