From f806cc90237cda8cfb7cc84899814178be4b283a Mon Sep 17 00:00:00 2001 From: sdirollo Date: Thu, 25 Jan 2024 15:25:28 +0100 Subject: [PATCH] add bbox for capital node --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- cosmogony/Cargo.toml | 2 +- src/additional_zones.rs | 13 +++++++------ src/lib.rs | 12 ++++++++++++ 5 files changed, 23 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cc21908..c99842f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -201,7 +201,7 @@ checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "cosmogony" -version = "0.14.4" +version = "0.14.5" dependencies = [ "anyhow", "flate2", @@ -216,7 +216,7 @@ dependencies = [ [[package]] name = "cosmogony_builder" -version = "0.14.4" +version = "0.14.5" dependencies = [ "anyhow", "approx", diff --git a/Cargo.toml b/Cargo.toml index 29203f8..8c46dab 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmogony_builder" -version = "0.14.4" +version = "0.14.5" authors = ["Adrien Matissart ", "Antoine Desbordes "] license = "Apache-2.0" repository = "https://github.com/osm-without-borders/cosmogony" diff --git a/cosmogony/Cargo.toml b/cosmogony/Cargo.toml index c0da6e6..ddc4786 100644 --- a/cosmogony/Cargo.toml +++ b/cosmogony/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmogony" -version = "0.14.4" +version = "0.14.5" authors = ["Adrien Matissart ", "Antoine Desbordes "] license = "Apache-2.0" repository = "https://github.com/osm-without-borders/cosmogony" diff --git a/src/additional_zones.rs b/src/additional_zones.rs index 590a45b..3b115d9 100644 --- a/src/additional_zones.rs +++ b/src/additional_zones.rs @@ -1,5 +1,5 @@ use crate::hierarchy_builder::ZonesTree; -use crate::is_place; +use crate::is_additional_place; use crate::zone_ext::ZoneExt; use anyhow::{Context, Result}; use cosmogony::{Zone, ZoneIndex, ZoneType}; @@ -46,7 +46,8 @@ pub fn compute_additional_places( let candidate_parent_zones = place_zones .par_iter() .filter(|place| { - place.admin_level.is_none() && place.zone_type == Option::from(ZoneType::Suburb) + (place.admin_level.is_none() && place.zone_type == Option::from(ZoneType::Suburb)) + | place.tags.get("capital").map_or(false, |v| v == "yes") }) .filter_map(|place| { place.zone_type?; @@ -56,7 +57,7 @@ pub fn compute_additional_places( (parent.zone_type) .map(|parent_zone| { if parent_zone == ZoneType::Country { - info!( + println!( "Ignoring place with id {} and country {} as parent", place.osm_id, parent.osm_id ); @@ -65,7 +66,7 @@ pub fn compute_additional_places( // Ensuring zones are strictly increasing also ensures there will be no // duplicates, for example by adding an admin label which is inside its // boundary. - parent_zone > place.zone_type.unwrap_or(parent_zone) + parent_zone >= place.zone_type.unwrap_or(parent_zone) && parent_zone < ZoneType::Country }) .unwrap_or(false) @@ -81,7 +82,7 @@ pub fn compute_additional_places( map1 }); - info!( + println!( "We'll compute voronois partitions for {} parent zones", candidate_parent_zones.len() ); @@ -123,7 +124,7 @@ fn read_places(parsed_pbf: &BTreeMap) -> Vec { .values() .enumerate() .filter_map(|(index, obj)| { - if !is_place(obj) { + if !is_additional_place(obj) { return None; } diff --git a/src/lib.rs b/src/lib.rs index c548534..cad6486 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -51,6 +51,18 @@ pub fn is_place(obj: &OsmObj) -> bool { } } +pub fn is_additional_place(obj: &OsmObj) -> bool { + match *obj { + OsmObj::Node(ref node) => { + matches!( + node.tags.get("place").and_then(|s| ZoneType::parse(s)), + Some(ZoneType::City | ZoneType::Suburb) + ) | node.tags.get("capital").map_or(false, |v| v == "yes") + } + _ => false, + } +} + pub fn get_zones_and_stats( pbf: &BTreeMap, ) -> Result<(Vec, CosmogonyStats), Error> {