Explorar o código

Track segmentation

Johann Woelper %!s(int64=8) %!d(string=hai) anos
pai
achega
97e2d0e7b9
Modificáronse 1 ficheiros con 18 adicións e 7 borrados
  1. 18 7
      src/main.rs

+ 18 - 7
src/main.rs

@@ -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);
             }