summaryrefslogtreecommitdiff
path: root/altoslib/AltosKML.java
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2017-05-25 17:24:14 -0700
committerKeith Packard <keithp@keithp.com>2017-05-25 17:24:14 -0700
commitf26cfe417c6977cf1e7e75a4f050e25f64d41859 (patch)
tree2f19ca9c93c3246b3eeadafee250f9dd3ee222d6 /altoslib/AltosKML.java
parent7600116a191b3ac252a0f716d200d0e0b3500987 (diff)
altoslib: Do data analysis on raw values rather than AltosState
Use AltosFlightSeries instead of a sequence of AltosState records when processing saved data. This provides a better way of doing filtering and plotting. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib/AltosKML.java')
-rw-r--r--altoslib/AltosKML.java73
1 files changed, 43 insertions, 30 deletions
diff --git a/altoslib/AltosKML.java b/altoslib/AltosKML.java
index 25108bf9..61e83daa 100644
--- a/altoslib/AltosKML.java
+++ b/altoslib/AltosKML.java
@@ -36,7 +36,7 @@ public class AltosKML implements AltosWriter {
File name;
PrintWriter out;
int flight_state = -1;
- AltosState prev = null;
+ AltosGPS prev = null;
double gps_start_altitude;
static final String[] kml_state_colors = {
@@ -101,42 +101,43 @@ public class AltosKML implements AltosWriter {
"</Document>\n" +
"</kml>\n";
- void start (AltosState record) {
+ void start (int state) {
+/*
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);
out.printf("Time: %2d:%02d:%02d\n",
record.gps.hour, record.gps.minute, record.gps.second);
out.printf("%s", kml_header_end);
+*/
}
boolean started = false;
- void state_start(AltosState state) {
- String state_name = AltosLib.state_name(state.state());
- String state_color = state_color(state.state());
+ void state_start(int state) {
+ String state_name = AltosLib.state_name(state);
+ String state_color = state_color(state);
out.printf(kml_style_start, state_name, state_color);
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(AltosState state) {
+ void state_end() {
out.printf("%s", kml_placemark_end);
}
- void coord(AltosState state) {
- AltosGPS gps = state.gps;
+ void coord(double time, AltosGPS gps, int state, double height) {
double altitude;
- if (state.height() != AltosLib.MISSING)
- altitude = state.height() + gps_start_altitude;
+ if (height != AltosLib.MISSING)
+ altitude = height + gps_start_altitude;
else
altitude = gps.alt;
out.printf(kml_coord_fmt,
gps.lon, gps.lat,
altitude, (double) gps.alt,
- state.time, gps.nsat);
+ time, gps.nsat);
}
void end() {
@@ -145,7 +146,7 @@ public class AltosKML implements AltosWriter {
public void close() {
if (prev != null) {
- state_end(prev);
+ state_end();
end();
prev = null;
}
@@ -155,12 +156,7 @@ public class AltosKML implements AltosWriter {
}
}
- public void write(AltosState state) {
- AltosGPS gps = state.gps;
-
- if (gps == null)
- return;
-
+ public void write(AltosGPS gps, int state, double height) {
if (gps.lat == AltosLib.MISSING)
return;
if (gps.lon == AltosLib.MISSING)
@@ -170,24 +166,41 @@ public class AltosKML implements AltosWriter {
started = true;
gps_start_altitude = gps.alt;
}
- if (prev != null && prev.gps_sequence == state.gps_sequence)
- return;
- if (state.state() != flight_state) {
- flight_state = state.state();
+ if (state != flight_state) {
+ flight_state = state;
if (prev != null) {
- coord(state);
- state_end(prev);
+// coord(gps, state, height);
+ state_end();
}
state_start(state);
}
- coord(state);
- prev = state;
+// coord(0, gps, state, height);
+ prev = gps;
+ }
+
+ private int state(AltosFlightSeries series, double time) {
+ int s = AltosLib.MISSING;
+ for (AltosTimeValue state : series.state_series) {
+ if (state.time > time)
+ break;
+ s = (int) state.value;
+ }
+ return s;
+ }
+
+ private double height(AltosFlightSeries series, double time) {
+ double h = AltosLib.MISSING;
+ for (AltosTimeValue height : series.height_series) {
+ if (height.time > time)
+ break;
+ h = height.value;
+ }
+ return h;
}
- public void write(AltosStateIterable states) {
- for (AltosState state : states) {
- if ((state.set & AltosState.set_gps) != 0)
- write(state);
+ public void write(AltosFlightSeries series) {
+ for (AltosGPSTimeValue gps : series.gps_series) {
+ write(gps.gps, state(series, gps.time), height(series, gps.time));
}
}