|
|
@@ -57,12 +57,7 @@ impl Track {
|
|
|
|
|
|
fn to_xml(&self) {
|
|
|
|
|
|
-
|
|
|
- //gpx > trk > trkseg > trkpt
|
|
|
- // let mut writer = Writer::new(Cursor::new(Vec::new()));
|
|
|
- // let indent_char: u8 = " ";
|
|
|
- let mut writer = Writer::new_with_indent(Cursor::new(Vec::new()), 32, 4);
|
|
|
-
|
|
|
+ let mut writer = Writer::new_with_indent(Cursor::new(Vec::new()), 32, 4); //32 is space character
|
|
|
|
|
|
|
|
|
let mut gpx_elem = BytesStart::owned(b"gpx".to_vec(), "gpx".len());
|
|
|
@@ -72,8 +67,24 @@ impl Track {
|
|
|
let trk_elem = BytesStart::owned(b"trk".to_vec(), "trk".len());
|
|
|
assert!(writer.write_event(Event::Start(trk_elem)).is_ok());
|
|
|
|
|
|
+ let mut prev_point = &self.points[0];
|
|
|
+
|
|
|
+ let trkseg_elem = BytesStart::owned(b"trkseg".to_vec(), "trkseg".len());
|
|
|
+ assert!(writer.write_event(Event::Start(trkseg_elem)).is_ok());
|
|
|
|
|
|
for pt in &self.points {
|
|
|
+ //segment detection
|
|
|
+ let d = dist(prev_point, pt);
|
|
|
+ prev_point = pt;
|
|
|
+
|
|
|
+ if d > 0.5 {
|
|
|
+ assert!(writer.write_event(Event::End(BytesEnd::borrowed(b"trkseg"))).is_ok());
|
|
|
+ let trkseg_elem = BytesStart::owned(b"trkseg".to_vec(), "trkseg".len());
|
|
|
+ assert!(writer.write_event(Event::Start(trkseg_elem)).is_ok());
|
|
|
+ } else {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
let mut pt_elem = BytesStart::owned(b"trkpt".to_vec(), "trkpt".len());
|
|
|
pt_elem.push_attribute(("lat", pt.lat.to_string().as_str()));
|
|
|
pt_elem.push_attribute(("lon", pt.long.to_string().as_str()));
|
|
|
@@ -140,7 +151,7 @@ impl Track {
|
|
|
analyzed_track.points.push(pt.clone());
|
|
|
fifo_track.truncate_by_length(0.1);
|
|
|
let speed = fifo_track.speed();
|
|
|
- if speed < global_average_speed*0.4 {
|
|
|
+ if speed < global_average_speed*0.6 {
|
|
|
bad_track.points.push(pt.clone());
|
|
|
// println!("Track seems bad @ Km {:.1} {:.2} Km/h", analyzed_track.len(), speed);
|
|
|
}
|