Browse Source

Cleanup and elevation support

Johann Woelper 8 years ago
parent
commit
54eab319a8
1 changed files with 12 additions and 5 deletions
  1. 12 5
      src/main.rs

+ 12 - 5
src/main.rs

@@ -88,6 +88,7 @@ impl Track {
                 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()));
+                pt_elem.push_attribute(("ele", pt.ele.to_string().as_str()));
                 assert!(writer.write_event(Event::Start(pt_elem)).is_ok());
                 assert!(writer.write_event(Event::End(BytesEnd::borrowed(b"trkpt"))).is_ok());
 
@@ -99,7 +100,7 @@ impl Track {
 
 
         let result = writer.into_inner().into_inner();
-        println!("{:?}", str::from_utf8( &result).unwrap());
+        // println!("{:?}", str::from_utf8( &result).unwrap());
 
         write_bytes(result, "track.gpx".to_string());
         
@@ -130,6 +131,11 @@ impl Track {
 
     fn parse(&mut self) {
 
+        // how far to average the track together
+        let sample_distance = 0.1;
+        // This is where a track is considered bad = min_speed_factor * your average over sample_distance
+        let min_speed_factor = 0.6;
+
         let global_average_speed = self.speed();
 
         let mut fifo_track = Track {
@@ -149,9 +155,9 @@ impl Track {
             // i = i + 1; if i > 30 {break};
             fifo_track.points.push(pt.clone());
             analyzed_track.points.push(pt.clone());
-            fifo_track.truncate_by_length(0.1);
+            fifo_track.truncate_by_length(sample_distance);
             let speed = fifo_track.speed();
-            if speed < global_average_speed*0.6 {
+            if speed < global_average_speed * min_speed_factor {
                 bad_track.points.push(pt.clone());
                 // println!("Track seems bad @ Km {:.1} {:.2} Km/h", analyzed_track.len(), speed);
             }
@@ -190,14 +196,14 @@ fn write_bytes(bytes_to_write: Vec<u8>, filename: String) {
         Err(why) => {
             panic!("couldn't write to {}", display)
         },
-        Ok(_) => println!("successfully wrote to {}", display),
+        Ok(_) => (println!("Wrote header -> {}", display)),
     }
 
     match file.write_all(&bytes_to_write) {
         Err(why) => {
             panic!("couldn't write to {}", display)
         },
-        Ok(_) => println!("successfully wrote to {}", display),
+        Ok(_) => println!("Wrote data -> {}", display),
     }
 }
 
@@ -233,6 +239,7 @@ fn main() {
                             match key.as_str() {
                                 "lat" => current_point.lat = value.parse().unwrap(),
                                 "lon" => current_point.long = value.parse().unwrap(),
+                                "ele" => current_point.ele = value.parse().unwrap(),
                                 _ => ()
                                 }
                         }