|
|
@@ -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(),
|
|
|
_ => ()
|
|
|
}
|
|
|
}
|