diff --git a/import_osm/src/main.rs b/import_osm/src/main.rs index 8d97b2c..1106ab1 100644 --- a/import_osm/src/main.rs +++ b/import_osm/src/main.rs @@ -96,10 +96,7 @@ fn process_osm R + 'static + Send + Clone, R: Send + 's match f.seek(SeekFrom::Current(0)) { Ok(pos) => { let rate = pos as f64 / 1024f64 / 1024f64 / duration; - progress.set_message(format!( - "Processed {} MB in {:.2} seconds ({:.2} MB/s)", - pos / 1024 / 1024, duration, rate - )); + progress.set_message(format!("{:.2} MB/s", rate)); }, Err(_) => (), } @@ -200,17 +197,20 @@ fn main() { } } } + println!("{} ways", way_paths.len()); let way_paths = Arc::new(way_paths); // phase 3: rels + let mut multipoly_count = 0; for arg in args().skip(1) { let way_paths = way_paths.clone(); - process_osm(&arg, move |prim_src| { + multipoly_count += process_osm(&arg, move |prim_src| { const DB_URL: &str = "host=10.233.1.2 dbname=treeadvisor user=treeadvisor password=123"; let mut db = postgres::Client::connect(DB_URL, postgres::NoTls) .expect("DB"); + let mut count = 0; let mut running = true; while running { running = prim_src.recv_primitives(|iter| { @@ -223,6 +223,10 @@ fn main() { let tags: serde_json::Map = rel.tags() .map(|(k, v)| (k.to_string(), serde_json::Value::String(v.to_string()))) .collect(); + if tags.get("type").and_then(|val| val.as_str()) == Some("multipolygon") { + continue; + } + let get_members = |target_role| rel.members() .filter_map(|(role, id, member_type)| { if member_type == RelationMemberType::Way && role == target_role { @@ -260,6 +264,8 @@ fn main() { &[&(rel.id as i64), &(member_id as i64), &path] ).unwrap(); } + + count += 1; } } } @@ -269,6 +275,9 @@ fn main() { true }).unwrap_or(false); } - }); + + count + }).iter().sum::(); } + println!("{} multipolygons", multipoly_count); }