From ef623fb499e4cc9e159b7f50012f28390bff82f7 Mon Sep 17 00:00:00 2001 From: Dustin Carlino Date: Mon, 26 Sep 2022 12:00:02 +0800 Subject: [PATCH 1/8] WIP: Cache roads per intersection. #93 Broken! --- osm2streets/src/lib.rs | 49 ++++++++++++++++--- .../src/transform/collapse_intersections.rs | 11 +++-- osm2streets/src/transform/merge_short_road.rs | 28 ++++++----- .../src/transform/remove_disconnected.rs | 4 +- osm2streets/src/transform/sausage_links.rs | 2 +- osm2streets/src/transform/snappy.rs | 2 +- streets_reader/src/clip.rs | 12 +++-- streets_reader/src/lib.rs | 2 +- streets_reader/src/split_ways.rs | 2 +- 9 files changed, 76 insertions(+), 36 deletions(-) diff --git a/osm2streets/src/lib.rs b/osm2streets/src/lib.rs index 8a85c069..9215824b 100644 --- a/osm2streets/src/lib.rs +++ b/osm2streets/src/lib.rs @@ -159,15 +159,44 @@ impl StreetNetwork { } } - // TODO Might be better to maintain this instead of doing a search everytime. - pub fn roads_per_intersection(&self, i: osm::NodeID) -> Vec { - let mut results = Vec::new(); - for id in self.roads.keys() { - if id.i1 == i || id.i2 == i { - results.push(*id); + pub fn insert_road(&mut self, id: OriginalRoad, road: Road) { + self.roads.insert(id, road); + // TODO Re-sort + self.intersections.get_mut(&id.i1).unwrap().roads.push(id); + self.intersections.get_mut(&id.i2).unwrap().roads.push(id); + } + + pub fn remove_road(&mut self, id: &OriginalRoad) -> Road { + // TODO Re-sort + self.intersections + .get_mut(&id.i1) + .unwrap() + .roads + .retain(|r| r != id); + self.intersections + .get_mut(&id.i2) + .unwrap() + .roads + .retain(|r| r != id); + self.roads.remove(id).unwrap() + } + + pub fn retain_roads bool>(&mut self, f: F) { + let mut remove = Vec::new(); + for (id, r) in &self.roads { + if !f(id, r) { + remove.push(*id); } } - results + for id in remove { + self.remove_road(&id); + } + } + + // TODO This'll eventually give a response in clockwise order + // TODO Consider not cloning. Many callers will have to change + pub fn roads_per_intersection(&self, i: osm::NodeID) -> Vec { + self.intersections[&i].roads.clone() } pub fn new_osm_node_id(&self, start: i64) -> osm::NodeID { @@ -544,6 +573,11 @@ pub struct Intersection { pub control: ControlType, pub elevation: Distance, + /// All roads connected to this intersection. They may be incoming or outgoing relative to this + /// intersection. + /// TODO: Guarantee they're sorted clockwise + pub roads: Vec, + // true if src_i matches this intersection (or the deleted/consolidated one, whatever) pub trim_roads_for_merging: BTreeMap<(osm::WayID, bool), Pt2D>, } @@ -555,6 +589,7 @@ impl Intersection { complexity, control, // Filled out later + roads: Vec::new(), elevation: Distance::ZERO, trim_roads_for_merging: BTreeMap::new(), } diff --git a/osm2streets/src/transform/collapse_intersections.rs b/osm2streets/src/transform/collapse_intersections.rs index 52fe8f51..40c526f0 100644 --- a/osm2streets/src/transform/collapse_intersections.rs +++ b/osm2streets/src/transform/collapse_intersections.rs @@ -138,6 +138,7 @@ pub fn collapse_intersection(streets: &mut StreetNetwork, i: NodeID) { assert_eq!(roads.len(), 2); let mut r1 = roads[0]; let mut r2 = roads[1]; + assert_ne!(r1, r2); // We'll keep r1's way ID, so it's a little more convenient for debugging to guarantee r1 is // the longer piece. @@ -157,11 +158,11 @@ pub fn collapse_intersection(streets: &mut StreetNetwork, i: NodeID) { } info!("Collapsing degenerate {}", i); - streets.intersections.remove(&i).unwrap(); // We could be more careful merging percent_incline and osm_tags, but in practice, it doesn't // matter for the short segments we're merging. - let mut new_road = streets.roads.remove(&r1).unwrap(); - let mut road2 = streets.roads.remove(&r2).unwrap(); + let mut new_road = streets.remove_road(&r1); + let mut road2 = streets.remove_road(&r2); + streets.intersections.remove(&i).unwrap(); // There are 4 cases, easy to understand on paper. Preserve the original direction of r1 let (new_i1, new_i2) = if r1.i2 == r2.i1 { @@ -195,7 +196,7 @@ pub fn collapse_intersection(streets: &mut StreetNetwork, i: NodeID) { i1: new_i1, i2: new_i2, }; - streets.roads.insert(new_r1, new_road); + streets.insert_road(new_r1, new_road); // We may need to fix up turn restrictions. r1 and r2 both become new_r1. let rewrite = |x: &OriginalRoad| *x == r1 || *x == r2; @@ -242,7 +243,7 @@ pub fn trim_deadends(streets: &mut StreetNetwork) { } for r in remove_roads { - streets.roads.remove(&r).unwrap(); + streets.remove_road(&r); } for i in remove_intersections { streets.delete_intersection(i); diff --git a/osm2streets/src/transform/merge_short_road.rs b/osm2streets/src/transform/merge_short_road.rs index 2c7bb0a1..45860856 100644 --- a/osm2streets/src/transform/merge_short_road.rs +++ b/osm2streets/src/transform/merge_short_road.rs @@ -25,7 +25,7 @@ impl StreetNetwork { if !self.intersections.contains_key(&short.i1) || !self.intersections.contains_key(&short.i2) { - self.roads.remove(&short).unwrap(); + self.remove_road(&short); bail!( "One endpoint of {} has already been deleted, skipping", short @@ -95,17 +95,10 @@ impl StreetNetwork { .extend(trim_roads_for_merging); } - self.roads.remove(&short).unwrap(); + self.remove_road(&short); - // Arbitrarily keep i1 and destroy i2. If the intersection types differ, upgrade the - // surviving interesting. - { - // Don't use delete_intersection; we're manually fixing up connected roads - let i = self.intersections.remove(&i2).unwrap(); - if i.control == ControlType::TrafficSignal { - self.intersections.get_mut(&i1).unwrap().control = ControlType::TrafficSignal; - } - } + // Arbitrarily keep i1 and destroy i2. Don't actually remove the intersection until later; + // remove_road needs the intersection to exist // Fix up all roads connected to i2. Delete them and create a new copy; the ID changes, // since one intersection changes. @@ -115,7 +108,7 @@ impl StreetNetwork { let mut new_to_old = BTreeMap::new(); for r in self.roads_per_intersection(i2) { deleted.push(r); - let road = self.roads.remove(&r).unwrap(); + let road = self.remove_road(&r); let mut new_id = r; if r.i1 == i2 { new_id.i1 = i1; @@ -133,10 +126,19 @@ impl StreetNetwork { old_to_new.insert(r, new_id); new_to_old.insert(new_id, r); - self.roads.insert(new_id, road); + self.insert_road(new_id, road); created.push(new_id); } + // If the intersection types differ, upgrade the surviving interesting. + { + // Don't use delete_intersection; we're manually fixing up connected roads + let i = self.intersections.remove(&i2).unwrap(); + if i.control == ControlType::TrafficSignal { + self.intersections.get_mut(&i1).unwrap().control = ControlType::TrafficSignal; + } + } + // If we're deleting the target of a simple restriction somewhere, update it. for (from_id, road) in &mut self.roads { let mut fix_trs = Vec::new(); diff --git a/osm2streets/src/transform/remove_disconnected.rs b/osm2streets/src/transform/remove_disconnected.rs index dcaa5f09..a735ca66 100644 --- a/osm2streets/src/transform/remove_disconnected.rs +++ b/osm2streets/src/transform/remove_disconnected.rs @@ -49,7 +49,7 @@ pub fn remove_disconnected_roads(streets: &mut StreetNetwork) { for p in partitions.iter().skip(1) { for id in p { info!("Removing {} because it's disconnected from most roads", id); - streets.roads.remove(id).unwrap(); + streets.remove_road(id); next_roads.remove(id.i1, *id); next_roads.remove(id.i2, *id); } @@ -57,7 +57,7 @@ pub fn remove_disconnected_roads(streets: &mut StreetNetwork) { // Also remove cul-de-sacs here. TODO Support them properly, but for now, they mess up parking // hint matching (loop PolyLine) and pathfinding later. - streets.roads.retain(|id, _| id.i1 != id.i2); + streets.retain_roads(|id, _| id.i1 != id.i2); // Remove intersections without any roads streets diff --git a/osm2streets/src/transform/sausage_links.rs b/osm2streets/src/transform/sausage_links.rs index 0f2fbfa6..8f071ee9 100644 --- a/osm2streets/src/transform/sausage_links.rs +++ b/osm2streets/src/transform/sausage_links.rs @@ -76,7 +76,7 @@ fn fix(streets: &mut StreetNetwork, id1: OriginalRoad, id2: OriginalRoad) { assert!(streets.roads.contains_key(&id2)); // Arbitrarily remove the 2nd - let mut road2 = streets.roads.remove(&id2).unwrap(); + let mut road2 = streets.remove_road(&id2); // And modify the 1st let road1 = streets.roads.get_mut(&id1).unwrap(); diff --git a/osm2streets/src/transform/snappy.rs b/osm2streets/src/transform/snappy.rs index b9a1f974..800c7255 100644 --- a/osm2streets/src/transform/snappy.rs +++ b/osm2streets/src/transform/snappy.rs @@ -52,7 +52,7 @@ pub fn snap_cycleways(streets: &mut StreetNetwork) { snapped_ids.push(cycleway_id); // Remove the separate cycleway - let deleted_cycleway = streets.roads.remove(&cycleway_id).unwrap(); + let deleted_cycleway = streets.remove_road(&cycleway_id); // Add it as an attribute to the roads instead for (road_id, dir) in roads { diff --git a/streets_reader/src/clip.rs b/streets_reader/src/clip.rs index 53c09325..3bd8c3dd 100644 --- a/streets_reader/src/clip.rs +++ b/streets_reader/src/clip.rs @@ -15,7 +15,7 @@ pub fn clip_map(streets: &mut StreetNetwork, timer: &mut Timer) -> Result<()> { // This is kind of indirect and slow, but first pass -- just remove roads that start or end // outside the boundary polygon. - streets.roads.retain(|_, r| { + streets.retain_roads(|_, r| { let first_in = boundary_polygon.contains_pt(r.osm_center_points[0]); let last_in = boundary_polygon.contains_pt(*r.osm_center_points.last().unwrap()); let light_rail_ok = if r.is_light_rail() { @@ -63,12 +63,13 @@ pub fn clip_map(streets: &mut StreetNetwork, timer: &mut Timer) -> Result<()> { info!("Disconnecting {} from some other stuff (starting OOB)", id); } + let mut mut_r = streets.remove_road(&id); + let i = streets.intersections.get_mut(&move_i).unwrap(); i.complexity = IntersectionComplexity::MapEdge; i.control = ControlType::Border; // Now trim it. - let mut mut_r = streets.roads.remove(&id).unwrap(); let center = PolyLine::must_new(mut_r.osm_center_points.clone()); let border_pt = boundary_ring.all_intersections(¢er)[0]; if let Some(pl) = center.reversed().get_slice_ending_at(border_pt) { @@ -78,7 +79,7 @@ pub fn clip_map(streets: &mut StreetNetwork, timer: &mut Timer) -> Result<()> { continue; } i.point = mut_r.osm_center_points[0]; - streets.roads.insert( + streets.insert_road( OriginalRoad { osm_way_id: id.osm_way_id, i1: move_i, @@ -120,12 +121,13 @@ pub fn clip_map(streets: &mut StreetNetwork, timer: &mut Timer) -> Result<()> { info!("Disconnecting {} from some other stuff (ending OOB)", id); } + let mut mut_r = streets.remove_road(&id); + let i = streets.intersections.get_mut(&move_i).unwrap(); i.complexity = IntersectionComplexity::MapEdge; i.control = ControlType::Border; // Now trim it. - let mut mut_r = streets.roads.remove(&id).unwrap(); let center = PolyLine::must_new(mut_r.osm_center_points.clone()); let border_pt = boundary_ring.all_intersections(¢er.reversed())[0]; if let Some(pl) = center.get_slice_ending_at(border_pt) { @@ -135,7 +137,7 @@ pub fn clip_map(streets: &mut StreetNetwork, timer: &mut Timer) -> Result<()> { continue; } i.point = *mut_r.osm_center_points.last().unwrap(); - streets.roads.insert( + streets.insert_road( OriginalRoad { osm_way_id: id.osm_way_id, i1: id.i1, diff --git a/streets_reader/src/lib.rs b/streets_reader/src/lib.rs index 4cda6c6c..b426aa96 100644 --- a/streets_reader/src/lib.rs +++ b/streets_reader/src/lib.rs @@ -115,7 +115,7 @@ pub fn osm_to_street_network( // Need to do a first pass of removing cul-de-sacs here, or we wind up with loop PolyLines when // doing the parking hint matching. - streets.roads.retain(|r, _| r.i1 != r.i2); + streets.retain_roads(|r, _| r.i1 != r.i2); use_barrier_nodes( &mut streets, diff --git a/streets_reader/src/split_ways.rs b/streets_reader/src/split_ways.rs index ca6bf801..765b7082 100644 --- a/streets_reader/src/split_ways.rs +++ b/streets_reader/src/split_ways.rs @@ -128,7 +128,7 @@ pub fn split_up_roads( let osm_center_pts = simplify_linestring(std::mem::take(&mut pts)); match Road::new(osm_center_pts, tags, &streets.config) { Ok(road) => { - streets.roads.insert(id, road); + streets.insert_road(id, road); } Err(err) => { error!("Skipping {id}: {err}"); From e91e94b796ce665afd445abb2b3e9e5c58a11ba8 Mon Sep 17 00:00:00 2001 From: Dustin Carlino Date: Fri, 30 Sep 2022 13:16:03 +0800 Subject: [PATCH 2/8] Fix a bug with caching roads per intersection and clipping. Now just one test fails --- streets_reader/src/clip.rs | 42 ++++++++++++-------------------------- 1 file changed, 13 insertions(+), 29 deletions(-) diff --git a/streets_reader/src/clip.rs b/streets_reader/src/clip.rs index 3bd8c3dd..0569f777 100644 --- a/streets_reader/src/clip.rs +++ b/streets_reader/src/clip.rs @@ -1,9 +1,7 @@ -use std::collections::BTreeMap; - use abstutil::Timer; use anyhow::Result; use geom::PolyLine; -use osm2streets::{osm, ControlType, IntersectionComplexity, OriginalRoad, StreetNetwork}; +use osm2streets::{ControlType, IntersectionComplexity, OriginalRoad, StreetNetwork}; // TODO This needs to update turn restrictions too pub fn clip_map(streets: &mut StreetNetwork, timer: &mut Timer) -> Result<()> { @@ -13,8 +11,8 @@ pub fn clip_map(streets: &mut StreetNetwork, timer: &mut Timer) -> Result<()> { let boundary_polygon = streets.boundary_polygon.clone(); let boundary_ring = boundary_polygon.get_outer_ring(); - // This is kind of indirect and slow, but first pass -- just remove roads that start or end - // outside the boundary polygon. + // This is kind of indirect and slow, but first pass -- just remove roads that both start and + // end outside the boundary polygon. streets.retain_roads(|_, r| { let first_in = boundary_polygon.contains_pt(r.osm_center_points[0]); let last_in = boundary_polygon.contains_pt(*r.osm_center_points.last().unwrap()); @@ -29,10 +27,6 @@ pub fn clip_map(streets: &mut StreetNetwork, timer: &mut Timer) -> Result<()> { first_in || last_in || light_rail_ok }); - // When we split an intersection out of bounds into two, one of them gets a new ID. Remember - // that here. - let mut extra_borders: BTreeMap = BTreeMap::new(); - // First pass: Clip roads beginning out of bounds let road_ids: Vec = streets.roads.keys().cloned().collect(); for id in road_ids { @@ -42,23 +36,20 @@ pub fn clip_map(streets: &mut StreetNetwork, timer: &mut Timer) -> Result<()> { } let mut move_i = id.i1; - let orig_id = id.i1; // The road crosses the boundary. If the intersection happens to have another connected // road, then we need to copy the intersection before trimming it. This effectively // disconnects two roads in the map that would be connected if we left in some // partly-out-of-bounds road. - if streets - .roads - .keys() - .filter(|r2| r2.i1 == move_i || r2.i2 == move_i) - .count() - > 1 - { - let copy = streets.intersections[&move_i].clone(); + if streets.intersections[&move_i].roads.len() > 1 { + let mut copy = streets.intersections[&move_i].clone(); // Don't conflict with OSM IDs move_i = streets.new_osm_node_id(-1); - extra_borders.insert(orig_id, move_i); + + // TODO Do we have to fix up the other roads connected to the old intersection? A later + // pass should handle them, because they'll also start or end OOB + copy.roads.retain(|r| *r != id); + streets.intersections.insert(move_i, copy); info!("Disconnecting {} from some other stuff (starting OOB)", id); } @@ -101,22 +92,15 @@ pub fn clip_map(streets: &mut StreetNetwork, timer: &mut Timer) -> Result<()> { } let mut move_i = id.i2; - let orig_id = id.i2; // The road crosses the boundary. If the intersection happens to have another connected // road, then we need to copy the intersection before trimming it. This effectively // disconnects two roads in the map that would be connected if we left in some // partly-out-of-bounds road. - if streets - .roads - .keys() - .filter(|r2| r2.i1 == move_i || r2.i2 == move_i) - .count() - > 1 - { - let copy = streets.intersections[&move_i].clone(); + if streets.intersections[&move_i].roads.len() > 1 { + let mut copy = streets.intersections[&move_i].clone(); move_i = streets.new_osm_node_id(-1); - extra_borders.insert(orig_id, move_i); + copy.roads.retain(|r| *r != id); streets.intersections.insert(move_i, copy); info!("Disconnecting {} from some other stuff (ending OOB)", id); } From f4b5f67ac148362e55d20fa3c9f2e6441bfda70b Mon Sep 17 00:00:00 2001 From: Dustin Carlino Date: Fri, 30 Sep 2022 14:06:23 +0800 Subject: [PATCH 3/8] Rewrite the clipping logic entirely to manage road IDs more sanely. No more crashes, but lots of test diffs. From a quick spot check, no visible difference, but will dig in later. --- streets_reader/src/clip.rs | 163 ++++++++++++++++--------------------- 1 file changed, 70 insertions(+), 93 deletions(-) diff --git a/streets_reader/src/clip.rs b/streets_reader/src/clip.rs index 0569f777..dddee283 100644 --- a/streets_reader/src/clip.rs +++ b/streets_reader/src/clip.rs @@ -1,7 +1,7 @@ use abstutil::Timer; use anyhow::Result; use geom::PolyLine; -use osm2streets::{ControlType, IntersectionComplexity, OriginalRoad, StreetNetwork}; +use osm2streets::{osm, ControlType, IntersectionComplexity, StreetNetwork}; // TODO This needs to update turn restrictions too pub fn clip_map(streets: &mut StreetNetwork, timer: &mut Timer) -> Result<()> { @@ -11,8 +11,7 @@ pub fn clip_map(streets: &mut StreetNetwork, timer: &mut Timer) -> Result<()> { let boundary_polygon = streets.boundary_polygon.clone(); let boundary_ring = boundary_polygon.get_outer_ring(); - // This is kind of indirect and slow, but first pass -- just remove roads that both start and - // end outside the boundary polygon. + // First, just remove roads that both start and end outside the boundary polygon. streets.retain_roads(|_, r| { let first_in = boundary_polygon.contains_pt(r.osm_center_points[0]); let last_in = boundary_polygon.contains_pt(*r.osm_center_points.last().unwrap()); @@ -27,108 +26,86 @@ pub fn clip_map(streets: &mut StreetNetwork, timer: &mut Timer) -> Result<()> { first_in || last_in || light_rail_ok }); - // First pass: Clip roads beginning out of bounds - let road_ids: Vec = streets.roads.keys().cloned().collect(); - for id in road_ids { - let r = &streets.roads[&id]; - if streets.boundary_polygon.contains_pt(r.osm_center_points[0]) { + // Get rid of orphaned intersections too + streets.intersections.retain(|_, i| !i.roads.is_empty()); + + // Look for intersections outside the map. If they happen to be connected to multiple roads, + // then we'll need to copy the intersection for each connecting road. This effectively + // disconnects two roads in the map that would be connected if we left in some + // partly-out-of-bounds road. + // + // Do this in one step, since we have to fix up road IDs carefully. The order of steps in here + // is a bit sensitive (because remove_road needs both intersections to exist, and due to the + // borrow checker). + let intersection_ids: Vec = streets.intersections.keys().cloned().collect(); + for id in intersection_ids { + let intersection = &streets.intersections[&id]; + if streets.boundary_polygon.contains_pt(intersection.point) { continue; } - let mut move_i = id.i1; - - // The road crosses the boundary. If the intersection happens to have another connected - // road, then we need to copy the intersection before trimming it. This effectively - // disconnects two roads in the map that would be connected if we left in some - // partly-out-of-bounds road. - if streets.intersections[&move_i].roads.len() > 1 { - let mut copy = streets.intersections[&move_i].clone(); - // Don't conflict with OSM IDs - move_i = streets.new_osm_node_id(-1); - - // TODO Do we have to fix up the other roads connected to the old intersection? A later - // pass should handle them, because they'll also start or end OOB - copy.roads.retain(|r| *r != id); - - streets.intersections.insert(move_i, copy); - info!("Disconnecting {} from some other stuff (starting OOB)", id); + let mut intersection = streets.intersections.get_mut(&id).unwrap(); + intersection.complexity = IntersectionComplexity::MapEdge; + intersection.control = ControlType::Border; + + if intersection.roads.len() > 1 { + for r in intersection.roads.clone() { + let road = streets.remove_road(&r); + + let mut copy = streets.intersections[&id].clone(); + copy.roads.clear(); + + let new_id = streets.new_osm_node_id(-1); + let mut fixed_road_id = r; + if fixed_road_id.i1 == id { + fixed_road_id.i1 = new_id; + } + if fixed_road_id.i2 == id { + fixed_road_id.i2 = new_id; + } + assert_ne!(r, fixed_road_id); + + streets.intersections.insert(new_id, copy); + streets.insert_road(fixed_road_id, road); + } + + assert!(streets.intersections[&id].roads.is_empty()); + streets.intersections.remove(&id).unwrap(); } - - let mut mut_r = streets.remove_road(&id); - - let i = streets.intersections.get_mut(&move_i).unwrap(); - i.complexity = IntersectionComplexity::MapEdge; - i.control = ControlType::Border; - - // Now trim it. - let center = PolyLine::must_new(mut_r.osm_center_points.clone()); - let border_pt = boundary_ring.all_intersections(¢er)[0]; - if let Some(pl) = center.reversed().get_slice_ending_at(border_pt) { - mut_r.osm_center_points = pl.reversed().into_points(); - } else { - warn!("{} interacts with border strangely", id); - continue; - } - i.point = mut_r.osm_center_points[0]; - streets.insert_road( - OriginalRoad { - osm_way_id: id.osm_way_id, - i1: move_i, - i2: id.i2, - }, - mut_r, - ); } - // Second pass: clip roads ending out of bounds - let road_ids: Vec = streets.roads.keys().cloned().collect(); - for id in road_ids { - let r = &streets.roads[&id]; - if streets - .boundary_polygon - .contains_pt(*r.osm_center_points.last().unwrap()) - { + // Now for all of the border intersections, find the one road they connect to and trim their + // points. + for (i, intersection) in &mut streets.intersections { + if intersection.control != ControlType::Border { continue; } + assert_eq!(intersection.roads.len(), 1); + let r = intersection.roads[0]; - let mut move_i = id.i2; - - // The road crosses the boundary. If the intersection happens to have another connected - // road, then we need to copy the intersection before trimming it. This effectively - // disconnects two roads in the map that would be connected if we left in some - // partly-out-of-bounds road. - if streets.intersections[&move_i].roads.len() > 1 { - let mut copy = streets.intersections[&move_i].clone(); - move_i = streets.new_osm_node_id(-1); - copy.roads.retain(|r| *r != id); - streets.intersections.insert(move_i, copy); - info!("Disconnecting {} from some other stuff (ending OOB)", id); - } - - let mut mut_r = streets.remove_road(&id); - - let i = streets.intersections.get_mut(&move_i).unwrap(); - i.complexity = IntersectionComplexity::MapEdge; - i.control = ControlType::Border; + let road = streets.roads.get_mut(&r).unwrap(); + let center = PolyLine::must_new(road.osm_center_points.clone()); + let border_pt = boundary_ring.all_intersections(¢er)[0]; - // Now trim it. - let center = PolyLine::must_new(mut_r.osm_center_points.clone()); - let border_pt = boundary_ring.all_intersections(¢er.reversed())[0]; - if let Some(pl) = center.get_slice_ending_at(border_pt) { - mut_r.osm_center_points = pl.into_points(); + if r.i1 == *i { + // Starting out-of-bounds + if let Some(pl) = center.get_slice_starting_at(border_pt) { + road.osm_center_points = pl.into_points(); + intersection.point = road.osm_center_points[0]; + } else { + warn!("{} interacts with border strangely", r); + continue; + } } else { - warn!("{} interacts with border strangely", id); - continue; + // Ending out-of-bounds + if let Some(pl) = center.get_slice_ending_at(border_pt) { + road.osm_center_points = pl.into_points(); + intersection.point = *road.osm_center_points.last().unwrap(); + } else { + warn!("{} interacts with border strangely", r); + continue; + } } - i.point = *mut_r.osm_center_points.last().unwrap(); - streets.insert_road( - OriginalRoad { - osm_way_id: id.osm_way_id, - i1: id.i1, - i2: move_i, - }, - mut_r, - ); } if streets.roads.is_empty() { From 9cb16796386c35e472eb04e0b223ebdb2ae0f16d Mon Sep 17 00:00:00 2001 From: Dustin Carlino Date: Fri, 30 Sep 2022 14:08:40 +0800 Subject: [PATCH 4/8] Get rid of the over-complicated new_osm_node_id method; there's only one use right now, in clip If later transformations need something like this, we could reintroduce. But I suspect we'd always just re-use a real OSM ID from something being merged / transformed. --- osm2streets/src/lib.rs | 13 ------------- streets_reader/src/clip.rs | 7 ++++++- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/osm2streets/src/lib.rs b/osm2streets/src/lib.rs index 9215824b..40caab57 100644 --- a/osm2streets/src/lib.rs +++ b/osm2streets/src/lib.rs @@ -199,19 +199,6 @@ impl StreetNetwork { self.intersections[&i].roads.clone() } - pub fn new_osm_node_id(&self, start: i64) -> osm::NodeID { - assert!(start < 0); - // Slow, but deterministic. - let mut osm_node_id = start; - loop { - if self.intersections.keys().any(|i| i.0 == osm_node_id) { - osm_node_id -= 1; - } else { - return osm::NodeID(osm_node_id); - } - } - } - /// (Intersection polygon, polygons for roads, list of labeled polygons to debug) #[allow(clippy::type_complexity)] pub fn preview_intersection( diff --git a/streets_reader/src/clip.rs b/streets_reader/src/clip.rs index dddee283..c18cec50 100644 --- a/streets_reader/src/clip.rs +++ b/streets_reader/src/clip.rs @@ -38,6 +38,10 @@ pub fn clip_map(streets: &mut StreetNetwork, timer: &mut Timer) -> Result<()> { // is a bit sensitive (because remove_road needs both intersections to exist, and due to the // borrow checker). let intersection_ids: Vec = streets.intersections.keys().cloned().collect(); + + // Use negative values to avoid conflicting with OSM + let mut next_osm_id = -1; + for id in intersection_ids { let intersection = &streets.intersections[&id]; if streets.boundary_polygon.contains_pt(intersection.point) { @@ -55,7 +59,8 @@ pub fn clip_map(streets: &mut StreetNetwork, timer: &mut Timer) -> Result<()> { let mut copy = streets.intersections[&id].clone(); copy.roads.clear(); - let new_id = streets.new_osm_node_id(-1); + let new_id = osm::NodeID(next_osm_id); + next_osm_id -= 1; let mut fixed_road_id = r; if fixed_road_id.i1 == id { fixed_road_id.i1 = new_id; From b16ca5483c09ebee882d73c6ac1386b59fa329a2 Mon Sep 17 00:00:00 2001 From: Dustin Carlino Date: Fri, 30 Sep 2022 14:55:16 +0800 Subject: [PATCH 5/8] Start debugging the road sort order in the UI --- osm2streets-js/src/lib.rs | 7 +++++++ osm2streets/src/render.rs | 29 +++++++++++++++++++++++++++++ street-explorer/www/js/main.js | 13 +++++++++++-- 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/osm2streets-js/src/lib.rs b/osm2streets-js/src/lib.rs index 7913d22e..43f90c0a 100644 --- a/osm2streets-js/src/lib.rs +++ b/osm2streets-js/src/lib.rs @@ -96,6 +96,13 @@ impl JsStreetNetwork { .map(|x| JsValue::from(JsDebugStreets { inner: x.clone() })) .collect() } + + #[wasm_bindgen(js_name = debugClockwiseOrderingGeojson)] + pub fn debug_clockwise_ordering_geojson(&self) -> String { + self.inner + .debug_clockwise_ordering_geojson(&mut Timer::throwaway()) + .unwrap() + } } #[wasm_bindgen] diff --git a/osm2streets/src/render.rs b/osm2streets/src/render.rs index 3af026a0..466d9529 100644 --- a/osm2streets/src/render.rs +++ b/osm2streets/src/render.rs @@ -223,6 +223,35 @@ impl StreetNetwork { let output = serde_json::to_string_pretty(&obj)?; Ok(output) } + + /// For an intersection, show the clockwise ordering of roads around it + pub fn debug_clockwise_ordering_geojson(&self, timer: &mut Timer) -> Result { + let initial_map = crate::initial::InitialMap::new(self, timer); + + let mut pairs = Vec::new(); + + for (i, intersection) in &self.intersections { + for (idx, r) in intersection.roads.iter().enumerate() { + let pl = &initial_map.roads[r].trimmed_center_pts; + let pt = if r.i1 == *i { + pl.first_pt() + } else { + pl.last_pt() + }; + pairs.push(( + pt.to_geojson(Some(&self.gps_bounds)), + make_props(&[( + "label", + format!("{} / {}", idx + 1, intersection.roads.len()).into(), + )]), + )); + } + } + + let obj = geom::geometries_with_properties_to_geojson(pairs); + let output = serde_json::to_string_pretty(&obj)?; + Ok(output) + } } impl DebugStreets { diff --git a/street-explorer/www/js/main.js b/street-explorer/www/js/main.js index be2fe581..8c620ee6 100644 --- a/street-explorer/www/js/main.js +++ b/street-explorer/www/js/main.js @@ -138,7 +138,8 @@ class TestCase { importButton.innerText = "Importing OSM data..."; - const drivingSide = app.getImportSettings().drivingSideForNewImports || "Right"; + const drivingSide = + app.getImportSettings().drivingSideForNewImports || "Right"; importOSM("Imported area", app, osmInput, drivingSide, true); const bounds = app.layers @@ -196,7 +197,7 @@ function importOSM(groupName, app, osmXML, drivingSide, addOSMLayer) { dual_carriageway_experiment: !!importSettings.dualCarriagewayExperiment, cycletrack_snapping_experiment: !!importSettings.cycletrackSnappingExperiment, - inferred_sidewalks: importSettings.sidewalks === 'infer', + inferred_sidewalks: importSettings.sidewalks === "infer", osm2lanes: !!importSettings.osm2lanes, }); var group = new LayerGroup(groupName, app.map); @@ -212,6 +213,9 @@ function importOSM(groupName, app, osmXML, drivingSide, addOSMLayer) { "Lane markings", makeLaneMarkingsLayer(network.toLaneMarkingsGeojson()) ); + group.addLazyLayer("Debug road ordering", () => + makeDebugLayer(network.debugClockwiseOrderingGeojson()) + ); // TODO Graphviz hits `ReferenceError: can't access lexical declaration 'graph' before initialization` const numDebugSteps = network.getDebugSteps().length; @@ -235,6 +239,11 @@ function importOSM(groupName, app, osmXML, drivingSide, addOSMLayer) { group.addLazyLayer("Lane markings", () => makeLaneMarkingsLayer(step.getNetwork().toLaneMarkingsGeojson()) ); + // TODO Can we disable by default in a group? This one is very noisy, but + // could be useful to inspect + /*group.addLazyLayer("Debug road ordering", () => + makeDebugLayer(step.getNetwork().debugClockwiseOrderingGeojson()) + );*/ const debugGeojson = step.toDebugGeojson(); if (debugGeojson) { From b888748582be8dd5ca50129c2fc4af96ce09ce8f Mon Sep 17 00:00:00 2001 From: Dustin Carlino Date: Fri, 30 Sep 2022 18:13:45 +0800 Subject: [PATCH 6/8] Actually sort roads, copying the approach from the intersection polygon code --- osm2streets/src/lib.rs | 68 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 61 insertions(+), 7 deletions(-) diff --git a/osm2streets/src/lib.rs b/osm2streets/src/lib.rs index 40caab57..f5b666b8 100644 --- a/osm2streets/src/lib.rs +++ b/osm2streets/src/lib.rs @@ -161,13 +161,14 @@ impl StreetNetwork { pub fn insert_road(&mut self, id: OriginalRoad, road: Road) { self.roads.insert(id, road); - // TODO Re-sort - self.intersections.get_mut(&id.i1).unwrap().roads.push(id); - self.intersections.get_mut(&id.i2).unwrap().roads.push(id); + for i in [id.i1, id.i2] { + self.intersections.get_mut(&i).unwrap().roads.push(id); + self.sort_roads(i); + } } pub fn remove_road(&mut self, id: &OriginalRoad) -> Road { - // TODO Re-sort + // Since the roads are already sorted, removing doesn't hurt anything self.intersections .get_mut(&id.i1) .unwrap() @@ -193,7 +194,7 @@ impl StreetNetwork { } } - // TODO This'll eventually give a response in clockwise order + // This always returns roads oriented in clockwise order around the intersection // TODO Consider not cloning. Many callers will have to change pub fn roads_per_intersection(&self, i: osm::NodeID) -> Vec { self.intersections[&i].roads.clone() @@ -302,6 +303,60 @@ impl StreetNetwork { .push((self.roads[&r].untrimmed_road_geometry().0, label.into())); } } + + // Restore the invariant that an intersection's roads are ordered clockwise + // + // TODO This doesn't handle trim_roads_for_merging + fn sort_roads(&mut self, i: osm::NodeID) { + let intersection = self.intersections.get_mut(&i).unwrap(); + + // (ID, polyline pointing to the intersection, sorting point that's filled out later) + let mut road_centers = Vec::new(); + let mut endpoints_for_center = Vec::new(); + for r in &intersection.roads { + let road = &self.roads[r]; + // road.center_pts is unadjusted; it doesn't handle unequal widths yet. But that + // shouldn't matter for sorting. + let center_pl = if r.i1 == i { + PolyLine::must_new(road.osm_center_points.clone()).reversed() + } else if r.i2 == i { + PolyLine::must_new(road.osm_center_points.clone()) + } else { + panic!("Incident road {r} doesn't have an endpoint at {i}"); + }; + endpoints_for_center.push(center_pl.last_pt()); + + road_centers.push((*r, center_pl, Pt2D::zero())); + } + // In most cases, this will just be the same point repeated a few times, so Pt2D::center is a + // no-op. But when we have pretrimmed roads, this is much closer to the real "center" of the + // polygon we're attempting to create. + let intersection_center = Pt2D::center(&endpoints_for_center); + + // Sort the road polylines in clockwise order around the center. This is subtle -- + // https://a-b-street.github.io/docs/tech/map/geometry/index.html#sorting-revisited. When we + // get this wrong, the resulting polygon looks like a "bowtie," because the order of the + // intersection polygon's points follows this clockwise ordering of roads. + // + // We could use the point on each road center line farthest from the intersection center. But + // when some of the roads bend around, this produces incorrect ordering. Try walking along that + // center line a distance equal to the _shortest_ road. + let shortest_center = road_centers + .iter() + .map(|(_, pl, _)| pl.length()) + .min() + .unwrap(); + for (_, pl, sorting_pt) in &mut road_centers { + *sorting_pt = pl.must_dist_along(pl.length() - shortest_center).0; + } + road_centers.sort_by_key(|(_, _, sorting_pt)| { + sorting_pt + .angle_to(intersection_center) + .normalized_degrees() as i64 + }); + + intersection.roads = road_centers.into_iter().map(|(r, _, _)| r).collect(); + } } // Mutations and supporting queries @@ -561,8 +616,7 @@ pub struct Intersection { pub elevation: Distance, /// All roads connected to this intersection. They may be incoming or outgoing relative to this - /// intersection. - /// TODO: Guarantee they're sorted clockwise + /// intersection. They're ordered clockwise aroundd the intersection. pub roads: Vec, // true if src_i matches this intersection (or the deleted/consolidated one, whatever) From 84db6c4e1596d39527c459a10a6b22ecbdc6a2cc Mon Sep 17 00:00:00 2001 From: Dustin Carlino Date: Sat, 1 Oct 2022 12:59:13 +0100 Subject: [PATCH 7/8] Fix a crash in clipping with the northgate test --- streets_reader/src/clip.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/streets_reader/src/clip.rs b/streets_reader/src/clip.rs index c18cec50..d09294eb 100644 --- a/streets_reader/src/clip.rs +++ b/streets_reader/src/clip.rs @@ -90,7 +90,14 @@ pub fn clip_map(streets: &mut StreetNetwork, timer: &mut Timer) -> Result<()> { let road = streets.roads.get_mut(&r).unwrap(); let center = PolyLine::must_new(road.osm_center_points.clone()); - let border_pt = boundary_ring.all_intersections(¢er)[0]; + let border_pts = boundary_ring.all_intersections(¢er); + if border_pts.is_empty() { + // Why wouldn't the road cross the boundary at all, if the intersection was out of + // bounds? Observed for some light rail in the northgate_dual_carriageway test. + warn!("{} interacts with border strangely", r); + continue; + } + let border_pt = border_pts[0]; if r.i1 == *i { // Starting out-of-bounds From e6de03c157bf400e4d8823e9bc6bde7fbe45eb67 Mon Sep 17 00:00:00 2001 From: Dustin Carlino Date: Sat, 1 Oct 2022 13:01:32 +0100 Subject: [PATCH 8/8] Accept changes in tests from #93 --- tests/src/arizona_highways/geometry.json | 196 +- tests/src/arizona_highways/road_network.dot | 217 +- tests/src/aurora_sausage_link/geometry.json | 76 +- .../src/aurora_sausage_link/road_network.dot | 35 +- tests/src/borough_sausage_links/geometry.json | 192 +- .../borough_sausage_links/road_network.dot | 211 +- .../bristol_contraflow_cycleway/geometry.json | 76 +- .../road_network.dot | 109 +- tests/src/i5_exit_ramp/geometry.json | 164 +- tests/src/i5_exit_ramp/road_network.dot | 152 +- tests/src/kingsway_junction/geometry.json | 344 +-- tests/src/kingsway_junction/road_network.dot | 532 +++-- tests/src/leeds_cycleway/geometry.json | 1326 +++++------ tests/src/leeds_cycleway/road_network.dot | 2008 ++++++++--------- .../northgate_dual_carriageway/geometry.json | 250 +- .../road_network.dot | 74 +- .../src/perth_peanut_roundabout/geometry.json | 122 +- .../perth_peanut_roundabout/road_network.dot | 157 +- .../src/roosevelt_cycletrack/road_network.dot | 161 +- tests/src/seattle_triangle/geometry.json | 76 +- tests/src/seattle_triangle/road_network.dot | 75 +- tests/src/service_road_loop/geometry.json | 210 +- tests/src/service_road_loop/road_network.dot | 70 +- tests/src/taipei/geometry.json | 76 +- tests/src/taipei/road_network.dot | 209 +- tests/src/tempe_split/geometry.json | 78 +- tests/src/tempe_split/road_network.dot | 110 +- 27 files changed, 3660 insertions(+), 3646 deletions(-) diff --git a/tests/src/arizona_highways/geometry.json b/tests/src/arizona_highways/geometry.json index 787bdffb..d20704de 100644 --- a/tests/src/arizona_highways/geometry.json +++ b/tests/src/arizona_highways/geometry.json @@ -665,7 +665,7 @@ "type": "Polygon" }, "properties": { - "dst_i": -2, + "dst_i": -1, "osm_way_id": 230614904, "src_i": 2391008617, "type": "road" @@ -1345,7 +1345,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 2391008616, + "dst_i": -2, "osm_way_id": 237881872, "src_i": 2391008592, "type": "road" @@ -2119,7 +2119,7 @@ "properties": { "dst_i": 1950975883, "osm_way_id": 238054792, - "src_i": -1, + "src_i": -4, "type": "road" }, "type": "Feature" @@ -2787,7 +2787,7 @@ "properties": { "dst_i": 1950975923, "osm_way_id": 437325447, - "src_i": 2459207580, + "src_i": -3, "type": "road" }, "type": "Feature" @@ -3841,24 +3841,98 @@ "coordinates": [ [ [ - -111.8910517104967, - 33.62776055038488 + -111.88807112651061, + 33.629727638525225 ], [ - -111.89106236644461, - 33.627759082691874 + -111.88806949560838, + 33.62969224482063 ], [ - -111.89109847850816, - 33.62783772387742 + -111.88817742353342, + 33.629688796821256 ], [ - -111.89109183825194, - 33.627844815928306 + -111.88817905443564, + 33.62972419052585 ], [ - -111.8910517104967, - 33.62776055038488 + -111.88807112651061, + 33.629727638525225 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-4", + "osm_node_id": -4, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -111.88806972674287, + 33.62984136225006 + ], + [ + -111.88807020845306, + 33.629740156183885 + ], + [ + -111.88817821414297, + 33.6297405132146 + ], + [ + -111.88817773243278, + 33.629841719280776 + ], + [ + -111.88806972674287, + 33.62984136225006 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-3", + "osm_node_id": -3, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -111.89101207093205, + 33.62775965555979 + ], + [ + -111.8910464905295, + 33.62776055668013 + ], + [ + -111.89104309587673, + 33.62785044478279 + ], + [ + -111.89100867627927, + 33.62784954366245 + ], + [ + -111.89101207093205, + 33.62775965555979 ] ] ], @@ -3878,24 +3952,24 @@ "coordinates": [ [ [ - -111.88807112651061, - 33.629727638525225 + -111.8910517104967, + 33.62776055038488 ], [ - -111.88806949560838, - 33.62969224482063 + -111.89106236644461, + 33.627759082691874 ], [ - -111.88817742353342, - 33.629688796821256 + -111.89109847850816, + 33.62783772387742 ], [ - -111.88817905443564, - 33.62972419052585 + -111.89109183825194, + 33.627844815928306 ], [ - -111.88807112651061, - 33.629727638525225 + -111.8910517104967, + 33.62776055038488 ] ] ], @@ -5365,43 +5439,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -111.89101207093205, - 33.62775965555979 - ], - [ - -111.8910464905295, - 33.62776055668013 - ], - [ - -111.89104309587673, - 33.62785044478279 - ], - [ - -111.89100867627927, - 33.62784954366245 - ], - [ - -111.89101207093205, - 33.62775965555979 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/2391008616", - "osm_node_id": 2391008616, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ @@ -6122,43 +6159,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -111.88806972674287, - 33.62984136225006 - ], - [ - -111.88807020845306, - 33.629740156183885 - ], - [ - -111.88817821414297, - 33.6297405132146 - ], - [ - -111.88817773243278, - 33.629841719280776 - ], - [ - -111.88806972674287, - 33.62984136225006 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/2459207580", - "osm_node_id": 2459207580, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ diff --git a/tests/src/arizona_highways/road_network.dot b/tests/src/arizona_highways/road_network.dot index bb6e8d3f..8c716811 100644 --- a/tests/src/arizona_highways/road_network.dot +++ b/tests/src/arizona_highways/road_network.dot @@ -1,43 +1,43 @@ digraph { 0 [ label = "MapEdge" ] 1 [ label = "MapEdge" ] - 2 [ label = "Unknown" ] - 3 [ label = "Lights RoadIntersection" ] - 4 [ label = "MapEdge" ] + 2 [ label = "MapEdge" ] + 3 [ label = "MapEdge" ] + 4 [ label = "Lights RoadIntersection" ] 5 [ label = "MapEdge" ] 6 [ label = "MapEdge" ] - 7 [ label = "Lights RoadIntersection" ] - 8 [ label = "MapEdge" ] + 7 [ label = "MapEdge" ] + 8 [ label = "Lights RoadIntersection" ] 9 [ label = "MapEdge" ] - 10 [ label = "Unknown" ] + 10 [ label = "MapEdge" ] 11 [ label = "Unknown" ] 12 [ label = "Unknown" ] - 13 [ label = "MapEdge" ] - 14 [ label = "Unknown" ] + 13 [ label = "Unknown" ] + 14 [ label = "MapEdge" ] 15 [ label = "Unknown" ] 16 [ label = "Unknown" ] - 17 [ label = "Lights RoadIntersection" ] - 18 [ label = "Unknown" ] + 17 [ label = "Unknown" ] + 18 [ label = "Lights RoadIntersection" ] 19 [ label = "Unknown" ] - 20 [ label = "MapEdge" ] + 20 [ label = "Unknown" ] 21 [ label = "MapEdge" ] - 22 [ label = "Unknown" ] - 23 [ label = "MapEdge" ] - 24 [ label = "Unknown" ] - 25 [ label = "MapEdge" ] - 26 [ label = "Unknown" ] + 22 [ label = "MapEdge" ] + 23 [ label = "Unknown" ] + 24 [ label = "MapEdge" ] + 25 [ label = "Unknown" ] + 26 [ label = "MapEdge" ] 27 [ label = "Unknown" ] 28 [ label = "Unknown" ] 29 [ label = "Unknown" ] 30 [ label = "Unknown" ] 31 [ label = "Unknown" ] - 32 [ label = "Lights RoadIntersection" ] + 32 [ label = "Unknown" ] 33 [ label = "Lights RoadIntersection" ] - 34 [ label = "Unknown" ] - 35 [ label = "MapEdge" ] + 34 [ label = "Lights RoadIntersection" ] + 35 [ label = "Unknown" ] 36 [ label = "MapEdge" ] - 37 [ label = "Unknown" ] - 38 [ label = "MapEdge" ] + 37 [ label = "MapEdge" ] + 38 [ label = "Unknown" ] 39 [ label = "Unknown" ] 40 [ label = "Lights RoadIntersection" ] 41 [ label = "Lights RoadIntersection" ] @@ -54,7 +54,7 @@ digraph { 52 [ label = "Unknown" ] 53 [ label = "Unknown" ] 54 [ label = "Unknown" ] - 55 [ label = "MapEdge" ] + 55 [ label = "Unknown" ] 56 [ label = "Unknown" ] 57 [ label = "Unknown" ] 58 [ label = "Unknown" ] @@ -65,114 +65,113 @@ digraph { 63 [ label = "Unknown" ] 64 [ label = "Unknown" ] 65 [ label = "Unknown" ] - 66 [ label = "Unknown" ] - 67 [ label = "MapEdge" ] + 66 [ label = "MapEdge" ] + 67 [ label = "Unknown" ] 68 [ label = "Unknown" ] 69 [ label = "Unknown" ] 70 [ label = "Unknown" ] - 71 [ label = "Unknown" ] - 72 [ label = "Lights RoadIntersection" ] - 73 [ label = "MapEdge" ] + 71 [ label = "Lights RoadIntersection" ] + 72 [ label = "MapEdge" ] + 73 [ label = "Unknown" ] 74 [ label = "Unknown" ] 75 [ label = "Unknown" ] 76 [ label = "Unknown" ] 77 [ label = "Unknown" ] 78 [ label = "Unknown" ] 79 [ label = "Unknown" ] - 80 [ label = "Unknown" ] - 81 [ label = "MapEdge" ] - 14 -> 40 [ label = "3 lanes" ] - 31 -> 34 [ label = "3 lanes" ] - 16 -> 42 [ label = "3 lanes" ] - 19 -> 20 [ label = "5 lanes" ] - 22 -> 16 [ label = "4 lanes" ] - 21 -> 22 [ label = "4 lanes" ] - 24 -> 58 [ label = "4 lanes" ] - 12 -> 13 [ label = "1 lanes" ] - 10 -> 60 [ label = "1 lanes" ] - 23 -> 61 [ label = "5 lanes" ] - 8 -> 56 [ label = "5 lanes" ] - 56 -> 14 [ label = "5 lanes" ] - 31 -> 77 [ label = "6 lanes" ] - 43 -> 29 [ label = "2 lanes" ] - 36 -> 39 [ label = "1 lanes" ] - 39 -> 36 [ label = "1 lanes" ] - 39 -> 0 [ label = "1 lanes" ] - 37 -> 39 [ label = "2 lanes" ] + 80 [ label = "MapEdge" ] + 15 -> 40 [ label = "3 lanes" ] + 32 -> 35 [ label = "3 lanes" ] + 17 -> 42 [ label = "3 lanes" ] + 20 -> 21 [ label = "5 lanes" ] + 23 -> 17 [ label = "4 lanes" ] + 22 -> 23 [ label = "4 lanes" ] + 25 -> 57 [ label = "4 lanes" ] + 13 -> 14 [ label = "1 lanes" ] + 11 -> 59 [ label = "1 lanes" ] + 24 -> 60 [ label = "5 lanes" ] + 9 -> 55 [ label = "5 lanes" ] + 55 -> 15 [ label = "5 lanes" ] + 32 -> 76 [ label = "6 lanes" ] + 43 -> 30 [ label = "2 lanes" ] + 37 -> 39 [ label = "1 lanes" ] + 39 -> 37 [ label = "1 lanes" ] + 39 -> 3 [ label = "1 lanes" ] + 38 -> 39 [ label = "2 lanes" ] 41 -> 40 [ label = "4 lanes" ] 42 -> 52 [ label = "4 lanes" ] - 52 -> 33 [ label = "4 lanes" ] - 32 -> 17 [ label = "4 lanes" ] + 52 -> 34 [ label = "4 lanes" ] + 33 -> 18 [ label = "4 lanes" ] 40 -> 47 [ label = "4 lanes" ] - 47 -> 7 [ label = "4 lanes" ] - 3 -> 41 [ label = "4 lanes" ] - 33 -> 53 [ label = "4 lanes" ] - 53 -> 78 [ label = "4 lanes" ] - 7 -> 46 [ label = "4 lanes" ] - 46 -> 76 [ label = "4 lanes" ] - 17 -> 42 [ label = "4 lanes" ] + 47 -> 8 [ label = "4 lanes" ] + 4 -> 41 [ label = "4 lanes" ] + 34 -> 53 [ label = "4 lanes" ] + 53 -> 77 [ label = "4 lanes" ] + 8 -> 46 [ label = "4 lanes" ] + 46 -> 75 [ label = "4 lanes" ] + 18 -> 42 [ label = "4 lanes" ] 42 -> 51 [ label = "3 lanes" ] 40 -> 48 [ label = "3 lanes" ] - 3 -> 50 [ label = "3 lanes" ] - 32 -> 49 [ label = "3 lanes" ] - 37 -> 38 [ label = "3 lanes" ] - 7 -> 32 [ label = "4 lanes" ] - 33 -> 3 [ label = "3 lanes" ] - 32 -> 18 [ label = "4 lanes" ] + 4 -> 50 [ label = "3 lanes" ] + 33 -> 49 [ label = "3 lanes" ] + 38 -> 2 [ label = "3 lanes" ] + 8 -> 33 [ label = "4 lanes" ] + 34 -> 4 [ label = "3 lanes" ] + 33 -> 19 [ label = "4 lanes" ] 48 -> 50 [ label = "3 lanes" ] 50 -> 51 [ label = "3 lanes" ] 48 -> 41 [ label = "3 lanes" ] - 51 -> 17 [ label = "3 lanes" ] + 51 -> 18 [ label = "3 lanes" ] 49 -> 48 [ label = "3 lanes" ] 51 -> 49 [ label = "3 lanes" ] 50 -> 52 [ label = "3 lanes" ] 49 -> 47 [ label = "3 lanes" ] 45 -> 46 [ label = "2 lanes" ] - 17 -> 18 [ label = "3 lanes" ] - 41 -> 15 [ label = "3 lanes" ] + 18 -> 19 [ label = "3 lanes" ] + 41 -> 16 [ label = "3 lanes" ] 54 -> 53 [ label = "2 lanes" ] - 56 -> 5 [ label = "1 lanes" ] - 5 -> 56 [ label = "1 lanes" ] - 1 -> 28 [ label = "2 lanes" ] - 18 -> 19 [ label = "5 lanes" ] - 4 -> 43 [ label = "4 lanes" ] - 58 -> 71 [ label = "4 lanes" ] - 60 -> 71 [ label = "1 lanes" ] - 61 -> 59 [ label = "4 lanes" ] - 11 -> 25 [ label = "5 lanes" ] - 59 -> 26 [ label = "4 lanes" ] - 61 -> 62 [ label = "1 lanes" ] - 62 -> 12 [ label = "1 lanes" ] - 15 -> 37 [ label = "4 lanes" ] - 14 -> 45 [ label = "4 lanes" ] - 45 -> 7 [ label = "3 lanes" ] - 27 -> 79 [ label = "3 lanes" ] - 16 -> 54 [ label = "4 lanes" ] - 54 -> 33 [ label = "3 lanes" ] - 30 -> 31 [ label = "4 lanes" ] - 55 -> 30 [ label = "5 lanes" ] - 65 -> 35 [ label = "7 lanes" ] - 64 -> 65 [ label = "6 lanes" ] - 63 -> 3 [ label = "6 lanes" ] - 66 -> 28 [ label = "5 lanes" ] - 28 -> 67 [ label = "4 lanes" ] - 68 -> 69 [ label = "1 lanes" ] - 57 -> 70 [ label = "1 lanes" ] - 43 -> 63 [ label = "4 lanes" ] - 26 -> 6 [ label = "4 lanes" ] - 9 -> 24 [ label = "4 lanes" ] - 72 -> 10 [ label = "1 lanes" ] - 73 -> 72 [ label = "2 lanes" ] - 71 -> 11 [ label = "5 lanes" ] - 74 -> 75 [ label = "1 lanes" ] - 76 -> 66 [ label = "4 lanes" ] - 77 -> 32 [ label = "6 lanes" ] - 78 -> 80 [ label = "5 lanes" ] - 80 -> 64 [ label = "5 lanes" ] - 34 -> 18 [ label = "3 lanes" ] - 29 -> 27 [ label = "2 lanes" ] - 80 -> 44 [ label = "1 lanes" ] - 44 -> 80 [ label = "1 lanes" ] - 3 -> 27 [ label = "3 lanes" ] - 79 -> 15 [ label = "2 lanes" ] + 55 -> 6 [ label = "1 lanes" ] + 6 -> 55 [ label = "1 lanes" ] + 0 -> 29 [ label = "2 lanes" ] + 19 -> 20 [ label = "5 lanes" ] + 5 -> 43 [ label = "4 lanes" ] + 57 -> 70 [ label = "4 lanes" ] + 59 -> 70 [ label = "1 lanes" ] + 60 -> 58 [ label = "4 lanes" ] + 12 -> 26 [ label = "5 lanes" ] + 58 -> 27 [ label = "4 lanes" ] + 60 -> 61 [ label = "1 lanes" ] + 61 -> 13 [ label = "1 lanes" ] + 16 -> 38 [ label = "4 lanes" ] + 15 -> 45 [ label = "4 lanes" ] + 45 -> 8 [ label = "3 lanes" ] + 28 -> 78 [ label = "3 lanes" ] + 17 -> 54 [ label = "4 lanes" ] + 54 -> 34 [ label = "3 lanes" ] + 31 -> 32 [ label = "4 lanes" ] + 1 -> 31 [ label = "5 lanes" ] + 64 -> 36 [ label = "7 lanes" ] + 63 -> 64 [ label = "6 lanes" ] + 62 -> 4 [ label = "6 lanes" ] + 65 -> 29 [ label = "5 lanes" ] + 29 -> 66 [ label = "4 lanes" ] + 67 -> 68 [ label = "1 lanes" ] + 56 -> 69 [ label = "1 lanes" ] + 43 -> 62 [ label = "4 lanes" ] + 27 -> 7 [ label = "4 lanes" ] + 10 -> 25 [ label = "4 lanes" ] + 71 -> 11 [ label = "1 lanes" ] + 72 -> 71 [ label = "2 lanes" ] + 70 -> 12 [ label = "5 lanes" ] + 73 -> 74 [ label = "1 lanes" ] + 75 -> 65 [ label = "4 lanes" ] + 76 -> 33 [ label = "6 lanes" ] + 77 -> 79 [ label = "5 lanes" ] + 79 -> 63 [ label = "5 lanes" ] + 35 -> 19 [ label = "3 lanes" ] + 30 -> 28 [ label = "2 lanes" ] + 79 -> 44 [ label = "1 lanes" ] + 44 -> 79 [ label = "1 lanes" ] + 4 -> 28 [ label = "3 lanes" ] + 78 -> 16 [ label = "2 lanes" ] } diff --git a/tests/src/aurora_sausage_link/geometry.json b/tests/src/aurora_sausage_link/geometry.json index 59d2158a..0fd0bcf7 100644 --- a/tests/src/aurora_sausage_link/geometry.json +++ b/tests/src/aurora_sausage_link/geometry.json @@ -29,7 +29,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 9580500970, + "dst_i": -1, "osm_way_id": 36954059, "src_i": 429692074, "type": "road" @@ -392,6 +392,43 @@ }, "type": "Feature" }, + { + "geometry": { + "coordinates": [ + [ + [ + -122.34427057213131, + 47.69241748991538 + ], + [ + -122.34427178793308, + 47.69234665756286 + ], + [ + -122.34438868393406, + 47.692347566776796 + ], + [ + -122.34438746813227, + 47.692418399129316 + ], + [ + -122.34427057213131, + 47.69241748991538 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-1", + "osm_node_id": -1, + "type": "intersection" + }, + "type": "Feature" + }, { "geometry": { "coordinates": [ @@ -748,43 +785,6 @@ "type": "intersection" }, "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - [ - [ - -122.34427057213131, - 47.69241748991538 - ], - [ - -122.34427178793308, - 47.69234665756286 - ], - [ - -122.34438868393406, - 47.692347566776796 - ], - [ - -122.34438746813227, - 47.692418399129316 - ], - [ - -122.34427057213131, - 47.69241748991538 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/9580500970", - "osm_node_id": 9580500970, - "type": "intersection" - }, - "type": "Feature" } ], "type": "FeatureCollection" diff --git a/tests/src/aurora_sausage_link/road_network.dot b/tests/src/aurora_sausage_link/road_network.dot index ab2caa0d..7a148ddc 100644 --- a/tests/src/aurora_sausage_link/road_network.dot +++ b/tests/src/aurora_sausage_link/road_network.dot @@ -1,30 +1,29 @@ digraph { 0 [ label = "MapEdge" ] - 1 [ label = "Unknown" ] - 2 [ label = "MapEdge" ] - 3 [ label = "Unknown" ] - 4 [ label = "MapEdge" ] - 5 [ label = "Unknown" ] + 1 [ label = "MapEdge" ] + 2 [ label = "Unknown" ] + 3 [ label = "MapEdge" ] + 4 [ label = "Unknown" ] + 5 [ label = "MapEdge" ] 6 [ label = "MapEdge" ] 7 [ label = "Unknown" ] 8 [ label = "Unknown" ] 9 [ label = "Unknown" ] 10 [ label = "MapEdge" ] - 11 [ label = "MapEdge" ] - 3 -> 11 [ label = "2 lanes" ] - 11 -> 3 [ label = "2 lanes" ] - 7 -> 4 [ label = "3 lanes" ] - 4 -> 7 [ label = "4 lanes" ] - 2 -> 3 [ label = "3 lanes" ] - 3 -> 2 [ label = "4 lanes" ] + 4 -> 1 [ label = "2 lanes" ] + 1 -> 4 [ label = "2 lanes" ] + 7 -> 5 [ label = "3 lanes" ] + 5 -> 7 [ label = "4 lanes" ] + 3 -> 4 [ label = "3 lanes" ] + 4 -> 3 [ label = "4 lanes" ] 9 -> 6 [ label = "1 lanes" ] 6 -> 9 [ label = "1 lanes" ] - 1 -> 7 [ label = "3 lanes" ] - 8 -> 1 [ label = "3 lanes" ] + 2 -> 7 [ label = "3 lanes" ] + 8 -> 2 [ label = "3 lanes" ] 7 -> 9 [ label = "3 lanes" ] 9 -> 8 [ label = "3 lanes" ] - 3 -> 8 [ label = "3 lanes" ] - 8 -> 3 [ label = "4 lanes" ] - 10 -> 1 [ label = "2 lanes" ] - 1 -> 10 [ label = "2 lanes" ] + 4 -> 8 [ label = "3 lanes" ] + 8 -> 4 [ label = "4 lanes" ] + 10 -> 2 [ label = "2 lanes" ] + 2 -> 10 [ label = "2 lanes" ] } diff --git a/tests/src/borough_sausage_links/geometry.json b/tests/src/borough_sausage_links/geometry.json index 6481502d..4797dd11 100644 --- a/tests/src/borough_sausage_links/geometry.json +++ b/tests/src/borough_sausage_links/geometry.json @@ -327,7 +327,7 @@ "properties": { "dst_i": 1165071364, "osm_way_id": 100799869, - "src_i": -1, + "src_i": -2, "type": "road" }, "type": "Feature" @@ -557,7 +557,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 1165071291, + "dst_i": -1, "osm_way_id": 100799873, "src_i": 1165071161, "type": "road" @@ -1605,7 +1605,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 5220719437, + "dst_i": -3, "osm_way_id": 539534590, "src_i": 25500014, "type": "road" @@ -1767,7 +1767,7 @@ "properties": { "dst_i": 9733253134, "osm_way_id": 539534595, - "src_i": -2, + "src_i": -4, "type": "road" }, "type": "Feature" @@ -2671,8 +2671,45 @@ "properties": { "complexity": "MapEdge", "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/-2", - "osm_node_id": -2, + "osm_link": "https://www.openstreetmap.org/node/-4", + "osm_node_id": -4, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -0.09253722194483377, + 51.50044171456672 + ], + [ + -0.09264461314449517, + 51.500418285433284 + ], + [ + -0.09269239425375045, + 51.50050315623709 + ], + [ + -0.09258500305408905, + 51.50052658537052 + ], + [ + -0.09253722194483377, + 51.50044171456672 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-3", + "osm_node_id": -3, "type": "intersection" }, "type": "Feature" @@ -2705,6 +2742,43 @@ ], "type": "Polygon" }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-2", + "osm_node_id": -2, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -0.09132972394076334, + 51.501548509096544 + ], + [ + -0.09133237347073778, + 51.50153059820212 + ], + [ + -0.09145825214863403, + 51.501537810763544 + ], + [ + -0.0914556026186596, + 51.501555721657965 + ], + [ + -0.09132972394076334, + 51.501548509096544 + ] + ] + ], + "type": "Polygon" + }, "properties": { "complexity": "MapEdge", "control": "Border", @@ -2957,11 +3031,11 @@ 51.50062167157148 ], [ - -0.09261405975876498, + -0.09261406120343782, 51.50057819655349 ], [ - -0.09272145095842638, + -0.09272144951375354, 51.500554767420056 ], [ @@ -3624,28 +3698,16 @@ "geometry": { "coordinates": [ [ - [ - -0.09159491386455051, - 51.50154561867605 - ], - [ - -0.09160208522049003, - 51.50154602516953 - ], - [ - -0.0915994674733179, - 51.5015639378626 - ], [ -0.09156349945381229, 51.50156189999924 ], [ - -0.09152753432365233, + -0.09152753143430667, 51.501559843250114 ], [ - -0.09153017807493544, + -0.0915301809642811, 51.501541932355686 ], [ @@ -3663,6 +3725,18 @@ [ -0.09159491386455051, 51.50154561867605 + ], + [ + -0.09160208522049003, + 51.50154602516953 + ], + [ + -0.0915994674733179, + 51.5015639378626 + ], + [ + -0.09156349945381229, + 51.50156189999924 ] ] ], @@ -3722,43 +3796,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -0.09132972394076334, - 51.501548509096544 - ], - [ - -0.09133237347073778, - 51.50153059820212 - ], - [ - -0.09145825214863403, - 51.501537810763544 - ], - [ - -0.0914556026186596, - 51.501555721657965 - ], - [ - -0.09132972394076334, - 51.501548509096544 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/1165071291", - "osm_node_id": 1165071291, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ @@ -4434,43 +4471,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -0.09253722194483377, - 51.50044171456672 - ], - [ - -0.09264461314449517, - 51.500418285433284 - ], - [ - -0.09269239280907761, - 51.50050315623709 - ], - [ - -0.09258500449876189, - 51.50052658537052 - ], - [ - -0.09253722194483377, - 51.50044171456672 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/5220719437", - "osm_node_id": 5220719437, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ diff --git a/tests/src/borough_sausage_links/road_network.dot b/tests/src/borough_sausage_links/road_network.dot index a0b631cc..f2d18e14 100644 --- a/tests/src/borough_sausage_links/road_network.dot +++ b/tests/src/borough_sausage_links/road_network.dot @@ -4,29 +4,29 @@ digraph { 2 [ label = "MapEdge" ] 3 [ label = "MapEdge" ] 4 [ label = "MapEdge" ] - 5 [ label = "Unknown" ] - 6 [ label = "Unknown" ] + 5 [ label = "MapEdge" ] + 6 [ label = "MapEdge" ] 7 [ label = "Unknown" ] 8 [ label = "Unknown" ] - 9 [ label = "MapEdge" ] + 9 [ label = "Unknown" ] 10 [ label = "Unknown" ] - 11 [ label = "Unknown" ] - 12 [ label = "MapEdge" ] - 13 [ label = "MapEdge" ] - 14 [ label = "Lights RoadIntersection" ] + 11 [ label = "MapEdge" ] + 12 [ label = "Unknown" ] + 13 [ label = "Unknown" ] + 14 [ label = "MapEdge" ] 15 [ label = "MapEdge" ] 16 [ label = "MapEdge" ] - 17 [ label = "Lights RoadIntersection" ] - 18 [ label = "Unknown" ] + 17 [ label = "MapEdge" ] + 18 [ label = "Lights RoadIntersection" ] 19 [ label = "Unknown" ] - 20 [ label = "MapEdge" ] - 21 [ label = "Unknown" ] + 20 [ label = "Unknown" ] + 21 [ label = "MapEdge" ] 22 [ label = "Unknown" ] 23 [ label = "Unknown" ] 24 [ label = "Unknown" ] 25 [ label = "Unknown" ] 26 [ label = "Unknown" ] - 27 [ label = "MapEdge" ] + 27 [ label = "Unknown" ] 28 [ label = "Unknown" ] 29 [ label = "Unknown" ] 30 [ label = "Lights RoadIntersection" ] @@ -42,116 +42,115 @@ digraph { 40 [ label = "Unknown" ] 41 [ label = "Unknown" ] 42 [ label = "Lights RoadIntersection" ] - 43 [ label = "MapEdge" ] - 44 [ label = "Unknown" ] - 45 [ label = "Lights RoadIntersection" ] - 46 [ label = "Unknown" ] - 47 [ label = "Lights RoadIntersection" ] + 43 [ label = "Unknown" ] + 44 [ label = "Lights RoadIntersection" ] + 45 [ label = "Unknown" ] + 46 [ label = "Lights RoadIntersection" ] + 47 [ label = "Unknown" ] 48 [ label = "Unknown" ] 49 [ label = "Unknown" ] 50 [ label = "Unknown" ] 51 [ label = "Unknown" ] - 52 [ label = "Unknown" ] + 52 [ label = "Lights RoadIntersection" ] 53 [ label = "Lights RoadIntersection" ] 54 [ label = "Lights RoadIntersection" ] - 55 [ label = "Lights RoadIntersection" ] + 55 [ label = "Unknown" ] 56 [ label = "Unknown" ] 57 [ label = "Unknown" ] - 58 [ label = "Unknown" ] - 59 [ label = "Lights RoadIntersection" ] - 60 [ label = "MapEdge" ] + 58 [ label = "Lights RoadIntersection" ] + 59 [ label = "MapEdge" ] + 60 [ label = "Unknown" ] 61 [ label = "Unknown" ] - 62 [ label = "Unknown" ] - 20 -> 7 [ label = "1 lanes" ] - 7 -> 20 [ label = "1 lanes" ] - 12 -> 11 [ label = "2 lanes" ] - 11 -> 12 [ label = "2 lanes" ] - 17 -> 40 [ label = "1 lanes" ] - 23 -> 9 [ label = "1 lanes" ] - 40 -> 23 [ label = "1 lanes" ] - 4 -> 5 [ label = "2 lanes" ] - 5 -> 4 [ label = "2 lanes" ] - 15 -> 57 [ label = "1 lanes" ] - 11 -> 51 [ label = "5 lanes" ] - 1 -> 28 [ label = "1 lanes" ] - 21 -> 52 [ label = "1 lanes" ] - 24 -> 21 [ label = "1 lanes" ] - 28 -> 24 [ label = "1 lanes" ] - 21 -> 22 [ label = "1 lanes" ] - 22 -> 39 [ label = "1 lanes" ] - 25 -> 27 [ label = "1 lanes" ] - 26 -> 25 [ label = "1 lanes" ] - 39 -> 26 [ label = "1 lanes" ] - 22 -> 24 [ label = "1 lanes" ] - 25 -> 28 [ label = "1 lanes" ] - 23 -> 26 [ label = "1 lanes" ] - 3 -> 57 [ label = "2 lanes" ] - 57 -> 3 [ label = "2 lanes" ] - 57 -> 18 [ label = "2 lanes" ] - 18 -> 57 [ label = "2 lanes" ] - 41 -> 48 [ label = "2 lanes" ] - 48 -> 41 [ label = "2 lanes" ] - 58 -> 59 [ label = "1 lanes" ] - 59 -> 58 [ label = "2 lanes" ] - 5 -> 2 [ label = "3 lanes" ] - 2 -> 5 [ label = "3 lanes" ] - 30 -> 55 [ label = "4 lanes" ] - 55 -> 30 [ label = "2 lanes" ] - 6 -> 53 [ label = "2 lanes" ] - 53 -> 6 [ label = "2 lanes" ] - 8 -> 45 [ label = "2 lanes" ] - 45 -> 8 [ label = "2 lanes" ] - 10 -> 29 [ label = "2 lanes" ] - 29 -> 48 [ label = "2 lanes" ] - 18 -> 54 [ label = "2 lanes" ] - 54 -> 18 [ label = "2 lanes" ] + 21 -> 9 [ label = "1 lanes" ] + 9 -> 21 [ label = "1 lanes" ] + 14 -> 13 [ label = "2 lanes" ] + 13 -> 14 [ label = "2 lanes" ] + 18 -> 40 [ label = "1 lanes" ] + 24 -> 11 [ label = "1 lanes" ] + 40 -> 24 [ label = "1 lanes" ] + 6 -> 7 [ label = "2 lanes" ] + 7 -> 6 [ label = "2 lanes" ] + 16 -> 56 [ label = "1 lanes" ] + 13 -> 50 [ label = "5 lanes" ] + 2 -> 28 [ label = "1 lanes" ] + 22 -> 51 [ label = "1 lanes" ] + 25 -> 22 [ label = "1 lanes" ] + 28 -> 25 [ label = "1 lanes" ] + 22 -> 23 [ label = "1 lanes" ] + 23 -> 39 [ label = "1 lanes" ] + 26 -> 3 [ label = "1 lanes" ] + 27 -> 26 [ label = "1 lanes" ] + 39 -> 27 [ label = "1 lanes" ] + 23 -> 25 [ label = "1 lanes" ] + 26 -> 28 [ label = "1 lanes" ] + 24 -> 27 [ label = "1 lanes" ] + 5 -> 56 [ label = "2 lanes" ] + 56 -> 5 [ label = "2 lanes" ] + 56 -> 19 [ label = "2 lanes" ] + 19 -> 56 [ label = "2 lanes" ] + 41 -> 47 [ label = "2 lanes" ] + 47 -> 41 [ label = "2 lanes" ] + 57 -> 58 [ label = "1 lanes" ] + 58 -> 57 [ label = "2 lanes" ] + 7 -> 4 [ label = "3 lanes" ] + 4 -> 7 [ label = "3 lanes" ] + 30 -> 54 [ label = "4 lanes" ] + 54 -> 30 [ label = "2 lanes" ] + 8 -> 52 [ label = "2 lanes" ] + 52 -> 8 [ label = "2 lanes" ] + 10 -> 44 [ label = "2 lanes" ] + 44 -> 10 [ label = "2 lanes" ] + 12 -> 29 [ label = "2 lanes" ] + 29 -> 47 [ label = "2 lanes" ] + 19 -> 53 [ label = "2 lanes" ] + 53 -> 19 [ label = "2 lanes" ] 32 -> 41 [ label = "2 lanes" ] - 31 -> 47 [ label = "2 lanes" ] + 31 -> 46 [ label = "2 lanes" ] 31 -> 32 [ label = "2 lanes" ] 39 -> 40 [ label = "1 lanes" ] 36 -> 33 [ label = "1 lanes" ] - 58 -> 55 [ label = "2 lanes" ] - 55 -> 58 [ label = "2 lanes" ] + 57 -> 54 [ label = "2 lanes" ] + 54 -> 57 [ label = "2 lanes" ] 34 -> 36 [ label = "1 lanes" ] 36 -> 38 [ label = "1 lanes" ] - 16 -> 17 [ label = "2 lanes" ] - 17 -> 16 [ label = "2 lanes" ] - 17 -> 56 [ label = "2 lanes" ] - 56 -> 17 [ label = "2 lanes" ] - 56 -> 6 [ label = "2 lanes" ] - 6 -> 56 [ label = "2 lanes" ] - 8 -> 43 [ label = "2 lanes" ] - 43 -> 8 [ label = "2 lanes" ] - 29 -> 46 [ label = "2 lanes" ] - 47 -> 59 [ label = "2 lanes" ] - 47 -> 32 [ label = "2 lanes" ] - 0 -> 62 [ label = "3 lanes" ] - 46 -> 10 [ label = "2 lanes" ] - 48 -> 46 [ label = "2 lanes" ] - 44 -> 50 [ label = "3 lanes" ] - 35 -> 56 [ label = "2 lanes" ] - 51 -> 49 [ label = "3 lanes" ] - 50 -> 11 [ label = "5 lanes" ] + 17 -> 18 [ label = "2 lanes" ] + 18 -> 17 [ label = "2 lanes" ] + 18 -> 55 [ label = "2 lanes" ] + 55 -> 18 [ label = "2 lanes" ] + 55 -> 8 [ label = "2 lanes" ] + 8 -> 55 [ label = "2 lanes" ] + 10 -> 1 [ label = "2 lanes" ] + 1 -> 10 [ label = "2 lanes" ] + 29 -> 45 [ label = "2 lanes" ] + 46 -> 58 [ label = "2 lanes" ] + 46 -> 32 [ label = "2 lanes" ] + 0 -> 61 [ label = "3 lanes" ] + 45 -> 12 [ label = "2 lanes" ] + 47 -> 45 [ label = "2 lanes" ] + 43 -> 49 [ label = "3 lanes" ] + 35 -> 55 [ label = "2 lanes" ] + 50 -> 48 [ label = "3 lanes" ] + 49 -> 13 [ label = "5 lanes" ] 35 -> 36 [ label = "1 lanes" ] 37 -> 35 [ label = "1 lanes" ] - 10 -> 13 [ label = "2 lanes" ] - 13 -> 10 [ label = "2 lanes" ] - 42 -> 45 [ label = "2 lanes" ] - 45 -> 42 [ label = "2 lanes" ] - 49 -> 29 [ label = "5 lanes" ] + 12 -> 15 [ label = "2 lanes" ] + 15 -> 12 [ label = "2 lanes" ] + 42 -> 44 [ label = "2 lanes" ] + 44 -> 42 [ label = "2 lanes" ] + 48 -> 29 [ label = "5 lanes" ] 41 -> 42 [ label = "2 lanes" ] - 52 -> 19 [ label = "1 lanes" ] - 30 -> 5 [ label = "2 lanes" ] - 5 -> 30 [ label = "2 lanes" ] - 53 -> 58 [ label = "2 lanes" ] - 58 -> 53 [ label = "2 lanes" ] - 59 -> 31 [ label = "2 lanes" ] - 47 -> 42 [ label = "1 lanes" ] - 42 -> 47 [ label = "2 lanes" ] - 54 -> 58 [ label = "2 lanes" ] - 58 -> 54 [ label = "2 lanes" ] - 60 -> 61 [ label = "1 lanes" ] - 61 -> 60 [ label = "1 lanes" ] - 46 -> 35 [ label = "2 lanes" ] - 62 -> 44 [ label = "5 lanes" ] + 51 -> 20 [ label = "1 lanes" ] + 30 -> 7 [ label = "2 lanes" ] + 7 -> 30 [ label = "2 lanes" ] + 52 -> 57 [ label = "2 lanes" ] + 57 -> 52 [ label = "2 lanes" ] + 58 -> 31 [ label = "2 lanes" ] + 46 -> 42 [ label = "1 lanes" ] + 42 -> 46 [ label = "2 lanes" ] + 53 -> 57 [ label = "2 lanes" ] + 57 -> 53 [ label = "2 lanes" ] + 59 -> 60 [ label = "1 lanes" ] + 60 -> 59 [ label = "1 lanes" ] + 45 -> 35 [ label = "2 lanes" ] + 61 -> 43 [ label = "5 lanes" ] } diff --git a/tests/src/bristol_contraflow_cycleway/geometry.json b/tests/src/bristol_contraflow_cycleway/geometry.json index 91006502..346e3920 100644 --- a/tests/src/bristol_contraflow_cycleway/geometry.json +++ b/tests/src/bristol_contraflow_cycleway/geometry.json @@ -521,7 +521,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 1223212892, + "dst_i": -2, "osm_way_id": 106281101, "src_i": 260742833, "type": "road" @@ -1268,6 +1268,43 @@ }, "type": "Feature" }, + { + "geometry": { + "coordinates": [ + [ + [ + -2.553445301487804, + 51.45809751247808 + ], + [ + -2.5533881232251576, + 51.45810248752192 + ], + [ + -2.5533681622151514, + 51.45801341966815 + ], + [ + -2.5534253404777982, + 51.45800844462431 + ], + [ + -2.553445301487804, + 51.45809751247808 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-2", + "osm_node_id": -2, + "type": "intersection" + }, + "type": "Feature" + }, { "geometry": { "coordinates": [ @@ -1838,43 +1875,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -2.553445301487804, - 51.45809751247808 - ], - [ - -2.5533881232251576, - 51.45810248752192 - ], - [ - -2.5533681622151514, - 51.45801341966815 - ], - [ - -2.5534253404777982, - 51.45800844462431 - ], - [ - -2.553445301487804, - 51.45809751247808 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/1223212892", - "osm_node_id": 1223212892, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ diff --git a/tests/src/bristol_contraflow_cycleway/road_network.dot b/tests/src/bristol_contraflow_cycleway/road_network.dot index 39fc058d..1d55c16f 100644 --- a/tests/src/bristol_contraflow_cycleway/road_network.dot +++ b/tests/src/bristol_contraflow_cycleway/road_network.dot @@ -1,9 +1,9 @@ digraph { 0 [ label = "MapEdge" ] 1 [ label = "MapEdge" ] - 2 [ label = "Unknown" ] - 3 [ label = "MapEdge" ] - 4 [ label = "Unknown" ] + 2 [ label = "MapEdge" ] + 3 [ label = "Unknown" ] + 4 [ label = "MapEdge" ] 5 [ label = "Unknown" ] 6 [ label = "Unknown" ] 7 [ label = "MapEdge" ] @@ -14,70 +14,69 @@ digraph { 12 [ label = "Unknown" ] 13 [ label = "MapEdge" ] 14 [ label = "Unknown" ] - 15 [ label = "MapEdge" ] + 15 [ label = "Unknown" ] 16 [ label = "Unknown" ] - 17 [ label = "Unknown" ] + 17 [ label = "MapEdge" ] 18 [ label = "MapEdge" ] - 19 [ label = "MapEdge" ] + 19 [ label = "Unknown" ] 20 [ label = "Unknown" ] - 21 [ label = "Unknown" ] - 22 [ label = "Lights RoadIntersection" ] - 23 [ label = "Unknown" ] - 24 [ label = "MapEdge" ] + 21 [ label = "Lights RoadIntersection" ] + 22 [ label = "Unknown" ] + 23 [ label = "MapEdge" ] + 24 [ label = "Unknown" ] 25 [ label = "Unknown" ] 26 [ label = "Unknown" ] 27 [ label = "Unknown" ] 28 [ label = "Unknown" ] - 29 [ label = "Unknown" ] - 1 -> 10 [ label = "2 lanes" ] - 10 -> 1 [ label = "2 lanes" ] - 10 -> 27 [ label = "2 lanes" ] - 27 -> 10 [ label = "2 lanes" ] - 27 -> 2 [ label = "2 lanes" ] - 2 -> 27 [ label = "2 lanes" ] - 2 -> 18 [ label = "2 lanes" ] - 18 -> 2 [ label = "2 lanes" ] - 11 -> 21 [ label = "2 lanes" ] - 21 -> 11 [ label = "2 lanes" ] - 21 -> 24 [ label = "2 lanes" ] - 24 -> 21 [ label = "2 lanes" ] + 2 -> 10 [ label = "2 lanes" ] + 10 -> 2 [ label = "2 lanes" ] + 10 -> 26 [ label = "2 lanes" ] + 26 -> 10 [ label = "2 lanes" ] + 26 -> 3 [ label = "2 lanes" ] + 3 -> 26 [ label = "2 lanes" ] + 3 -> 17 [ label = "2 lanes" ] + 17 -> 3 [ label = "2 lanes" ] + 11 -> 20 [ label = "2 lanes" ] + 20 -> 11 [ label = "2 lanes" ] + 20 -> 23 [ label = "2 lanes" ] + 23 -> 20 [ label = "2 lanes" ] 5 -> 8 [ label = "2 lanes" ] 8 -> 5 [ label = "2 lanes" ] - 8 -> 17 [ label = "2 lanes" ] - 17 -> 8 [ label = "2 lanes" ] - 17 -> 9 [ label = "2 lanes" ] - 9 -> 17 [ label = "2 lanes" ] - 7 -> 22 [ label = "2 lanes" ] - 22 -> 7 [ label = "2 lanes" ] + 8 -> 16 [ label = "2 lanes" ] + 16 -> 8 [ label = "2 lanes" ] + 16 -> 9 [ label = "2 lanes" ] + 9 -> 16 [ label = "2 lanes" ] + 7 -> 21 [ label = "2 lanes" ] + 21 -> 7 [ label = "2 lanes" ] 11 -> 5 [ label = "2 lanes" ] 5 -> 11 [ label = "2 lanes" ] - 22 -> 11 [ label = "2 lanes" ] - 11 -> 22 [ label = "2 lanes" ] - 12 -> 0 [ label = "2 lanes" ] - 0 -> 12 [ label = "2 lanes" ] - 6 -> 15 [ label = "1 lanes" ] - 15 -> 6 [ label = "1 lanes" ] - 14 -> 16 [ label = "2 lanes" ] - 16 -> 14 [ label = "2 lanes" ] - 8 -> 23 [ label = "3 lanes" ] + 21 -> 11 [ label = "2 lanes" ] + 11 -> 21 [ label = "2 lanes" ] + 12 -> 1 [ label = "2 lanes" ] + 1 -> 12 [ label = "2 lanes" ] + 6 -> 0 [ label = "1 lanes" ] + 0 -> 6 [ label = "1 lanes" ] + 14 -> 15 [ label = "2 lanes" ] + 15 -> 14 [ label = "2 lanes" ] + 8 -> 22 [ label = "3 lanes" ] 5 -> 13 [ label = "2 lanes" ] 13 -> 5 [ label = "2 lanes" ] - 20 -> 19 [ label = "2 lanes" ] - 19 -> 20 [ label = "2 lanes" ] + 19 -> 18 [ label = "2 lanes" ] + 18 -> 19 [ label = "2 lanes" ] + 20 -> 21 [ label = "2 lanes" ] 21 -> 22 [ label = "2 lanes" ] - 22 -> 23 [ label = "2 lanes" ] - 6 -> 28 [ label = "4 lanes" ] - 16 -> 6 [ label = "4 lanes" ] - 23 -> 16 [ label = "4 lanes" ] - 28 -> 2 [ label = "4 lanes" ] - 20 -> 25 [ label = "1 lanes" ] - 25 -> 10 [ label = "1 lanes" ] - 26 -> 25 [ label = "1 lanes" ] - 27 -> 17 [ label = "1 lanes" ] - 28 -> 29 [ label = "1 lanes" ] - 29 -> 28 [ label = "1 lanes" ] - 2 -> 26 [ label = "2 lanes" ] - 26 -> 2 [ label = "2 lanes" ] - 26 -> 3 [ label = "2 lanes" ] - 3 -> 26 [ label = "2 lanes" ] + 6 -> 27 [ label = "4 lanes" ] + 15 -> 6 [ label = "4 lanes" ] + 22 -> 15 [ label = "4 lanes" ] + 27 -> 3 [ label = "4 lanes" ] + 19 -> 24 [ label = "1 lanes" ] + 24 -> 10 [ label = "1 lanes" ] + 25 -> 24 [ label = "1 lanes" ] + 26 -> 16 [ label = "1 lanes" ] + 27 -> 28 [ label = "1 lanes" ] + 28 -> 27 [ label = "1 lanes" ] + 3 -> 25 [ label = "2 lanes" ] + 25 -> 3 [ label = "2 lanes" ] + 25 -> 4 [ label = "2 lanes" ] + 4 -> 25 [ label = "2 lanes" ] } diff --git a/tests/src/i5_exit_ramp/geometry.json b/tests/src/i5_exit_ramp/geometry.json index 290fc183..4d95b8d0 100644 --- a/tests/src/i5_exit_ramp/geometry.json +++ b/tests/src/i5_exit_ramp/geometry.json @@ -149,7 +149,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 29545412, + "dst_i": -1, "osm_way_id": 4644164, "src_i": 29545440, "type": "road" @@ -487,7 +487,7 @@ "properties": { "dst_i": 53149325, "osm_way_id": 6400787, - "src_i": -1, + "src_i": -2, "type": "road" }, "type": "Feature" @@ -773,7 +773,7 @@ "type": "Polygon" }, "properties": { - "dst_i": -2, + "dst_i": -4, "osm_way_id": 50848121, "src_i": 978142408, "type": "road" @@ -1217,11 +1217,11 @@ 47.65587562676246 ], [ - -122.32100524349471, + -122.32100524482982, 47.65586738717871 ], [ - -122.32100161734877, + -122.32100161868388, 47.65593818356726 ], [ @@ -1237,7 +1237,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 1841897176, + "dst_i": -3, "osm_way_id": 331907114, "src_i": 59713406, "type": "road" @@ -2091,8 +2091,45 @@ "properties": { "complexity": "MapEdge", "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/-2", - "osm_node_id": -2, + "osm_link": "https://www.openstreetmap.org/node/-4", + "osm_node_id": -4, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -122.32086818692703, + 47.65593508180734 + ], + [ + -122.32087181307297, + 47.655864285418794 + ], + [ + -122.32100524482982, + 47.65586738717871 + ], + [ + -122.32100161868388, + 47.65593818356726 + ], + [ + -122.32086818692703, + 47.65593508180734 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-3", + "osm_node_id": -3, "type": "intersection" }, "type": "Feature" @@ -2125,6 +2162,43 @@ ], "type": "Polygon" }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-2", + "osm_node_id": -2, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -122.32088109605999, + 47.65754184290652 + ], + [ + -122.32085890394, + 47.65747777704021 + ], + [ + -122.32098892183265, + 47.65745734085803 + ], + [ + -122.32101111395264, + 47.657521406724335 + ], + [ + -122.32088109605999, + 47.65754184290652 + ] + ] + ], + "type": "Polygon" + }, "properties": { "complexity": "MapEdge", "control": "Border", @@ -2323,43 +2397,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -122.32088109605999, - 47.65754184290652 - ], - [ - -122.32085890394, - 47.65747777704021 - ], - [ - -122.32098892183265, - 47.65745734085803 - ], - [ - -122.32101111395264, - 47.657521406724335 - ], - [ - -122.32088109605999, - 47.65754184290652 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/29545412", - "osm_node_id": 29545412, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ @@ -3422,43 +3459,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -122.32086818692703, - 47.65593508180734 - ], - [ - -122.32087181307297, - 47.655864285418794 - ], - [ - -122.32100524349471, - 47.65586738717871 - ], - [ - -122.32100161734877, - 47.65593818356726 - ], - [ - -122.32086818692703, - 47.65593508180734 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/1841897176", - "osm_node_id": 1841897176, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ diff --git a/tests/src/i5_exit_ramp/road_network.dot b/tests/src/i5_exit_ramp/road_network.dot index fc6bc6e1..b94cb34c 100644 --- a/tests/src/i5_exit_ramp/road_network.dot +++ b/tests/src/i5_exit_ramp/road_network.dot @@ -3,36 +3,36 @@ digraph { 1 [ label = "MapEdge" ] 2 [ label = "MapEdge" ] 3 [ label = "MapEdge" ] - 4 [ label = "Unknown" ] + 4 [ label = "MapEdge" ] 5 [ label = "MapEdge" ] - 6 [ label = "MapEdge" ] + 6 [ label = "Unknown" ] 7 [ label = "MapEdge" ] 8 [ label = "MapEdge" ] - 9 [ label = "Unknown" ] + 9 [ label = "MapEdge" ] 10 [ label = "Unknown" ] 11 [ label = "Unknown" ] 12 [ label = "Unknown" ] - 13 [ label = "MapEdge" ] - 14 [ label = "Unknown" ] + 13 [ label = "Unknown" ] + 14 [ label = "MapEdge" ] 15 [ label = "Unknown" ] - 16 [ label = "MapEdge" ] - 17 [ label = "Unknown" ] - 18 [ label = "MapEdge" ] - 19 [ label = "Unknown" ] - 20 [ label = "MapEdge" ] - 21 [ label = "Unknown" ] + 16 [ label = "Unknown" ] + 17 [ label = "MapEdge" ] + 18 [ label = "Unknown" ] + 19 [ label = "MapEdge" ] + 20 [ label = "Unknown" ] + 21 [ label = "MapEdge" ] 22 [ label = "Unknown" ] - 23 [ label = "MapEdge" ] + 23 [ label = "Unknown" ] 24 [ label = "MapEdge" ] 25 [ label = "MapEdge" ] - 26 [ label = "Unknown" ] + 26 [ label = "MapEdge" ] 27 [ label = "Unknown" ] 28 [ label = "Unknown" ] - 29 [ label = "MapEdge" ] - 30 [ label = "Unknown" ] + 29 [ label = "Unknown" ] + 30 [ label = "MapEdge" ] 31 [ label = "Unknown" ] 32 [ label = "Unknown" ] - 33 [ label = "MapEdge" ] + 33 [ label = "Unknown" ] 34 [ label = "MapEdge" ] 35 [ label = "Unknown" ] 36 [ label = "MapEdge" ] @@ -58,78 +58,78 @@ digraph { 56 [ label = "Unknown" ] 57 [ label = "Unknown" ] 58 [ label = "MapEdge" ] - 4 -> 6 [ label = "1 lanes" ] - 35 -> 3 [ label = "4 lanes" ] - 9 -> 7 [ label = "2 lanes" ] - 7 -> 9 [ label = "1 lanes" ] - 2 -> 4 [ label = "4 lanes" ] - 10 -> 32 [ label = "1 lanes" ] + 6 -> 8 [ label = "1 lanes" ] + 35 -> 5 [ label = "4 lanes" ] + 10 -> 3 [ label = "2 lanes" ] + 3 -> 10 [ label = "1 lanes" ] + 4 -> 6 [ label = "4 lanes" ] + 11 -> 33 [ label = "1 lanes" ] 40 -> 39 [ label = "3 lanes" ] 39 -> 40 [ label = "2 lanes" ] - 33 -> 14 [ label = "3 lanes" ] - 4 -> 5 [ label = "4 lanes" ] - 43 -> 15 [ label = "1 lanes" ] - 15 -> 43 [ label = "1 lanes" ] - 20 -> 19 [ label = "2 lanes" ] - 19 -> 20 [ label = "2 lanes" ] - 1 -> 21 [ label = "3 lanes" ] - 21 -> 23 [ label = "2 lanes" ] - 23 -> 21 [ label = "2 lanes" ] - 22 -> 44 [ label = "2 lanes" ] + 34 -> 15 [ label = "3 lanes" ] + 6 -> 7 [ label = "4 lanes" ] + 43 -> 16 [ label = "1 lanes" ] + 16 -> 43 [ label = "1 lanes" ] + 21 -> 20 [ label = "2 lanes" ] + 20 -> 21 [ label = "2 lanes" ] + 2 -> 22 [ label = "3 lanes" ] + 22 -> 24 [ label = "2 lanes" ] + 24 -> 22 [ label = "2 lanes" ] + 23 -> 44 [ label = "2 lanes" ] + 44 -> 23 [ label = "2 lanes" ] 44 -> 22 [ label = "2 lanes" ] - 44 -> 21 [ label = "2 lanes" ] - 21 -> 44 [ label = "2 lanes" ] + 22 -> 44 [ label = "2 lanes" ] 54 -> 57 [ label = "1 lanes" ] 57 -> 54 [ label = "1 lanes" ] - 28 -> 27 [ label = "2 lanes" ] - 51 -> 18 [ label = "2 lanes" ] - 18 -> 51 [ label = "1 lanes" ] - 37 -> 17 [ label = "1 lanes" ] - 31 -> 0 [ label = "3 lanes" ] - 0 -> 31 [ label = "2 lanes" ] - 45 -> 31 [ label = "3 lanes" ] - 31 -> 45 [ label = "2 lanes" ] - 32 -> 9 [ label = "1 lanes" ] - 14 -> 10 [ label = "3 lanes" ] - 27 -> 50 [ label = "2 lanes" ] + 29 -> 28 [ label = "2 lanes" ] + 51 -> 19 [ label = "2 lanes" ] + 19 -> 51 [ label = "1 lanes" ] + 37 -> 18 [ label = "1 lanes" ] + 32 -> 0 [ label = "3 lanes" ] + 0 -> 32 [ label = "2 lanes" ] + 45 -> 32 [ label = "3 lanes" ] + 32 -> 45 [ label = "2 lanes" ] + 33 -> 10 [ label = "1 lanes" ] + 15 -> 11 [ label = "3 lanes" ] + 28 -> 50 [ label = "2 lanes" ] 36 -> 35 [ label = "1 lanes" ] - 29 -> 51 [ label = "2 lanes" ] - 51 -> 29 [ label = "1 lanes" ] - 30 -> 37 [ label = "1 lanes" ] - 15 -> 16 [ label = "2 lanes" ] - 16 -> 15 [ label = "2 lanes" ] - 25 -> 19 [ label = "2 lanes" ] - 19 -> 25 [ label = "2 lanes" ] - 22 -> 26 [ label = "2 lanes" ] - 26 -> 22 [ label = "2 lanes" ] - 24 -> 22 [ label = "2 lanes" ] - 22 -> 24 [ label = "2 lanes" ] - 26 -> 34 [ label = "2 lanes" ] - 34 -> 26 [ label = "2 lanes" ] - 30 -> 28 [ label = "2 lanes" ] - 42 -> 30 [ label = "2 lanes" ] - 11 -> 42 [ label = "2 lanes" ] - 41 -> 11 [ label = "1 lanes" ] + 30 -> 51 [ label = "2 lanes" ] + 51 -> 30 [ label = "1 lanes" ] + 31 -> 37 [ label = "1 lanes" ] + 16 -> 17 [ label = "2 lanes" ] + 17 -> 16 [ label = "2 lanes" ] + 26 -> 20 [ label = "2 lanes" ] + 20 -> 26 [ label = "2 lanes" ] + 23 -> 27 [ label = "2 lanes" ] + 27 -> 23 [ label = "2 lanes" ] + 25 -> 23 [ label = "2 lanes" ] + 23 -> 25 [ label = "2 lanes" ] + 27 -> 1 [ label = "2 lanes" ] + 1 -> 27 [ label = "2 lanes" ] + 31 -> 29 [ label = "2 lanes" ] + 42 -> 31 [ label = "2 lanes" ] + 12 -> 42 [ label = "2 lanes" ] + 41 -> 12 [ label = "1 lanes" ] 38 -> 41 [ label = "1 lanes" ] 42 -> 41 [ label = "1 lanes" ] - 58 -> 11 [ label = "2 lanes" ] + 58 -> 12 [ label = "2 lanes" ] 51 -> 44 [ label = "1 lanes" ] 44 -> 51 [ label = "1 lanes" ] - 19 -> 12 [ label = "2 lanes" ] - 12 -> 19 [ label = "2 lanes" ] - 13 -> 10 [ label = "4 lanes" ] - 12 -> 45 [ label = "2 lanes" ] - 45 -> 12 [ label = "2 lanes" ] - 12 -> 40 [ label = "2 lanes" ] - 40 -> 12 [ label = "3 lanes" ] + 20 -> 13 [ label = "2 lanes" ] + 13 -> 20 [ label = "2 lanes" ] + 14 -> 11 [ label = "4 lanes" ] + 13 -> 45 [ label = "2 lanes" ] + 45 -> 13 [ label = "2 lanes" ] + 13 -> 40 [ label = "2 lanes" ] + 40 -> 13 [ label = "3 lanes" ] 48 -> 46 [ label = "1 lanes" ] 47 -> 49 [ label = "1 lanes" ] 52 -> 53 [ label = "1 lanes" ] - 8 -> 35 [ label = "4 lanes" ] - 26 -> 54 [ label = "1 lanes" ] - 54 -> 26 [ label = "1 lanes" ] + 9 -> 35 [ label = "4 lanes" ] + 27 -> 54 [ label = "1 lanes" ] + 54 -> 27 [ label = "1 lanes" ] 55 -> 56 [ label = "1 lanes" ] - 15 -> 17 [ label = "2 lanes" ] - 17 -> 15 [ label = "2 lanes" ] - 31 -> 11 [ label = "1 lanes" ] + 16 -> 18 [ label = "2 lanes" ] + 18 -> 16 [ label = "2 lanes" ] + 32 -> 12 [ label = "1 lanes" ] } diff --git a/tests/src/kingsway_junction/geometry.json b/tests/src/kingsway_junction/geometry.json index ddd951bd..d9d0d3a1 100644 --- a/tests/src/kingsway_junction/geometry.json +++ b/tests/src/kingsway_junction/geometry.json @@ -391,7 +391,7 @@ "properties": { "dst_i": 2790145016, "osm_way_id": 59876766, - "src_i": -1, + "src_i": -3, "type": "road" }, "type": "Feature" @@ -641,7 +641,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 743548069, + "dst_i": -4, "osm_way_id": 59876789, "src_i": 743548133, "type": "road" @@ -831,7 +831,7 @@ "properties": { "dst_i": 637467098, "osm_way_id": 60007821, - "src_i": -2, + "src_i": -1, "type": "road" }, "type": "Feature" @@ -1097,7 +1097,7 @@ "type": "Polygon" }, "properties": { - "dst_i": -3, + "dst_i": -5, "osm_way_id": 60007830, "src_i": 745988174, "type": "road" @@ -1381,7 +1381,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 745988242, + "dst_i": -6, "osm_way_id": 60007856, "src_i": 8778504595, "type": "road" @@ -1533,7 +1533,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 637467100, + "dst_i": -2, "osm_way_id": 60577051, "src_i": 743547944, "type": "road" @@ -3689,7 +3689,7 @@ "type": "Polygon" }, "properties": { - "dst_i": -4, + "dst_i": -8, "osm_way_id": 288287364, "src_i": 2920872874, "type": "road" @@ -3741,7 +3741,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 2920872878, + "dst_i": -7, "osm_way_id": 288531255, "src_i": 2920872874, "type": "road" @@ -6651,8 +6651,82 @@ "properties": { "complexity": "MapEdge", "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/-4", - "osm_node_id": -4, + "osm_link": "https://www.openstreetmap.org/node/-8", + "osm_node_id": -8, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -2.30937, + 53.44631210525934 + ], + [ + -2.3093697674670994, + 53.44633009169047 + ], + [ + -2.309218776607039, + 53.44632939921287 + ], + [ + -2.3092190091399396, + 53.44631141278174 + ], + [ + -2.30937, + 53.44631210525934 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-7", + "osm_node_id": -7, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -2.304560520509421, + 53.44714 + ], + [ + -2.304523514559259, + 53.44712443813978 + ], + [ + -2.3046106056802578, + 53.44705097256182 + ], + [ + -2.30464761163042, + 53.447066534422035 + ], + [ + -2.304560520509421, + 53.44714 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-6", + "osm_node_id": -6, "type": "intersection" }, "type": "Feature" @@ -6688,8 +6762,8 @@ "properties": { "complexity": "MapEdge", "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/-3", - "osm_node_id": -3, + "osm_link": "https://www.openstreetmap.org/node/-5", + "osm_node_id": -5, "type": "intersection" }, "type": "Feature" @@ -6699,24 +6773,24 @@ "coordinates": [ [ [ - -2.3058065465466884, - 53.44712868743414 + -2.3074798985971583, + 53.447159862415894 ], [ - -2.3057378678035363, - 53.4471865210048 + -2.307381422423759, + 53.4471201375841 ], [ - -2.3056299997168836, - 53.447141082783155 + -2.307466096108566, + 53.44704567645717 ], [ - -2.3056986784600357, - 53.44708324741384 + -2.307564572281965, + 53.44708540128897 ], [ - -2.3058065465466884, - 53.44712868743414 + -2.3074798985971583, + 53.447159862415894 ] ] ], @@ -6725,8 +6799,8 @@ "properties": { "complexity": "MapEdge", "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/-2", - "osm_node_id": -2, + "osm_link": "https://www.openstreetmap.org/node/-4", + "osm_node_id": -4, "type": "intersection" }, "type": "Feature" @@ -6759,6 +6833,80 @@ ], "type": "Polygon" }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-3", + "osm_node_id": -3, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -2.3058557725537567, + 53.44715787131797 + ], + [ + -2.305752549085298, + 53.44711433336277 + ], + [ + -2.305839812341042, + 53.447040941529174 + ], + [ + -2.3059430358095003, + 53.447084477685735 + ], + [ + -2.3058557725537567, + 53.44715787131797 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-2", + "osm_node_id": -2, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -2.3058065465466884, + 53.44712868743414 + ], + [ + -2.3057378678035363, + 53.4471865210048 + ], + [ + -2.3056299997168836, + 53.447141082783155 + ], + [ + -2.3056986784600357, + 53.44708324741384 + ], + [ + -2.3058065465466884, + 53.44712868743414 + ] + ] + ], + "type": "Polygon" + }, "properties": { "complexity": "MapEdge", "control": "Border", @@ -7598,43 +7746,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -2.3058557725537567, - 53.44715787131797 - ], - [ - -2.305752549085298, - 53.44711433336277 - ], - [ - -2.305839812341042, - 53.447040941529174 - ], - [ - -2.3059430358095003, - 53.447084477685735 - ], - [ - -2.3058557725537567, - 53.44715787131797 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/637467100", - "osm_node_id": 637467100, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ @@ -7791,43 +7902,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -2.3074798985971583, - 53.447159862415894 - ], - [ - -2.307381422423759, - 53.4471201375841 - ], - [ - -2.307466096108566, - 53.44704567645717 - ], - [ - -2.307564572281965, - 53.44708540128897 - ], - [ - -2.3074798985971583, - 53.447159862415894 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/743548069", - "osm_node_id": 743548069, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ @@ -8361,43 +8435,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -2.304560520509421, - 53.44714 - ], - [ - -2.304523514559259, - 53.44712443813978 - ], - [ - -2.3046106056802578, - 53.44705097256182 - ], - [ - -2.30464761163042, - 53.447066534422035 - ], - [ - -2.304560520509421, - 53.44714 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/745988242", - "osm_node_id": 745988242, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ @@ -10445,43 +10482,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -2.30937, - 53.44631210525934 - ], - [ - -2.3093697674670994, - 53.44633009169047 - ], - [ - -2.309218776607039, - 53.44632939921287 - ], - [ - -2.3092190091399396, - 53.44631141278174 - ], - [ - -2.30937, - 53.44631210525934 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/2920872878", - "osm_node_id": 2920872878, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ diff --git a/tests/src/kingsway_junction/road_network.dot b/tests/src/kingsway_junction/road_network.dot index eee0f805..78172f38 100644 --- a/tests/src/kingsway_junction/road_network.dot +++ b/tests/src/kingsway_junction/road_network.dot @@ -3,32 +3,32 @@ digraph { 1 [ label = "MapEdge" ] 2 [ label = "MapEdge" ] 3 [ label = "MapEdge" ] - 4 [ label = "Lights RoadIntersection" ] - 5 [ label = "Lights RoadIntersection" ] + 4 [ label = "MapEdge" ] + 5 [ label = "MapEdge" ] 6 [ label = "MapEdge" ] - 7 [ label = "Unknown" ] - 8 [ label = "Unknown" ] - 9 [ label = "MapEdge" ] - 10 [ label = "Lights RoadIntersection" ] - 11 [ label = "Lights RoadIntersection" ] + 7 [ label = "MapEdge" ] + 8 [ label = "Lights RoadIntersection" ] + 9 [ label = "Lights RoadIntersection" ] + 10 [ label = "MapEdge" ] + 11 [ label = "Unknown" ] 12 [ label = "Unknown" ] - 13 [ label = "Lights RoadIntersection" ] - 14 [ label = "Unknown" ] + 13 [ label = "MapEdge" ] + 14 [ label = "Lights RoadIntersection" ] 15 [ label = "Lights RoadIntersection" ] 16 [ label = "Unknown" ] - 17 [ label = "MapEdge" ] - 18 [ label = "Lights RoadIntersection" ] - 19 [ label = "Unknown" ] + 17 [ label = "Lights RoadIntersection" ] + 18 [ label = "Unknown" ] + 19 [ label = "Lights RoadIntersection" ] 20 [ label = "Unknown" ] 21 [ label = "MapEdge" ] - 22 [ label = "MapEdge" ] - 23 [ label = "Unknown" ] + 22 [ label = "Unknown" ] + 23 [ label = "MapEdge" ] 24 [ label = "MapEdge" ] - 25 [ label = "MapEdge" ] + 25 [ label = "Unknown" ] 26 [ label = "MapEdge" ] - 27 [ label = "Unknown" ] + 27 [ label = "MapEdge" ] 28 [ label = "Unknown" ] - 29 [ label = "MapEdge" ] + 29 [ label = "Unknown" ] 30 [ label = "Unknown" ] 31 [ label = "Unknown" ] 32 [ label = "Unknown" ] @@ -40,31 +40,31 @@ digraph { 38 [ label = "Unknown" ] 39 [ label = "Unknown" ] 40 [ label = "Unknown" ] - 41 [ label = "Unknown" ] + 41 [ label = "MapEdge" ] 42 [ label = "MapEdge" ] - 43 [ label = "Unknown" ] - 44 [ label = "MapEdge" ] - 45 [ label = "MapEdge" ] - 46 [ label = "MapEdge" ] + 43 [ label = "MapEdge" ] + 44 [ label = "Unknown" ] + 45 [ label = "Unknown" ] + 46 [ label = "Unknown" ] 47 [ label = "Unknown" ] 48 [ label = "Unknown" ] 49 [ label = "Unknown" ] 50 [ label = "Unknown" ] 51 [ label = "Unknown" ] 52 [ label = "Unknown" ] - 53 [ label = "Unknown" ] - 54 [ label = "Unknown" ] + 53 [ label = "Lights RoadIntersection" ] + 54 [ label = "MapEdge" ] 55 [ label = "Unknown" ] - 56 [ label = "Lights RoadIntersection" ] - 57 [ label = "MapEdge" ] + 56 [ label = "Unknown" ] + 57 [ label = "Unknown" ] 58 [ label = "Unknown" ] 59 [ label = "Unknown" ] - 60 [ label = "Unknown" ] - 61 [ label = "Unknown" ] - 62 [ label = "Unknown" ] - 63 [ label = "MapEdge" ] - 64 [ label = "Lights RoadIntersection" ] - 65 [ label = "MapEdge" ] + 60 [ label = "MapEdge" ] + 61 [ label = "Lights RoadIntersection" ] + 62 [ label = "MapEdge" ] + 63 [ label = "Unknown" ] + 64 [ label = "Unknown" ] + 65 [ label = "Unknown" ] 66 [ label = "Unknown" ] 67 [ label = "Unknown" ] 68 [ label = "Unknown" ] @@ -81,60 +81,60 @@ digraph { 79 [ label = "Unknown" ] 80 [ label = "Unknown" ] 81 [ label = "Unknown" ] - 82 [ label = "Unknown" ] + 82 [ label = "Lights RoadIntersection" ] 83 [ label = "Unknown" ] 84 [ label = "Unknown" ] 85 [ label = "Lights RoadIntersection" ] 86 [ label = "Unknown" ] 87 [ label = "Unknown" ] - 88 [ label = "Lights RoadIntersection" ] + 88 [ label = "Unknown" ] 89 [ label = "Unknown" ] 90 [ label = "Unknown" ] - 91 [ label = "Unknown" ] + 91 [ label = "MapEdge" ] 92 [ label = "Unknown" ] - 93 [ label = "MapEdge" ] + 93 [ label = "Unknown" ] 94 [ label = "Unknown" ] - 95 [ label = "MapEdge" ] + 95 [ label = "Unknown" ] 96 [ label = "Unknown" ] 97 [ label = "Unknown" ] - 98 [ label = "Unknown" ] + 98 [ label = "MapEdge" ] 99 [ label = "Unknown" ] - 100 [ label = "Unknown" ] + 100 [ label = "MapEdge" ] 101 [ label = "Unknown" ] - 102 [ label = "MapEdge" ] - 103 [ label = "Unknown" ] - 104 [ label = "MapEdge" ] - 105 [ label = "Unknown" ] + 102 [ label = "Unknown" ] + 103 [ label = "MapEdge" ] + 104 [ label = "Unknown" ] + 105 [ label = "Lights RoadIntersection" ] 106 [ label = "Unknown" ] 107 [ label = "Unknown" ] 108 [ label = "MapEdge" ] - 109 [ label = "Unknown" ] - 110 [ label = "Lights RoadIntersection" ] + 109 [ label = "MapEdge" ] + 110 [ label = "Unknown" ] 111 [ label = "Unknown" ] 112 [ label = "Unknown" ] - 113 [ label = "MapEdge" ] - 114 [ label = "MapEdge" ] - 115 [ label = "Unknown" ] + 113 [ label = "Unknown" ] + 114 [ label = "Lights RoadIntersection" ] + 115 [ label = "MapEdge" ] 116 [ label = "Unknown" ] 117 [ label = "Unknown" ] 118 [ label = "Unknown" ] - 119 [ label = "Lights RoadIntersection" ] + 119 [ label = "MapEdge" ] 120 [ label = "MapEdge" ] 121 [ label = "Unknown" ] 122 [ label = "Unknown" ] - 123 [ label = "Unknown" ] - 124 [ label = "MapEdge" ] - 125 [ label = "Unknown" ] - 126 [ label = "MapEdge" ] + 123 [ label = "MapEdge" ] + 124 [ label = "Unknown" ] + 125 [ label = "MapEdge" ] + 126 [ label = "Unknown" ] 127 [ label = "Unknown" ] - 128 [ label = "Unknown" ] + 128 [ label = "MapEdge" ] 129 [ label = "MapEdge" ] 130 [ label = "Unknown" ] - 131 [ label = "MapEdge" ] + 131 [ label = "Unknown" ] 132 [ label = "Unknown" ] 133 [ label = "Unknown" ] - 134 [ label = "MapEdge" ] - 135 [ label = "MapEdge" ] + 134 [ label = "Unknown" ] + 135 [ label = "Unknown" ] 136 [ label = "Unknown" ] 137 [ label = "Unknown" ] 138 [ label = "Unknown" ] @@ -143,223 +143,217 @@ digraph { 141 [ label = "Unknown" ] 142 [ label = "Unknown" ] 143 [ label = "Unknown" ] - 144 [ label = "Unknown" ] - 145 [ label = "Unknown" ] - 146 [ label = "Unknown" ] - 147 [ label = "Unknown" ] - 148 [ label = "Unknown" ] - 149 [ label = "Unknown" ] - 150 [ label = "MapEdge" ] - 151 [ label = "MapEdge" ] - 152 [ label = "MapEdge" ] - 143 -> 121 [ label = "4 lanes" ] - 121 -> 85 [ label = "2 lanes" ] - 11 -> 110 [ label = "4 lanes" ] - 12 -> 88 [ label = "2 lanes" ] - 16 -> 13 [ label = "2 lanes" ] - 4 -> 13 [ label = "4 lanes" ] - 62 -> 152 [ label = "1 lanes" ] - 25 -> 48 [ label = "2 lanes" ] - 3 -> 67 [ label = "2 lanes" ] - 67 -> 3 [ label = "2 lanes" ] - 67 -> 30 [ label = "2 lanes" ] - 30 -> 67 [ label = "2 lanes" ] - 26 -> 98 [ label = "2 lanes" ] - 98 -> 26 [ label = "2 lanes" ] - 98 -> 101 [ label = "2 lanes" ] - 101 -> 98 [ label = "2 lanes" ] - 101 -> 34 [ label = "2 lanes" ] - 34 -> 101 [ label = "2 lanes" ] - 28 -> 68 [ label = "3 lanes" ] - 68 -> 31 [ label = "3 lanes" ] - 31 -> 29 [ label = "2 lanes" ] - 29 -> 31 [ label = "2 lanes" ] + 144 [ label = "MapEdge" ] + 145 [ label = "MapEdge" ] + 146 [ label = "MapEdge" ] + 137 -> 116 [ label = "4 lanes" ] + 116 -> 82 [ label = "2 lanes" ] + 15 -> 105 [ label = "4 lanes" ] + 16 -> 85 [ label = "2 lanes" ] + 20 -> 17 [ label = "2 lanes" ] + 8 -> 17 [ label = "4 lanes" ] + 59 -> 146 [ label = "1 lanes" ] + 26 -> 45 [ label = "2 lanes" ] + 5 -> 64 [ label = "2 lanes" ] + 64 -> 5 [ label = "2 lanes" ] + 64 -> 30 [ label = "2 lanes" ] + 30 -> 64 [ label = "2 lanes" ] + 27 -> 94 [ label = "2 lanes" ] + 94 -> 27 [ label = "2 lanes" ] + 94 -> 97 [ label = "2 lanes" ] + 97 -> 94 [ label = "2 lanes" ] + 97 -> 34 [ label = "2 lanes" ] + 34 -> 97 [ label = "2 lanes" ] + 29 -> 65 [ label = "3 lanes" ] + 65 -> 31 [ label = "3 lanes" ] + 31 -> 4 [ label = "2 lanes" ] + 4 -> 31 [ label = "2 lanes" ] 32 -> 34 [ label = "2 lanes" ] 34 -> 32 [ label = "2 lanes" ] 34 -> 31 [ label = "2 lanes" ] 31 -> 34 [ label = "2 lanes" ] - 33 -> 28 [ label = "3 lanes" ] - 37 -> 47 [ label = "2 lanes" ] - 47 -> 37 [ label = "2 lanes" ] - 2 -> 23 [ label = "2 lanes" ] - 23 -> 2 [ label = "2 lanes" ] - 23 -> 87 [ label = "2 lanes" ] - 87 -> 23 [ label = "2 lanes" ] - 38 -> 130 [ label = "2 lanes" ] - 130 -> 38 [ label = "2 lanes" ] - 41 -> 38 [ label = "2 lanes" ] - 38 -> 41 [ label = "2 lanes" ] - 87 -> 41 [ label = "2 lanes" ] - 41 -> 87 [ label = "2 lanes" ] - 130 -> 132 [ label = "2 lanes" ] - 132 -> 130 [ label = "2 lanes" ] - 132 -> 40 [ label = "2 lanes" ] - 40 -> 132 [ label = "2 lanes" ] - 41 -> 1 [ label = "2 lanes" ] - 1 -> 41 [ label = "2 lanes" ] - 37 -> 44 [ label = "2 lanes" ] - 44 -> 37 [ label = "2 lanes" ] - 51 -> 149 [ label = "2 lanes" ] - 149 -> 51 [ label = "2 lanes" ] - 122 -> 37 [ label = "2 lanes" ] - 37 -> 122 [ label = "2 lanes" ] - 149 -> 122 [ label = "2 lanes" ] - 122 -> 149 [ label = "2 lanes" ] - 39 -> 38 [ label = "2 lanes" ] - 38 -> 39 [ label = "2 lanes" ] - 40 -> 42 [ label = "1 lanes" ] - 42 -> 40 [ label = "1 lanes" ] - 130 -> 45 [ label = "1 lanes" ] - 88 -> 116 [ label = "5 lanes" ] - 10 -> 5 [ label = "4 lanes" ] - 5 -> 119 [ label = "4 lanes" ] - 27 -> 24 [ label = "4 lanes" ] - 4 -> 11 [ label = "3 lanes" ] - 16 -> 4 [ label = "4 lanes" ] - 13 -> 14 [ label = "4 lanes" ] - 14 -> 91 [ label = "4 lanes" ] - 48 -> 55 [ label = "1 lanes" ] - 47 -> 50 [ label = "2 lanes" ] + 33 -> 29 [ label = "3 lanes" ] + 36 -> 44 [ label = "2 lanes" ] + 44 -> 36 [ label = "2 lanes" ] + 7 -> 25 [ label = "2 lanes" ] + 25 -> 7 [ label = "2 lanes" ] + 25 -> 84 [ label = "2 lanes" ] + 84 -> 25 [ label = "2 lanes" ] + 37 -> 124 [ label = "2 lanes" ] + 124 -> 37 [ label = "2 lanes" ] + 40 -> 37 [ label = "2 lanes" ] + 37 -> 40 [ label = "2 lanes" ] + 84 -> 40 [ label = "2 lanes" ] + 40 -> 84 [ label = "2 lanes" ] + 124 -> 126 [ label = "2 lanes" ] + 126 -> 124 [ label = "2 lanes" ] + 126 -> 39 [ label = "2 lanes" ] + 39 -> 126 [ label = "2 lanes" ] + 40 -> 3 [ label = "2 lanes" ] + 3 -> 40 [ label = "2 lanes" ] + 36 -> 42 [ label = "2 lanes" ] + 42 -> 36 [ label = "2 lanes" ] + 48 -> 143 [ label = "2 lanes" ] + 143 -> 48 [ label = "2 lanes" ] + 117 -> 36 [ label = "2 lanes" ] + 36 -> 117 [ label = "2 lanes" ] + 143 -> 117 [ label = "2 lanes" ] + 117 -> 143 [ label = "2 lanes" ] + 38 -> 37 [ label = "2 lanes" ] + 37 -> 38 [ label = "2 lanes" ] + 39 -> 41 [ label = "1 lanes" ] + 41 -> 39 [ label = "1 lanes" ] + 124 -> 2 [ label = "1 lanes" ] + 85 -> 111 [ label = "5 lanes" ] + 14 -> 9 [ label = "4 lanes" ] + 9 -> 114 [ label = "4 lanes" ] + 28 -> 6 [ label = "4 lanes" ] + 8 -> 15 [ label = "3 lanes" ] + 20 -> 8 [ label = "4 lanes" ] + 17 -> 18 [ label = "4 lanes" ] + 18 -> 88 [ label = "4 lanes" ] + 45 -> 52 [ label = "1 lanes" ] + 44 -> 47 [ label = "2 lanes" ] + 47 -> 44 [ label = "2 lanes" ] 50 -> 47 [ label = "2 lanes" ] - 53 -> 50 [ label = "2 lanes" ] - 52 -> 55 [ label = "2 lanes" ] - 55 -> 96 [ label = "2 lanes" ] - 96 -> 53 [ label = "2 lanes" ] - 48 -> 52 [ label = "2 lanes" ] - 52 -> 22 [ label = "2 lanes" ] - 8 -> 60 [ label = "3 lanes" ] - 60 -> 9 [ label = "3 lanes" ] - 97 -> 8 [ label = "2 lanes" ] - 8 -> 97 [ label = "2 lanes" ] - 7 -> 56 [ label = "4 lanes" ] - 59 -> 61 [ label = "3 lanes" ] - 58 -> 97 [ label = "4 lanes" ] - 97 -> 7 [ label = "4 lanes" ] - 8 -> 145 [ label = "1 lanes" ] - 145 -> 8 [ label = "1 lanes" ] - 145 -> 57 [ label = "1 lanes" ] - 57 -> 145 [ label = "1 lanes" ] - 6 -> 58 [ label = "4 lanes" ] - 64 -> 143 [ label = "2 lanes" ] - 143 -> 136 [ label = "2 lanes" ] - 144 -> 64 [ label = "2 lanes" ] - 67 -> 36 [ label = "1 lanes" ] - 68 -> 66 [ label = "1 lanes" ] - 81 -> 32 [ label = "1 lanes" ] - 73 -> 75 [ label = "1 lanes" ] - 69 -> 72 [ label = "1 lanes" ] + 49 -> 52 [ label = "2 lanes" ] + 52 -> 92 [ label = "2 lanes" ] + 92 -> 50 [ label = "2 lanes" ] + 45 -> 49 [ label = "2 lanes" ] + 49 -> 24 [ label = "2 lanes" ] + 12 -> 57 [ label = "3 lanes" ] + 57 -> 13 [ label = "3 lanes" ] + 93 -> 12 [ label = "2 lanes" ] + 12 -> 93 [ label = "2 lanes" ] + 11 -> 53 [ label = "4 lanes" ] + 56 -> 58 [ label = "3 lanes" ] + 55 -> 93 [ label = "4 lanes" ] + 93 -> 11 [ label = "4 lanes" ] + 12 -> 139 [ label = "1 lanes" ] + 139 -> 12 [ label = "1 lanes" ] + 139 -> 54 [ label = "1 lanes" ] + 54 -> 139 [ label = "1 lanes" ] + 10 -> 55 [ label = "4 lanes" ] + 61 -> 137 [ label = "2 lanes" ] + 137 -> 130 [ label = "2 lanes" ] + 138 -> 61 [ label = "2 lanes" ] + 64 -> 35 [ label = "1 lanes" ] + 65 -> 63 [ label = "1 lanes" ] + 78 -> 32 [ label = "1 lanes" ] + 70 -> 72 [ label = "1 lanes" ] + 66 -> 69 [ label = "1 lanes" ] + 73 -> 74 [ label = "1 lanes" ] + 74 -> 66 [ label = "1 lanes" ] + 67 -> 73 [ label = "1 lanes" ] + 74 -> 75 [ label = "1 lanes" ] + 72 -> 69 [ label = "1 lanes" ] 76 -> 77 [ label = "1 lanes" ] - 77 -> 69 [ label = "1 lanes" ] - 70 -> 76 [ label = "1 lanes" ] - 77 -> 78 [ label = "1 lanes" ] - 75 -> 72 [ label = "1 lanes" ] - 79 -> 80 [ label = "1 lanes" ] - 69 -> 79 [ label = "1 lanes" ] - 71 -> 78 [ label = "1 lanes" ] - 73 -> 117 [ label = "1 lanes" ] - 78 -> 73 [ label = "1 lanes" ] - 54 -> 82 [ label = "1 lanes" ] - 83 -> 84 [ label = "1 lanes" ] - 84 -> 95 [ label = "1 lanes" ] - 84 -> 120 [ label = "1 lanes" ] - 133 -> 128 [ label = "1 lanes" ] - 118 -> 89 [ label = "2 lanes" ] - 86 -> 118 [ label = "1 lanes" ] - 118 -> 86 [ label = "1 lanes" ] - 118 -> 88 [ label = "1 lanes" ] - 88 -> 118 [ label = "1 lanes" ] - 87 -> 89 [ label = "2 lanes" ] - 89 -> 86 [ label = "2 lanes" ] - 5 -> 85 [ label = "5 lanes" ] - 122 -> 148 [ label = "1 lanes" ] - 148 -> 90 [ label = "1 lanes" ] - 91 -> 92 [ label = "1 lanes" ] - 92 -> 0 [ label = "1 lanes" ] - 92 -> 93 [ label = "1 lanes" ] - 94 -> 92 [ label = "1 lanes" ] - 129 -> 15 [ label = "2 lanes" ] - 54 -> 96 [ label = "2 lanes" ] - 112 -> 97 [ label = "2 lanes" ] - 63 -> 99 [ label = "1 lanes" ] - 99 -> 63 [ label = "1 lanes" ] - 99 -> 98 [ label = "1 lanes" ] - 98 -> 99 [ label = "1 lanes" ] - 99 -> 103 [ label = "1 lanes" ] - 103 -> 99 [ label = "1 lanes" ] - 100 -> 101 [ label = "1 lanes" ] - 101 -> 100 [ label = "1 lanes" ] - 103 -> 100 [ label = "1 lanes" ] - 100 -> 103 [ label = "1 lanes" ] - 100 -> 102 [ label = "1 lanes" ] - 102 -> 100 [ label = "1 lanes" ] - 103 -> 104 [ label = "1 lanes" ] - 104 -> 103 [ label = "1 lanes" ] - 124 -> 19 [ label = "4 lanes" ] - 19 -> 107 [ label = "4 lanes" ] - 107 -> 111 [ label = "4 lanes" ] - 111 -> 127 [ label = "4 lanes" ] - 127 -> 16 [ label = "4 lanes" ] - 19 -> 128 [ label = "1 lanes" ] - 128 -> 19 [ label = "1 lanes" ] - 128 -> 123 [ label = "1 lanes" ] - 123 -> 128 [ label = "1 lanes" ] - 123 -> 106 [ label = "1 lanes" ] - 106 -> 123 [ label = "1 lanes" ] - 107 -> 127 [ label = "1 lanes" ] - 109 -> 110 [ label = "2 lanes" ] - 85 -> 142 [ label = "5 lanes" ] - 139 -> 51 [ label = "5 lanes" ] - 142 -> 139 [ label = "5 lanes" ] - 111 -> 119 [ label = "3 lanes" ] - 12 -> 10 [ label = "5 lanes" ] - 112 -> 113 [ label = "1 lanes" ] - 115 -> 114 [ label = "1 lanes" ] - 108 -> 62 [ label = "1 lanes" ] - 126 -> 115 [ label = "1 lanes" ] - 51 -> 90 [ label = "5 lanes" ] - 90 -> 21 [ label = "5 lanes" ] - 110 -> 4 [ label = "1 lanes" ] - 110 -> 10 [ label = "4 lanes" ] - 119 -> 10 [ label = "2 lanes" ] - 119 -> 4 [ label = "4 lanes" ] - 74 -> 70 [ label = "1 lanes" ] - 91 -> 17 [ label = "3 lanes" ] - 15 -> 11 [ label = "5 lanes" ] - 116 -> 64 [ label = "3 lanes" ] - 30 -> 150 [ label = "2 lanes" ] - 46 -> 37 [ label = "3 lanes" ] - 131 -> 132 [ label = "1 lanes" ] - 132 -> 131 [ label = "1 lanes" ] - 61 -> 8 [ label = "3 lanes" ] - 64 -> 59 [ label = "3 lanes" ] - 47 -> 54 [ label = "2 lanes" ] - 54 -> 47 [ label = "2 lanes" ] - 14 -> 94 [ label = "1 lanes" ] - 121 -> 5 [ label = "4 lanes" ] - 56 -> 143 [ label = "4 lanes" ] - 10 -> 88 [ label = "4 lanes" ] - 11 -> 33 [ label = "4 lanes" ] - 33 -> 27 [ label = "4 lanes" ] - 23 -> 109 [ label = "5 lanes" ] - 109 -> 12 [ label = "5 lanes" ] - 65 -> 23 [ label = "5 lanes" ] - 49 -> 53 [ label = "2 lanes" ] - 135 -> 112 [ label = "2 lanes" ] - 49 -> 137 [ label = "2 lanes" ] - 137 -> 138 [ label = "2 lanes" ] - 138 -> 139 [ label = "2 lanes" ] + 66 -> 76 [ label = "1 lanes" ] + 68 -> 75 [ label = "1 lanes" ] + 70 -> 112 [ label = "1 lanes" ] + 75 -> 70 [ label = "1 lanes" ] + 51 -> 79 [ label = "1 lanes" ] + 80 -> 81 [ label = "1 lanes" ] + 81 -> 91 [ label = "1 lanes" ] + 81 -> 115 [ label = "1 lanes" ] + 127 -> 122 [ label = "1 lanes" ] + 113 -> 86 [ label = "2 lanes" ] + 83 -> 113 [ label = "1 lanes" ] + 113 -> 83 [ label = "1 lanes" ] + 113 -> 85 [ label = "1 lanes" ] + 85 -> 113 [ label = "1 lanes" ] + 84 -> 86 [ label = "2 lanes" ] + 86 -> 83 [ label = "2 lanes" ] + 9 -> 82 [ label = "5 lanes" ] + 117 -> 142 [ label = "1 lanes" ] + 142 -> 87 [ label = "1 lanes" ] + 88 -> 89 [ label = "1 lanes" ] + 89 -> 0 [ label = "1 lanes" ] + 89 -> 1 [ label = "1 lanes" ] + 90 -> 89 [ label = "1 lanes" ] + 123 -> 19 [ label = "2 lanes" ] + 51 -> 92 [ label = "2 lanes" ] + 107 -> 93 [ label = "2 lanes" ] + 60 -> 95 [ label = "1 lanes" ] + 95 -> 60 [ label = "1 lanes" ] + 95 -> 94 [ label = "1 lanes" ] + 94 -> 95 [ label = "1 lanes" ] + 95 -> 99 [ label = "1 lanes" ] + 99 -> 95 [ label = "1 lanes" ] + 96 -> 97 [ label = "1 lanes" ] + 97 -> 96 [ label = "1 lanes" ] + 99 -> 96 [ label = "1 lanes" ] + 96 -> 99 [ label = "1 lanes" ] + 96 -> 98 [ label = "1 lanes" ] + 98 -> 96 [ label = "1 lanes" ] + 99 -> 100 [ label = "1 lanes" ] + 100 -> 99 [ label = "1 lanes" ] + 119 -> 22 [ label = "4 lanes" ] + 22 -> 102 [ label = "4 lanes" ] + 102 -> 106 [ label = "4 lanes" ] + 106 -> 121 [ label = "4 lanes" ] + 121 -> 20 [ label = "4 lanes" ] + 22 -> 122 [ label = "1 lanes" ] + 122 -> 22 [ label = "1 lanes" ] + 122 -> 118 [ label = "1 lanes" ] + 118 -> 122 [ label = "1 lanes" ] + 118 -> 101 [ label = "1 lanes" ] + 101 -> 118 [ label = "1 lanes" ] + 102 -> 121 [ label = "1 lanes" ] + 104 -> 105 [ label = "2 lanes" ] + 82 -> 136 [ label = "5 lanes" ] + 133 -> 48 [ label = "5 lanes" ] + 136 -> 133 [ label = "5 lanes" ] + 106 -> 114 [ label = "3 lanes" ] + 16 -> 14 [ label = "5 lanes" ] + 107 -> 108 [ label = "1 lanes" ] + 110 -> 109 [ label = "1 lanes" ] + 103 -> 59 [ label = "1 lanes" ] + 120 -> 110 [ label = "1 lanes" ] + 48 -> 87 [ label = "5 lanes" ] + 87 -> 23 [ label = "5 lanes" ] + 105 -> 8 [ label = "1 lanes" ] + 105 -> 14 [ label = "4 lanes" ] + 114 -> 14 [ label = "2 lanes" ] + 114 -> 8 [ label = "4 lanes" ] + 71 -> 67 [ label = "1 lanes" ] + 88 -> 21 [ label = "3 lanes" ] + 19 -> 15 [ label = "5 lanes" ] + 111 -> 61 [ label = "3 lanes" ] + 30 -> 144 [ label = "2 lanes" ] + 43 -> 36 [ label = "3 lanes" ] + 125 -> 126 [ label = "1 lanes" ] + 126 -> 125 [ label = "1 lanes" ] + 58 -> 12 [ label = "3 lanes" ] + 61 -> 56 [ label = "3 lanes" ] + 44 -> 51 [ label = "2 lanes" ] + 51 -> 44 [ label = "2 lanes" ] + 18 -> 90 [ label = "1 lanes" ] + 116 -> 9 [ label = "4 lanes" ] + 53 -> 137 [ label = "4 lanes" ] + 14 -> 85 [ label = "4 lanes" ] + 15 -> 33 [ label = "4 lanes" ] + 33 -> 28 [ label = "4 lanes" ] + 25 -> 104 [ label = "5 lanes" ] + 104 -> 16 [ label = "5 lanes" ] + 62 -> 25 [ label = "5 lanes" ] + 46 -> 50 [ label = "2 lanes" ] + 129 -> 107 [ label = "2 lanes" ] + 46 -> 131 [ label = "2 lanes" ] + 131 -> 132 [ label = "2 lanes" ] + 132 -> 133 [ label = "2 lanes" ] + 135 -> 134 [ label = "2 lanes" ] + 136 -> 131 [ label = "1 lanes" ] + 113 -> 138 [ label = "2 lanes" ] + 140 -> 139 [ label = "2 lanes" ] 141 -> 140 [ label = "2 lanes" ] - 142 -> 137 [ label = "1 lanes" ] - 118 -> 144 [ label = "2 lanes" ] - 146 -> 145 [ label = "2 lanes" ] - 147 -> 146 [ label = "2 lanes" ] - 83 -> 134 [ label = "1 lanes" ] - 145 -> 83 [ label = "1 lanes" ] - 138 -> 149 [ label = "1 lanes" ] - 149 -> 148 [ label = "1 lanes" ] - 151 -> 87 [ label = "2 lanes" ] - 136 -> 49 [ label = "2 lanes" ] - 140 -> 136 [ label = "2 lanes" ] - 112 -> 141 [ label = "2 lanes" ] - 144 -> 147 [ label = "2 lanes" ] + 80 -> 128 [ label = "1 lanes" ] + 139 -> 80 [ label = "1 lanes" ] + 132 -> 143 [ label = "1 lanes" ] + 143 -> 142 [ label = "1 lanes" ] + 145 -> 84 [ label = "2 lanes" ] + 130 -> 46 [ label = "2 lanes" ] + 134 -> 130 [ label = "2 lanes" ] + 107 -> 135 [ label = "2 lanes" ] + 138 -> 141 [ label = "2 lanes" ] } diff --git a/tests/src/leeds_cycleway/geometry.json b/tests/src/leeds_cycleway/geometry.json index 65399e64..d61890f2 100644 --- a/tests/src/leeds_cycleway/geometry.json +++ b/tests/src/leeds_cycleway/geometry.json @@ -29,7 +29,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 7275677007, + "dst_i": -24, "osm_way_id": 4049157, "src_i": 26109193, "type": "road" @@ -675,7 +675,7 @@ "properties": { "dst_i": 342605804, "osm_way_id": 5947236, - "src_i": -1, + "src_i": -23, "type": "road" }, "type": "Feature" @@ -961,7 +961,7 @@ "type": "Polygon" }, "properties": { - "dst_i": -9, + "dst_i": -3, "osm_way_id": 6072858, "src_i": 26298441, "type": "road" @@ -1311,7 +1311,7 @@ "properties": { "dst_i": 320959868, "osm_way_id": 23161684, - "src_i": -2, + "src_i": -7, "type": "road" }, "type": "Feature" @@ -1383,7 +1383,7 @@ "properties": { "dst_i": 320943572, "osm_way_id": 23162897, - "src_i": -3, + "src_i": -6, "type": "road" }, "type": "Feature" @@ -1677,7 +1677,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 26109188, + "dst_i": -1, "osm_way_id": 27478661, "src_i": 26109193, "type": "road" @@ -2795,7 +2795,7 @@ "properties": { "dst_i": 320943620, "osm_way_id": 29184666, - "src_i": -4, + "src_i": -14, "type": "road" }, "type": "Feature" @@ -2969,7 +2969,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 320951155, + "dst_i": -10, "osm_way_id": 29185651, "src_i": 320951161, "type": "road" @@ -4689,7 +4689,7 @@ "type": "Polygon" }, "properties": { - "dst_i": -10, + "dst_i": -11, "osm_way_id": 30831800, "src_i": 342579565, "type": "road" @@ -5469,7 +5469,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 301688528, + "dst_i": -8, "osm_way_id": 39070659, "src_i": 10440056, "type": "road" @@ -5889,7 +5889,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 26661423, + "dst_i": -5, "osm_way_id": 54108085, "src_i": 320943617, "type": "road" @@ -8045,7 +8045,7 @@ "type": "Polygon" }, "properties": { - "dst_i": -11, + "dst_i": -20, "osm_way_id": 155080992, "src_i": 6584937059, "type": "road" @@ -9851,7 +9851,7 @@ "properties": { "dst_i": 26109190, "osm_way_id": 192930242, - "src_i": -6, + "src_i": -2, "type": "road" }, "type": "Feature" @@ -10721,7 +10721,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 1020737635, + "dst_i": -12, "osm_way_id": 363048953, "src_i": 478743247, "type": "road" @@ -11069,7 +11069,7 @@ "type": "Polygon" }, "properties": { - "dst_i": -12, + "dst_i": -17, "osm_way_id": 438378833, "src_i": 5506378693, "type": "road" @@ -11525,7 +11525,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 4457095865, + "dst_i": -16, "osm_way_id": 448727590, "src_i": 4457095876, "type": "road" @@ -11643,7 +11643,7 @@ "properties": { "dst_i": 4457095875, "osm_way_id": 448727594, - "src_i": -7, + "src_i": -15, "type": "road" }, "type": "Feature" @@ -13197,7 +13197,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 5506378690, + "dst_i": -18, "osm_way_id": 573276629, "src_i": 5506378693, "type": "road" @@ -13233,7 +13233,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 5506378735, + "dst_i": -19, "osm_way_id": 573276640, "src_i": 4361246654, "type": "road" @@ -19305,7 +19305,7 @@ "type": "Polygon" }, "properties": { - "dst_i": -8, + "dst_i": -22, "osm_way_id": 673731119, "src_i": 6309354609, "type": "road" @@ -21305,7 +21305,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 1277537020, + "dst_i": -13, "osm_way_id": 709186193, "src_i": 320943617, "type": "road" @@ -24579,7 +24579,7 @@ "properties": { "dst_i": 320943620, "osm_way_id": 778025048, - "src_i": 6264670282, + "src_i": -21, "type": "road" }, "type": "Feature" @@ -26341,7 +26341,7 @@ "type": "Polygon" }, "properties": { - "dst_i": -13, + "dst_i": -26, "osm_way_id": 894330332, "src_i": 8312439368, "type": "road" @@ -26353,31 +26353,31 @@ "coordinates": [ [ [ - -1.532190335837435, - 53.80030775300855 + -1.532226615010539, + 53.80031455727627 ], [ - -1.5320692144349348, - 53.80028503524398 + -1.532154056664331, + 53.80030095143881 ], [ - -1.53206, - 53.800302178113554 + -1.5321448422293962, + 53.80031809430838 ], [ - -1.5321811214025003, - 53.800324895878134 + -1.5322174005756044, + 53.80033170014585 ], [ - -1.532190335837435, - 53.80030775300855 + -1.532226615010539, + 53.80031455727627 ] ] ], "type": "Polygon" }, "properties": { - "dst_i": 8312439365, + "dst_i": -25, "osm_way_id": 894330334, "src_i": 8312439361, "type": "road" @@ -26425,8 +26425,8 @@ "coordinates": [ [ [ - -1.5322166910702044, - 53.80029809429387 + -1.5322221478670992, + 53.800303044160316 ], [ -1.532195265834183, @@ -26445,12 +26445,12 @@ 53.800286799713085 ], [ - -1.532191173236512, - 53.80030790949053 + -1.5321966300334067, + 53.80031285935697 ], [ - -1.5322166910702044, - 53.80029809429387 + -1.5322221478670992, + 53.800303044160316 ] ] ], @@ -30395,8 +30395,8 @@ "properties": { "complexity": "MapEdge", "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/-13", - "osm_node_id": -13, + "osm_link": "https://www.openstreetmap.org/node/-26", + "osm_node_id": -26, "type": "intersection" }, "type": "Feature" @@ -30406,24 +30406,24 @@ "coordinates": [ [ [ - -1.5318494550338804, - 53.798692888758985 + -1.5320178651235319, + 53.80029428386798 ], [ - -1.5318587090549534, - 53.798657333177644 + -1.5320270795584667, + 53.8002771409984 ], [ - -1.5319903847309115, - 53.79866928965918 + -1.532154056664331, + 53.80030095143881 ], [ - -1.5319811307098385, - 53.79870484524052 + -1.5321448422293962, + 53.80031809430838 ], [ - -1.5318494550338804, - 53.798692888758985 + -1.5320178651235319, + 53.80029428386798 ] ] ], @@ -30432,8 +30432,156 @@ "properties": { "complexity": "MapEdge", "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/-12", - "osm_node_id": -12, + "osm_link": "https://www.openstreetmap.org/node/-25", + "osm_node_id": -25, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -1.5392521648851742, + 53.79879820292323 + ], + [ + -1.539246577149515, + 53.79883346712435 + ], + [ + -1.5391139346582587, + 53.798826133156176 + ], + [ + -1.539119522393918, + 53.79879086895505 + ], + [ + -1.5392521648851742, + 53.79879820292323 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-24", + "osm_node_id": -24, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -1.539137642187401, + 53.79884669704536 + ], + [ + -1.539128305948964, + 53.79888168425541 + ], + [ + -1.5390471102119123, + 53.7988741245575 + ], + [ + -1.5390564464503493, + 53.79883913734745 + ], + [ + -1.539137642187401, + 53.79884669704536 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-23", + "osm_node_id": -23, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -1.5340049248257623, + 53.795383173691654 + ], + [ + -1.534026444459498, + 53.79541682630835 + ], + [ + -1.5338697016228051, + 53.79543664196191 + ], + [ + -1.5338680877264022, + 53.79540068168582 + ], + [ + -1.5340049248257623, + 53.795383173691654 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-22", + "osm_node_id": -22, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -1.5340599312873162, + 53.79528678889222 + ], + [ + -1.5341566767639563, + 53.795281959534876 + ], + [ + -1.5341678963890446, + 53.795360370491515 + ], + [ + -1.5340711509124045, + 53.79536519984886 + ], + [ + -1.5340599312873162, + 53.79528678889222 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-21", + "osm_node_id": -21, "type": "intersection" }, "type": "Feature" @@ -30469,8 +30617,8 @@ "properties": { "complexity": "MapEdge", "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/-11", - "osm_node_id": -11, + "osm_link": "https://www.openstreetmap.org/node/-20", + "osm_node_id": -20, "type": "intersection" }, "type": "Feature" @@ -30480,24 +30628,24 @@ "coordinates": [ [ [ - -1.5320750427325107, - 53.79642436514781 + -1.5318602194183795, + 53.79807017055926 ], [ - -1.5320449572674892, - 53.79635579187086 + -1.531864144536235, + 53.79805233341335 ], [ - -1.5321923425501323, - 53.79633323148757 + -1.5319962556597133, + 53.79806247776173 ], [ - -1.532222428015154, - 53.79640180476452 + -1.531992330541858, + 53.79808031490764 ], [ - -1.5320750427325107, - 53.79642436514781 + -1.5318602194183795, + 53.79807017055926 ] ] ], @@ -30506,8 +30654,8 @@ "properties": { "complexity": "MapEdge", "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/-10", - "osm_node_id": -10, + "osm_link": "https://www.openstreetmap.org/node/-19", + "osm_node_id": -19, "type": "intersection" }, "type": "Feature" @@ -30517,24 +30665,24 @@ "coordinates": [ [ [ - -1.5328849644619986, - 53.80036084806033 + -1.532062076749711, + 53.79881885584526 ], [ - -1.5328344007831842, - 53.800399578247145 + -1.5320017657456402, + 53.79881385921409 ], [ - -1.5327289022023738, - 53.800351523893305 + -1.5320202707426986, + 53.798735931193185 ], [ - -1.532779465881188, - 53.80031279370649 + -1.5320805817467693, + 53.79874092782436 ], [ - -1.5328849644619986, - 53.80036084806033 + -1.532062076749711, + 53.79881885584526 ] ] ], @@ -30543,8 +30691,8 @@ "properties": { "complexity": "MapEdge", "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/-9", - "osm_node_id": -9, + "osm_link": "https://www.openstreetmap.org/node/-18", + "osm_node_id": -18, "type": "intersection" }, "type": "Feature" @@ -30554,24 +30702,24 @@ "coordinates": [ [ [ - -1.5340049248257623, - 53.795383173691654 + -1.5318494550338804, + 53.798692888758985 ], [ - -1.534026444459498, - 53.79541682630835 + -1.5318587090549534, + 53.798657333177644 ], [ - -1.5338697016228051, - 53.79543664196191 + -1.5319903847309115, + 53.79866928965918 ], [ - -1.5338680877264022, - 53.79540068168582 + -1.5319811307098385, + 53.79870484524052 ], [ - -1.5340049248257623, - 53.795383173691654 + -1.5318494550338804, + 53.798692888758985 ] ] ], @@ -30580,8 +30728,45 @@ "properties": { "complexity": "MapEdge", "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/-8", - "osm_node_id": -8, + "osm_link": "https://www.openstreetmap.org/node/-17", + "osm_node_id": -17, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -1.53905, + 53.798073257031206 + ], + [ + -1.5390497472577331, + 53.798091243464505 + ], + [ + -1.5388974989702682, + 53.79809049343024 + ], + [ + -1.538897751712535, + 53.79807250699694 + ], + [ + -1.53905, + 53.798073257031206 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-16", + "osm_node_id": -16, "type": "intersection" }, "type": "Feature" @@ -30614,6 +30799,265 @@ ], "type": "Polygon" }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-15", + "osm_node_id": -15, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -1.53432838163834, + 53.79531721474278 + ], + [ + -1.5343523951987812, + 53.795340165431675 + ], + [ + -1.5342390676978723, + 53.795381534228255 + ], + [ + -1.534215054137431, + 53.79535858353937 + ], + [ + -1.53432838163834, + 53.79531721474278 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-14", + "osm_node_id": -14, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -1.5341929605046918, + 53.795302538712534 + ], + [ + -1.5342456313840924, + 53.79528447853486 + ], + [ + -1.534312515209646, + 53.79535253380253 + ], + [ + -1.534259844330245, + 53.7953705939802 + ], + [ + -1.5341929605046918, + 53.795302538712534 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-13", + "osm_node_id": -13, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -1.53206, + 53.79598112547205 + ], + [ + -1.5320437605480808, + 53.79596591074813 + ], + [ + -1.5321725570937579, + 53.79591795082306 + ], + [ + -1.532188796545677, + 53.79593316554699 + ], + [ + -1.53206, + 53.79598112547205 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-12", + "osm_node_id": -12, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -1.5320750427325107, + 53.79642436514781 + ], + [ + -1.5320449572674892, + 53.79635579187086 + ], + [ + -1.5321923425501323, + 53.79633323148757 + ], + [ + -1.532222428015154, + 53.79640180476452 + ], + [ + -1.5320750427325107, + 53.79642436514781 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-11", + "osm_node_id": -11, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -1.5378200069200596, + 53.7953951931257 + ], + [ + -1.537873898879569, + 53.79541072261221 + ], + [ + -1.5378071399026052, + 53.79549154824752 + ], + [ + -1.5377532479430958, + 53.79547601876101 + ], + [ + -1.5378200069200596, + 53.7953951931257 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-10", + "osm_node_id": -10, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -1.539060363955486, + 53.79632437496782 + ], + [ + -1.539039636044514, + 53.79634323194448 + ], + [ + -1.5389119387754435, + 53.79629425668526 + ], + [ + -1.5389326666864154, + 53.79627539970859 + ], + [ + -1.539060363955486, + 53.79632437496782 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-8", + "osm_node_id": -8, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -1.5390532171349995, + 53.7965055720955 + ], + [ + -1.5390485581510438, + 53.79654088306135 + ], + [ + -1.5388967651041678, + 53.79653389353337 + ], + [ + -1.5389014240881238, + 53.79649858256752 + ], + [ + -1.5390532171349995, + 53.7965055720955 + ] + ] + ], + "type": "Polygon" + }, "properties": { "complexity": "MapEdge", "control": "Border", @@ -30623,6 +31067,117 @@ }, "type": "Feature" }, + { + "geometry": { + "coordinates": [ + [ + [ + -1.53531614409363, + 53.795435773217186 + ], + [ + -1.5353317532124258, + 53.795379171710245 + ], + [ + -1.5354632431380433, + 53.795391823367424 + ], + [ + -1.5354476340192476, + 53.795448424874365 + ], + [ + -1.53531614409363, + 53.795435773217186 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-6", + "osm_node_id": -6, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -1.534582338895156, + 53.795350488745065 + ], + [ + -1.5346126314261312, + 53.79540497324881 + ], + [ + -1.5344860608394553, + 53.7954295265289 + ], + [ + -1.5344557652633923, + 53.79537504202516 + ], + [ + -1.534582338895156, + 53.795350488745065 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-5", + "osm_node_id": -5, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -1.5328849644619986, + 53.80036084806033 + ], + [ + -1.5328344007831842, + 53.800399578247145 + ], + [ + -1.5327289022023738, + 53.800351523893305 + ], + [ + -1.532779465881188, + 53.80031279370649 + ], + [ + -1.5328849644619986, + 53.80036084806033 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-3", + "osm_node_id": -3, + "type": "intersection" + }, + "type": "Feature" + }, { "geometry": { "coordinates": [ @@ -30651,117 +31206,6 @@ ], "type": "Polygon" }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/-6", - "osm_node_id": -6, - "type": "intersection" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - [ - [ - -1.53432838163834, - 53.79531721474278 - ], - [ - -1.5343523951987812, - 53.795340165431675 - ], - [ - -1.5342390676978723, - 53.795381534228255 - ], - [ - -1.534215054137431, - 53.79535858353937 - ], - [ - -1.53432838163834, - 53.79531721474278 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/-4", - "osm_node_id": -4, - "type": "intersection" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - [ - [ - -1.53531614409363, - 53.795435773217186 - ], - [ - -1.5353317532124258, - 53.795379171710245 - ], - [ - -1.5354632431380433, - 53.795391823367424 - ], - [ - -1.5354476340192476, - 53.795448424874365 - ], - [ - -1.53531614409363, - 53.795435773217186 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/-3", - "osm_node_id": -3, - "type": "intersection" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - [ - [ - -1.5390532171349995, - 53.7965055720955 - ], - [ - -1.5390485581510438, - 53.79654088306135 - ], - [ - -1.5388967651041678, - 53.79653389353337 - ], - [ - -1.5389014240881238, - 53.79649858256752 - ], - [ - -1.5390532171349995, - 53.7965055720955 - ] - ] - ], - "type": "Polygon" - }, "properties": { "complexity": "MapEdge", "control": "Border", @@ -30776,24 +31220,24 @@ "coordinates": [ [ [ - -1.539137642187401, - 53.79884669704536 + -1.5390636998489, + 53.798662304627804 ], [ - -1.539128305948964, - 53.79888168425541 + -1.5390931397553607, + 53.798666900161514 ], [ - -1.5390471102119123, - 53.7988741245575 + -1.5390590987216077, + 53.79874297827775 ], [ - -1.5390564464503493, - 53.79883913734745 + -1.5390296588151473, + 53.79873838274405 ], [ - -1.539137642187401, - 53.79884669704536 + -1.5390636998489, + 53.798662304627804 ] ] ], @@ -31675,43 +32119,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -1.5390636998489, - 53.798662304627804 - ], - [ - -1.5390931397553607, - 53.798666900161514 - ], - [ - -1.5390590987216077, - 53.79874297827775 - ], - [ - -1.5390296588151473, - 53.79873838274405 - ], - [ - -1.5390636998489, - 53.798662304627804 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/26109188", - "osm_node_id": 26109188, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ @@ -32697,43 +33104,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -1.534582338895156, - 53.795350488745065 - ], - [ - -1.5346126314261312, - 53.79540497324881 - ], - [ - -1.5344860608394553, - 53.7954295265289 - ], - [ - -1.5344557652633923, - 53.79537504202516 - ], - [ - -1.534582338895156, - 53.795350488745065 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/26661423", - "osm_node_id": 26661423, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ @@ -33462,43 +33832,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -1.539060363955486, - 53.79632437496782 - ], - [ - -1.539039636044514, - 53.79634323194448 - ], - [ - -1.5389119387754435, - 53.79629425668526 - ], - [ - -1.5389326666864154, - 53.79627539970859 - ], - [ - -1.539060363955486, - 53.79632437496782 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/301688528", - "osm_node_id": 301688528, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ @@ -34434,43 +34767,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -1.5378200069200596, - 53.7953951931257 - ], - [ - -1.537873898879569, - 53.79541072261221 - ], - [ - -1.5378071399026052, - 53.79549154824752 - ], - [ - -1.5377532479430958, - 53.79547601876101 - ], - [ - -1.5378200069200596, - 53.7953951931257 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/320951155", - "osm_node_id": 320951155, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ @@ -37317,43 +37613,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -1.53206, - 53.79598112547205 - ], - [ - -1.5320437605480808, - 53.79596591074813 - ], - [ - -1.5321725570937579, - 53.79591795082306 - ], - [ - -1.532188796545677, - 53.79593316554699 - ], - [ - -1.53206, - 53.79598112547205 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/1020737635", - "osm_node_id": 1020737635, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ @@ -37714,43 +37973,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -1.5341929605046918, - 53.795302538712534 - ], - [ - -1.5342456313840924, - 53.79528447853486 - ], - [ - -1.534312515209646, - 53.79535253380253 - ], - [ - -1.534259844330245, - 53.7953705939802 - ], - [ - -1.5341929605046918, - 53.795302538712534 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/1277537020", - "osm_node_id": 1277537020, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ @@ -42159,43 +42381,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -1.53905, - 53.798073257031206 - ], - [ - -1.5390497472577331, - 53.798091243464505 - ], - [ - -1.5388974989702682, - 53.79809049343024 - ], - [ - -1.538897751712535, - 53.79807250699694 - ], - [ - -1.53905, - 53.798073257031206 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/4457095865", - "osm_node_id": 4457095865, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ @@ -43946,43 +44131,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -1.532062076749711, - 53.79881885584526 - ], - [ - -1.5320017657456402, - 53.79881385921409 - ], - [ - -1.5320202707426986, - 53.798735931193185 - ], - [ - -1.5320805817467693, - 53.79874092782436 - ], - [ - -1.532062076749711, - 53.79881885584526 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/5506378690", - "osm_node_id": 5506378690, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ @@ -44028,43 +44176,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -1.5318602194183795, - 53.79807017055926 - ], - [ - -1.531864144536235, - 53.79805233341335 - ], - [ - -1.5319962556597133, - 53.79806247776173 - ], - [ - -1.531992330541858, - 53.79808031490764 - ], - [ - -1.5318602194183795, - 53.79807017055926 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/5506378735", - "osm_node_id": 5506378735, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ @@ -48642,43 +48753,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -1.5340599312873162, - 53.79528678889222 - ], - [ - -1.5341566767639563, - 53.795281959534876 - ], - [ - -1.5341678963890446, - 53.795360370491515 - ], - [ - -1.5340711509124045, - 53.79536519984886 - ], - [ - -1.5340599312873162, - 53.79528678889222 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/6264670282", - "osm_node_id": 6264670282, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ @@ -52758,43 +52832,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -1.5392521648851742, - 53.79879820292323 - ], - [ - -1.539246577149515, - 53.79883346712435 - ], - [ - -1.5391139346582587, - 53.798826133156176 - ], - [ - -1.539119522393918, - 53.79879086895505 - ], - [ - -1.5392521648851742, - 53.79879820292323 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/7275677007", - "osm_node_id": 7275677007, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ @@ -53401,16 +53438,16 @@ 53.80033170014585 ], [ - -1.5321811214025003, - 53.800324895878134 + -1.532226615010539, + 53.80031455727627 ], [ - -1.532190335837435, - 53.80030775300855 + -1.5321966300334067, + 53.80031285935697 ], [ - -1.5322166910702044, - 53.80029809429387 + -1.5322221478670992, + 53.800303044160316 ], [ -1.5322397378153478, @@ -53429,43 +53466,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -1.5319815889955153, - 53.800287471506365 - ], - [ - -1.5319908034304501, - 53.80027032863679 - ], - [ - -1.5320692144349348, - 53.80028503524398 - ], - [ - -1.53206, - 53.800302178113554 - ], - [ - -1.5319815889955153, - 53.800287471506365 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/8312439365", - "osm_node_id": 8312439365, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ diff --git a/tests/src/leeds_cycleway/road_network.dot b/tests/src/leeds_cycleway/road_network.dot index 1b80eed1..8f39e11f 100644 --- a/tests/src/leeds_cycleway/road_network.dot +++ b/tests/src/leeds_cycleway/road_network.dot @@ -12,98 +12,98 @@ digraph { 10 [ label = "MapEdge" ] 11 [ label = "MapEdge" ] 12 [ label = "MapEdge" ] - 13 [ label = "Unknown" ] - 14 [ label = "Lights RoadIntersection" ] - 15 [ label = "Unknown" ] - 16 [ label = "Unknown" ] - 17 [ label = "Unknown" ] - 18 [ label = "Lights RoadIntersection" ] - 19 [ label = "Unknown" ] - 20 [ label = "Unknown" ] - 21 [ label = "Unknown" ] - 22 [ label = "Lights RoadIntersection" ] - 23 [ label = "Lights RoadIntersection" ] - 24 [ label = "Unknown" ] - 25 [ label = "Unknown" ] - 26 [ label = "MapEdge" ] - 27 [ label = "Unknown" ] - 28 [ label = "MapEdge" ] + 13 [ label = "MapEdge" ] + 14 [ label = "MapEdge" ] + 15 [ label = "MapEdge" ] + 16 [ label = "MapEdge" ] + 17 [ label = "MapEdge" ] + 18 [ label = "MapEdge" ] + 19 [ label = "MapEdge" ] + 20 [ label = "MapEdge" ] + 21 [ label = "MapEdge" ] + 22 [ label = "MapEdge" ] + 23 [ label = "MapEdge" ] + 24 [ label = "MapEdge" ] + 25 [ label = "MapEdge" ] + 26 [ label = "Unknown" ] + 27 [ label = "Lights RoadIntersection" ] + 28 [ label = "Unknown" ] 29 [ label = "Unknown" ] 30 [ label = "Unknown" ] - 31 [ label = "Unknown" ] + 31 [ label = "Lights RoadIntersection" ] 32 [ label = "Unknown" ] - 33 [ label = "MapEdge" ] - 34 [ label = "MapEdge" ] - 35 [ label = "Unknown" ] + 33 [ label = "Unknown" ] + 34 [ label = "Lights RoadIntersection" ] + 35 [ label = "Lights RoadIntersection" ] 36 [ label = "Unknown" ] 37 [ label = "Unknown" ] - 38 [ label = "Unknown" ] - 39 [ label = "Unknown" ] + 38 [ label = "MapEdge" ] + 39 [ label = "MapEdge" ] 40 [ label = "Unknown" ] 41 [ label = "Unknown" ] 42 [ label = "Unknown" ] 43 [ label = "Unknown" ] - 44 [ label = "Unknown" ] + 44 [ label = "MapEdge" ] 45 [ label = "Unknown" ] 46 [ label = "Unknown" ] - 47 [ label = "MapEdge" ] + 47 [ label = "Unknown" ] 48 [ label = "Unknown" ] 49 [ label = "Unknown" ] - 50 [ label = "MapEdge" ] - 51 [ label = "MapEdge" ] + 50 [ label = "Unknown" ] + 51 [ label = "Unknown" ] 52 [ label = "Unknown" ] 53 [ label = "Unknown" ] 54 [ label = "Unknown" ] 55 [ label = "Unknown" ] - 56 [ label = "MapEdge" ] - 57 [ label = "MapEdge" ] + 56 [ label = "Unknown" ] + 57 [ label = "Unknown" ] 58 [ label = "Unknown" ] - 59 [ label = "Lights RoadIntersection" ] - 60 [ label = "Unknown" ] + 59 [ label = "MapEdge" ] + 60 [ label = "MapEdge" ] 61 [ label = "Unknown" ] 62 [ label = "Unknown" ] 63 [ label = "Unknown" ] 64 [ label = "Unknown" ] - 65 [ label = "Unknown" ] - 66 [ label = "Unknown" ] + 65 [ label = "MapEdge" ] + 66 [ label = "Lights RoadIntersection" ] 67 [ label = "Unknown" ] 68 [ label = "Unknown" ] - 69 [ label = "MapEdge" ] + 69 [ label = "Unknown" ] 70 [ label = "Unknown" ] - 71 [ label = "Lights RoadIntersection" ] + 71 [ label = "Unknown" ] 72 [ label = "Unknown" ] 73 [ label = "Unknown" ] - 74 [ label = "MapEdge" ] - 75 [ label = "Lights RoadIntersection" ] + 74 [ label = "Unknown" ] + 75 [ label = "Unknown" ] 76 [ label = "MapEdge" ] 77 [ label = "Unknown" ] 78 [ label = "Unknown" ] 79 [ label = "Unknown" ] - 80 [ label = "Unknown" ] - 81 [ label = "Unknown" ] - 82 [ label = "MapEdge" ] + 80 [ label = "MapEdge" ] + 81 [ label = "Lights RoadIntersection" ] + 82 [ label = "Unknown" ] 83 [ label = "Unknown" ] 84 [ label = "Unknown" ] - 85 [ label = "Lights RoadIntersection" ] + 85 [ label = "Unknown" ] 86 [ label = "Unknown" ] - 87 [ label = "Lights RoadIntersection" ] + 87 [ label = "MapEdge" ] 88 [ label = "Lights RoadIntersection" ] 89 [ label = "Unknown" ] - 90 [ label = "Unknown" ] - 91 [ label = "Unknown" ] + 90 [ label = "Lights RoadIntersection" ] + 91 [ label = "Lights RoadIntersection" ] 92 [ label = "Unknown" ] - 93 [ label = "Lights RoadIntersection" ] + 93 [ label = "Unknown" ] 94 [ label = "Unknown" ] - 95 [ label = "Lights RoadIntersection" ] + 95 [ label = "Unknown" ] 96 [ label = "Lights RoadIntersection" ] - 97 [ label = "MapEdge" ] - 98 [ label = "MapEdge" ] - 99 [ label = "Unknown" ] - 100 [ label = "Unknown" ] + 97 [ label = "Unknown" ] + 98 [ label = "Lights RoadIntersection" ] + 99 [ label = "Lights RoadIntersection" ] + 100 [ label = "MapEdge" ] 101 [ label = "Unknown" ] - 102 [ label = "Lights RoadIntersection" ] + 102 [ label = "Unknown" ] 103 [ label = "Unknown" ] - 104 [ label = "Unknown" ] + 104 [ label = "Lights RoadIntersection" ] 105 [ label = "Unknown" ] 106 [ label = "Unknown" ] 107 [ label = "Unknown" ] @@ -132,44 +132,44 @@ digraph { 130 [ label = "Unknown" ] 131 [ label = "Unknown" ] 132 [ label = "Unknown" ] - 133 [ label = "MapEdge" ] + 133 [ label = "Unknown" ] 134 [ label = "Unknown" ] - 135 [ label = "Unknown" ] + 135 [ label = "MapEdge" ] 136 [ label = "Unknown" ] 137 [ label = "Unknown" ] 138 [ label = "Unknown" ] 139 [ label = "Unknown" ] - 140 [ label = "MapEdge" ] - 141 [ label = "MapEdge" ] - 142 [ label = "Unknown" ] - 143 [ label = "Unknown" ] + 140 [ label = "Unknown" ] + 141 [ label = "Unknown" ] + 142 [ label = "MapEdge" ] + 143 [ label = "MapEdge" ] 144 [ label = "Unknown" ] 145 [ label = "Unknown" ] - 146 [ label = "MapEdge" ] + 146 [ label = "Unknown" ] 147 [ label = "Unknown" ] - 148 [ label = "Unknown" ] - 149 [ label = "MapEdge" ] + 148 [ label = "MapEdge" ] + 149 [ label = "Unknown" ] 150 [ label = "Unknown" ] - 151 [ label = "Lights RoadIntersection" ] + 151 [ label = "MapEdge" ] 152 [ label = "Unknown" ] 153 [ label = "Lights RoadIntersection" ] - 154 [ label = "Lights RoadIntersection" ] - 155 [ label = "Unknown" ] - 156 [ label = "MapEdge" ] + 154 [ label = "Unknown" ] + 155 [ label = "Lights RoadIntersection" ] + 156 [ label = "Lights RoadIntersection" ] 157 [ label = "Unknown" ] - 158 [ label = "Lights RoadIntersection" ] + 158 [ label = "MapEdge" ] 159 [ label = "Unknown" ] - 160 [ label = "Unknown" ] - 161 [ label = "MapEdge" ] + 160 [ label = "Lights RoadIntersection" ] + 161 [ label = "Unknown" ] 162 [ label = "Unknown" ] 163 [ label = "Unknown" ] 164 [ label = "Unknown" ] 165 [ label = "Unknown" ] - 166 [ label = "Lights RoadIntersection" ] + 166 [ label = "Unknown" ] 167 [ label = "Lights RoadIntersection" ] - 168 [ label = "Unknown" ] + 168 [ label = "Lights RoadIntersection" ] 169 [ label = "Unknown" ] - 170 [ label = "MapEdge" ] + 170 [ label = "Unknown" ] 171 [ label = "Unknown" ] 172 [ label = "Lights RoadIntersection" ] 173 [ label = "Unknown" ] @@ -201,12 +201,12 @@ digraph { 199 [ label = "Unknown" ] 200 [ label = "Unknown" ] 201 [ label = "Unknown" ] - 202 [ label = "Unknown" ] + 202 [ label = "MapEdge" ] 203 [ label = "MapEdge" ] - 204 [ label = "MapEdge" ] - 205 [ label = "Unknown" ] + 204 [ label = "Unknown" ] + 205 [ label = "MapEdge" ] 206 [ label = "MapEdge" ] - 207 [ label = "MapEdge" ] + 207 [ label = "Unknown" ] 208 [ label = "Unknown" ] 209 [ label = "Unknown" ] 210 [ label = "Unknown" ] @@ -215,35 +215,35 @@ digraph { 213 [ label = "Unknown" ] 214 [ label = "Unknown" ] 215 [ label = "Unknown" ] - 216 [ label = "Unknown" ] - 217 [ label = "Lights RoadIntersection" ] - 218 [ label = "Unknown" ] + 216 [ label = "Lights RoadIntersection" ] + 217 [ label = "Unknown" ] + 218 [ label = "Lights RoadIntersection" ] 219 [ label = "Lights RoadIntersection" ] - 220 [ label = "Lights RoadIntersection" ] + 220 [ label = "Unknown" ] 221 [ label = "Unknown" ] 222 [ label = "Unknown" ] - 223 [ label = "Unknown" ] + 223 [ label = "Lights RoadIntersection" ] 224 [ label = "Lights RoadIntersection" ] - 225 [ label = "Lights RoadIntersection" ] + 225 [ label = "Unknown" ] 226 [ label = "Unknown" ] - 227 [ label = "Unknown" ] - 228 [ label = "Lights RoadIntersection" ] + 227 [ label = "Lights RoadIntersection" ] + 228 [ label = "Unknown" ] 229 [ label = "Unknown" ] 230 [ label = "Unknown" ] - 231 [ label = "Unknown" ] - 232 [ label = "Lights RoadIntersection" ] - 233 [ label = "MapEdge" ] + 231 [ label = "Lights RoadIntersection" ] + 232 [ label = "MapEdge" ] + 233 [ label = "Unknown" ] 234 [ label = "Unknown" ] 235 [ label = "Unknown" ] - 236 [ label = "Unknown" ] - 237 [ label = "MapEdge" ] - 238 [ label = "Unknown" ] - 239 [ label = "Lights RoadIntersection" ] - 240 [ label = "MapEdge" ] + 236 [ label = "MapEdge" ] + 237 [ label = "Unknown" ] + 238 [ label = "Lights RoadIntersection" ] + 239 [ label = "MapEdge" ] + 240 [ label = "Unknown" ] 241 [ label = "Unknown" ] - 242 [ label = "Unknown" ] + 242 [ label = "MapEdge" ] 243 [ label = "MapEdge" ] - 244 [ label = "MapEdge" ] + 244 [ label = "Unknown" ] 245 [ label = "Unknown" ] 246 [ label = "Unknown" ] 247 [ label = "Unknown" ] @@ -257,48 +257,48 @@ digraph { 255 [ label = "Unknown" ] 256 [ label = "Unknown" ] 257 [ label = "Unknown" ] - 258 [ label = "Unknown" ] - 259 [ label = "MapEdge" ] + 258 [ label = "MapEdge" ] + 259 [ label = "Unknown" ] 260 [ label = "Unknown" ] 261 [ label = "Unknown" ] 262 [ label = "Unknown" ] - 263 [ label = "Unknown" ] - 264 [ label = "Lights RoadIntersection" ] + 263 [ label = "Lights RoadIntersection" ] + 264 [ label = "Unknown" ] 265 [ label = "Unknown" ] 266 [ label = "Unknown" ] 267 [ label = "Unknown" ] 268 [ label = "Unknown" ] - 269 [ label = "MapEdge" ] + 269 [ label = "Lights RoadIntersection" ] 270 [ label = "Unknown" ] 271 [ label = "Unknown" ] - 272 [ label = "Lights RoadIntersection" ] + 272 [ label = "Unknown" ] 273 [ label = "Unknown" ] 274 [ label = "Unknown" ] 275 [ label = "Unknown" ] 276 [ label = "Unknown" ] 277 [ label = "Unknown" ] - 278 [ label = "Unknown" ] + 278 [ label = "Lights RoadIntersection" ] 279 [ label = "Unknown" ] 280 [ label = "Unknown" ] - 281 [ label = "Lights RoadIntersection" ] + 281 [ label = "Unknown" ] 282 [ label = "Unknown" ] 283 [ label = "Unknown" ] - 284 [ label = "Unknown" ] - 285 [ label = "Unknown" ] - 286 [ label = "Unknown" ] - 287 [ label = "Lights RoadIntersection" ] - 288 [ label = "MapEdge" ] - 289 [ label = "MapEdge" ] + 284 [ label = "Lights RoadIntersection" ] + 285 [ label = "MapEdge" ] + 286 [ label = "MapEdge" ] + 287 [ label = "Unknown" ] + 288 [ label = "Unknown" ] + 289 [ label = "Unknown" ] 290 [ label = "Unknown" ] 291 [ label = "Unknown" ] - 292 [ label = "Unknown" ] - 293 [ label = "Unknown" ] - 294 [ label = "Unknown" ] - 295 [ label = "MapEdge" ] - 296 [ label = "MapEdge" ] - 297 [ label = "Lights RoadIntersection" ] + 292 [ label = "MapEdge" ] + 293 [ label = "MapEdge" ] + 294 [ label = "Lights RoadIntersection" ] + 295 [ label = "Unknown" ] + 296 [ label = "Lights RoadIntersection" ] + 297 [ label = "Unknown" ] 298 [ label = "Unknown" ] - 299 [ label = "Lights RoadIntersection" ] + 299 [ label = "Unknown" ] 300 [ label = "Unknown" ] 301 [ label = "Unknown" ] 302 [ label = "Unknown" ] @@ -308,9 +308,9 @@ digraph { 306 [ label = "Unknown" ] 307 [ label = "Unknown" ] 308 [ label = "Unknown" ] - 309 [ label = "MapEdge" ] + 309 [ label = "Unknown" ] 310 [ label = "Unknown" ] - 311 [ label = "MapEdge" ] + 311 [ label = "Unknown" ] 312 [ label = "Unknown" ] 313 [ label = "Unknown" ] 314 [ label = "Unknown" ] @@ -330,30 +330,30 @@ digraph { 328 [ label = "Unknown" ] 329 [ label = "Unknown" ] 330 [ label = "Unknown" ] - 331 [ label = "Unknown" ] - 332 [ label = "Unknown" ] - 333 [ label = "Unknown" ] - 334 [ label = "Unknown" ] + 331 [ label = "Lights RoadIntersection" ] + 332 [ label = "Lights RoadIntersection" ] + 333 [ label = "Lights RoadIntersection" ] + 334 [ label = "Lights RoadIntersection" ] 335 [ label = "Unknown" ] 336 [ label = "Unknown" ] - 337 [ label = "Lights RoadIntersection" ] - 338 [ label = "Lights RoadIntersection" ] - 339 [ label = "Lights RoadIntersection" ] - 340 [ label = "Lights RoadIntersection" ] - 341 [ label = "Unknown" ] + 337 [ label = "MapEdge" ] + 338 [ label = "Unknown" ] + 339 [ label = "Unknown" ] + 340 [ label = "Unknown" ] + 341 [ label = "MapEdge" ] 342 [ label = "Unknown" ] - 343 [ label = "MapEdge" ] + 343 [ label = "Unknown" ] 344 [ label = "Unknown" ] 345 [ label = "Unknown" ] 346 [ label = "Unknown" ] - 347 [ label = "MapEdge" ] - 348 [ label = "Unknown" ] + 347 [ label = "Unknown" ] + 348 [ label = "MapEdge" ] 349 [ label = "Unknown" ] 350 [ label = "Unknown" ] 351 [ label = "Unknown" ] 352 [ label = "Unknown" ] 353 [ label = "Unknown" ] - 354 [ label = "MapEdge" ] + 354 [ label = "Unknown" ] 355 [ label = "Unknown" ] 356 [ label = "Unknown" ] 357 [ label = "Unknown" ] @@ -361,38 +361,38 @@ digraph { 359 [ label = "Unknown" ] 360 [ label = "Unknown" ] 361 [ label = "Unknown" ] - 362 [ label = "Unknown" ] + 362 [ label = "MapEdge" ] 363 [ label = "Unknown" ] 364 [ label = "Unknown" ] 365 [ label = "Unknown" ] 366 [ label = "Unknown" ] 367 [ label = "Unknown" ] - 368 [ label = "MapEdge" ] + 368 [ label = "Unknown" ] 369 [ label = "Unknown" ] 370 [ label = "Unknown" ] 371 [ label = "Unknown" ] 372 [ label = "Unknown" ] 373 [ label = "Unknown" ] - 374 [ label = "Unknown" ] + 374 [ label = "Lights RoadIntersection" ] 375 [ label = "Unknown" ] 376 [ label = "Unknown" ] - 377 [ label = "Unknown" ] + 377 [ label = "Lights RoadIntersection" ] 378 [ label = "Unknown" ] 379 [ label = "Unknown" ] 380 [ label = "Unknown" ] - 381 [ label = "Lights RoadIntersection" ] + 381 [ label = "Unknown" ] 382 [ label = "Unknown" ] 383 [ label = "Unknown" ] - 384 [ label = "Lights RoadIntersection" ] + 384 [ label = "Unknown" ] 385 [ label = "Unknown" ] - 386 [ label = "Unknown" ] + 386 [ label = "Lights RoadIntersection" ] 387 [ label = "Unknown" ] 388 [ label = "Unknown" ] 389 [ label = "Unknown" ] 390 [ label = "Unknown" ] 391 [ label = "Unknown" ] 392 [ label = "Unknown" ] - 393 [ label = "Lights RoadIntersection" ] + 393 [ label = "Unknown" ] 394 [ label = "Unknown" ] 395 [ label = "Unknown" ] 396 [ label = "Unknown" ] @@ -401,7 +401,7 @@ digraph { 399 [ label = "Unknown" ] 400 [ label = "Unknown" ] 401 [ label = "Unknown" ] - 402 [ label = "MapEdge" ] + 402 [ label = "Unknown" ] 403 [ label = "Unknown" ] 404 [ label = "Unknown" ] 405 [ label = "Unknown" ] @@ -410,15 +410,15 @@ digraph { 408 [ label = "Unknown" ] 409 [ label = "Unknown" ] 410 [ label = "Unknown" ] - 411 [ label = "Unknown" ] + 411 [ label = "Lights RoadIntersection" ] 412 [ label = "Unknown" ] 413 [ label = "Unknown" ] - 414 [ label = "Unknown" ] + 414 [ label = "MapEdge" ] 415 [ label = "Unknown" ] 416 [ label = "Unknown" ] 417 [ label = "Unknown" ] 418 [ label = "Unknown" ] - 419 [ label = "Lights RoadIntersection" ] + 419 [ label = "Unknown" ] 420 [ label = "Unknown" ] 421 [ label = "Unknown" ] 422 [ label = "MapEdge" ] @@ -428,7 +428,7 @@ digraph { 426 [ label = "Unknown" ] 427 [ label = "Unknown" ] 428 [ label = "Unknown" ] - 429 [ label = "Unknown" ] + 429 [ label = "MapEdge" ] 430 [ label = "MapEdge" ] 431 [ label = "Unknown" ] 432 [ label = "Unknown" ] @@ -436,8 +436,8 @@ digraph { 434 [ label = "Unknown" ] 435 [ label = "Unknown" ] 436 [ label = "Unknown" ] - 437 [ label = "MapEdge" ] - 438 [ label = "MapEdge" ] + 437 [ label = "Unknown" ] + 438 [ label = "Unknown" ] 439 [ label = "Unknown" ] 440 [ label = "Unknown" ] 441 [ label = "Unknown" ] @@ -459,7 +459,7 @@ digraph { 457 [ label = "Unknown" ] 458 [ label = "Unknown" ] 459 [ label = "Unknown" ] - 460 [ label = "Unknown" ] + 460 [ label = "Lights RoadIntersection" ] 461 [ label = "Unknown" ] 462 [ label = "Unknown" ] 463 [ label = "Unknown" ] @@ -467,50 +467,50 @@ digraph { 465 [ label = "Unknown" ] 466 [ label = "Unknown" ] 467 [ label = "Unknown" ] - 468 [ label = "Lights RoadIntersection" ] - 469 [ label = "Unknown" ] - 470 [ label = "Unknown" ] + 468 [ label = "Unknown" ] + 469 [ label = "Lights RoadIntersection" ] + 470 [ label = "Lights RoadIntersection" ] 471 [ label = "Unknown" ] - 472 [ label = "Unknown" ] + 472 [ label = "MapEdge" ] 473 [ label = "Unknown" ] 474 [ label = "Unknown" ] 475 [ label = "Unknown" ] 476 [ label = "Unknown" ] - 477 [ label = "Lights RoadIntersection" ] - 478 [ label = "Lights RoadIntersection" ] + 477 [ label = "Unknown" ] + 478 [ label = "Unknown" ] 479 [ label = "Unknown" ] - 480 [ label = "MapEdge" ] + 480 [ label = "Unknown" ] 481 [ label = "Unknown" ] - 482 [ label = "Unknown" ] - 483 [ label = "Unknown" ] + 482 [ label = "MapEdge" ] + 483 [ label = "MapEdge" ] 484 [ label = "Unknown" ] 485 [ label = "Unknown" ] - 486 [ label = "Unknown" ] - 487 [ label = "Unknown" ] - 488 [ label = "Unknown" ] - 489 [ label = "Unknown" ] - 490 [ label = "MapEdge" ] - 491 [ label = "MapEdge" ] - 492 [ label = "MapEdge" ] + 486 [ label = "MapEdge" ] + 487 [ label = "Lights RoadIntersection" ] + 488 [ label = "Lights RoadIntersection" ] + 489 [ label = "Lights RoadIntersection" ] + 490 [ label = "Unknown" ] + 491 [ label = "Unknown" ] + 492 [ label = "Unknown" ] 493 [ label = "Unknown" ] - 494 [ label = "Unknown" ] - 495 [ label = "MapEdge" ] - 496 [ label = "Lights RoadIntersection" ] - 497 [ label = "Lights RoadIntersection" ] - 498 [ label = "Lights RoadIntersection" ] + 494 [ label = "MapEdge" ] + 495 [ label = "Unknown" ] + 496 [ label = "Unknown" ] + 497 [ label = "MapEdge" ] + 498 [ label = "Unknown" ] 499 [ label = "Unknown" ] - 500 [ label = "Unknown" ] + 500 [ label = "MapEdge" ] 501 [ label = "Unknown" ] 502 [ label = "Unknown" ] 503 [ label = "Unknown" ] - 504 [ label = "MapEdge" ] + 504 [ label = "Unknown" ] 505 [ label = "Unknown" ] - 506 [ label = "MapEdge" ] + 506 [ label = "Unknown" ] 507 [ label = "Unknown" ] - 508 [ label = "MapEdge" ] + 508 [ label = "Unknown" ] 509 [ label = "Unknown" ] 510 [ label = "Unknown" ] - 511 [ label = "MapEdge" ] + 511 [ label = "Unknown" ] 512 [ label = "Unknown" ] 513 [ label = "Unknown" ] 514 [ label = "Unknown" ] @@ -529,10 +529,10 @@ digraph { 527 [ label = "Unknown" ] 528 [ label = "Unknown" ] 529 [ label = "Unknown" ] - 530 [ label = "Unknown" ] - 531 [ label = "Unknown" ] - 532 [ label = "Unknown" ] - 533 [ label = "Unknown" ] + 530 [ label = "MapEdge" ] + 531 [ label = "MapEdge" ] + 532 [ label = "Lights RoadIntersection" ] + 533 [ label = "Lights RoadIntersection" ] 534 [ label = "Unknown" ] 535 [ label = "Unknown" ] 536 [ label = "Unknown" ] @@ -540,11 +540,11 @@ digraph { 538 [ label = "Unknown" ] 539 [ label = "Unknown" ] 540 [ label = "Unknown" ] - 541 [ label = "MapEdge" ] + 541 [ label = "Unknown" ] 542 [ label = "Unknown" ] 543 [ label = "MapEdge" ] - 544 [ label = "Lights RoadIntersection" ] - 545 [ label = "Lights RoadIntersection" ] + 544 [ label = "Unknown" ] + 545 [ label = "Unknown" ] 546 [ label = "Unknown" ] 547 [ label = "Unknown" ] 548 [ label = "Unknown" ] @@ -553,9 +553,9 @@ digraph { 551 [ label = "Unknown" ] 552 [ label = "Unknown" ] 553 [ label = "Unknown" ] - 554 [ label = "Unknown" ] - 555 [ label = "MapEdge" ] - 556 [ label = "Unknown" ] + 554 [ label = "Lights RoadIntersection" ] + 555 [ label = "Lights RoadIntersection" ] + 556 [ label = "Lights RoadIntersection" ] 557 [ label = "Unknown" ] 558 [ label = "Unknown" ] 559 [ label = "Unknown" ] @@ -565,867 +565,855 @@ digraph { 563 [ label = "Unknown" ] 564 [ label = "Unknown" ] 565 [ label = "Unknown" ] - 566 [ label = "Lights RoadIntersection" ] - 567 [ label = "Lights RoadIntersection" ] - 568 [ label = "Lights RoadIntersection" ] + 566 [ label = "Unknown" ] + 567 [ label = "Unknown" ] + 568 [ label = "Unknown" ] 569 [ label = "Unknown" ] 570 [ label = "Unknown" ] 571 [ label = "Unknown" ] 572 [ label = "Unknown" ] 573 [ label = "Unknown" ] - 574 [ label = "Unknown" ] - 575 [ label = "Unknown" ] - 576 [ label = "Unknown" ] - 577 [ label = "Unknown" ] - 578 [ label = "Unknown" ] - 579 [ label = "Unknown" ] - 580 [ label = "Unknown" ] - 581 [ label = "Unknown" ] - 582 [ label = "Unknown" ] - 583 [ label = "Unknown" ] - 584 [ label = "Unknown" ] - 585 [ label = "Unknown" ] - 586 [ label = "MapEdge" ] - 37 -> 490 [ label = "2 lanes" ] - 39 -> 272 [ label = "2 lanes" ] - 109 -> 37 [ label = "2 lanes" ] - 272 -> 109 [ label = "2 lanes" ] - 20 -> 468 [ label = "3 lanes" ] - 468 -> 283 [ label = "3 lanes" ] - 15 -> 80 [ label = "3 lanes" ] - 18 -> 15 [ label = "3 lanes" ] - 38 -> 164 [ label = "3 lanes" ] - 78 -> 546 [ label = "1 lanes" ] - 89 -> 404 [ label = "1 lanes" ] - 267 -> 89 [ label = "1 lanes" ] - 404 -> 55 [ label = "1 lanes" ] - 546 -> 267 [ label = "1 lanes" ] - 65 -> 66 [ label = "2 lanes" ] - 66 -> 330 [ label = "2 lanes" ] - 337 -> 334 [ label = "2 lanes" ] - 12 -> 132 [ label = "2 lanes" ] - 45 -> 119 [ label = "2 lanes" ] - 119 -> 41 [ label = "2 lanes" ] - 44 -> 557 [ label = "2 lanes" ] - 557 -> 40 [ label = "2 lanes" ] - 49 -> 251 [ label = "2 lanes" ] - 251 -> 49 [ label = "2 lanes" ] - 185 -> 493 [ label = "2 lanes" ] - 493 -> 185 [ label = "2 lanes" ] - 251 -> 185 [ label = "2 lanes" ] - 185 -> 251 [ label = "2 lanes" ] - 48 -> 4 [ label = "3 lanes" ] - 73 -> 72 [ label = "1 lanes" ] - 72 -> 249 [ label = "1 lanes" ] - 249 -> 244 [ label = "1 lanes" ] - 104 -> 568 [ label = "2 lanes" ] - 110 -> 374 [ label = "2 lanes" ] - 374 -> 551 [ label = "2 lanes" ] - 551 -> 104 [ label = "2 lanes" ] - 571 -> 74 [ label = "0 lanes" ] - 11 -> 102 [ label = "2 lanes" ] - 102 -> 567 [ label = "2 lanes" ] - 10 -> 88 [ label = "3 lanes" ] - 55 -> 86 [ label = "3 lanes" ] - 88 -> 55 [ label = "3 lanes" ] - 86 -> 494 [ label = "4 lanes" ] - 494 -> 97 [ label = "4 lanes" ] - 13 -> 156 [ label = "3 lanes" ] - 96 -> 13 [ label = "3 lanes" ] - 440 -> 96 [ label = "3 lanes" ] - 37 -> 34 [ label = "1 lanes" ] - 567 -> 338 [ label = "2 lanes" ] - 17 -> 79 [ label = "2 lanes" ] - 79 -> 80 [ label = "2 lanes" ] - 81 -> 512 [ label = "1 lanes" ] - 292 -> 360 [ label = "1 lanes" ] - 294 -> 276 [ label = "1 lanes" ] - 358 -> 361 [ label = "1 lanes" ] - 360 -> 519 [ label = "1 lanes" ] - 361 -> 450 [ label = "1 lanes" ] - 450 -> 570 [ label = "1 lanes" ] - 512 -> 292 [ label = "1 lanes" ] - 519 -> 358 [ label = "1 lanes" ] - 570 -> 294 [ label = "1 lanes" ] - 25 -> 41 [ label = "2 lanes" ] - 41 -> 25 [ label = "2 lanes" ] - 40 -> 42 [ label = "2 lanes" ] - 42 -> 40 [ label = "2 lanes" ] - 41 -> 40 [ label = "2 lanes" ] - 40 -> 41 [ label = "2 lanes" ] - 85 -> 112 [ label = "1 lanes" ] - 299 -> 85 [ label = "1 lanes" ] - 299 -> 301 [ label = "3 lanes" ] - 301 -> 60 [ label = "3 lanes" ] - 89 -> 90 [ label = "1 lanes" ] - 90 -> 92 [ label = "1 lanes" ] - 92 -> 61 [ label = "1 lanes" ] - 90 -> 91 [ label = "1 lanes" ] - 91 -> 92 [ label = "1 lanes" ] - 91 -> 433 [ label = "1 lanes" ] - 9 -> 94 [ label = "1 lanes" ] - 94 -> 134 [ label = "1 lanes" ] - 134 -> 408 [ label = "1 lanes" ] - 82 -> 51 [ label = "1 lanes" ] - 99 -> 98 [ label = "2 lanes" ] - 100 -> 101 [ label = "1 lanes" ] - 101 -> 100 [ label = "1 lanes" ] + 574 [ label = "MapEdge" ] + 47 -> 2 [ label = "2 lanes" ] + 49 -> 269 [ label = "2 lanes" ] + 111 -> 47 [ label = "2 lanes" ] + 269 -> 111 [ label = "2 lanes" ] + 32 -> 460 [ label = "3 lanes" ] + 460 -> 280 [ label = "3 lanes" ] + 28 -> 85 [ label = "3 lanes" ] + 31 -> 28 [ label = "3 lanes" ] + 48 -> 165 [ label = "3 lanes" ] + 83 -> 534 [ label = "1 lanes" ] + 92 -> 396 [ label = "1 lanes" ] + 266 -> 92 [ label = "1 lanes" ] + 396 -> 64 [ label = "1 lanes" ] + 534 -> 266 [ label = "1 lanes" ] + 72 -> 73 [ label = "2 lanes" ] + 73 -> 324 [ label = "2 lanes" ] + 331 -> 328 [ label = "2 lanes" ] + 3 -> 134 [ label = "2 lanes" ] + 55 -> 121 [ label = "2 lanes" ] + 121 -> 51 [ label = "2 lanes" ] + 54 -> 545 [ label = "2 lanes" ] + 545 -> 50 [ label = "2 lanes" ] + 58 -> 250 [ label = "2 lanes" ] + 250 -> 58 [ label = "2 lanes" ] + 185 -> 484 [ label = "2 lanes" ] + 484 -> 185 [ label = "2 lanes" ] + 250 -> 185 [ label = "2 lanes" ] + 185 -> 250 [ label = "2 lanes" ] + 57 -> 23 [ label = "3 lanes" ] + 79 -> 78 [ label = "1 lanes" ] + 78 -> 248 [ label = "1 lanes" ] + 248 -> 243 [ label = "1 lanes" ] + 106 -> 556 [ label = "2 lanes" ] + 112 -> 368 [ label = "2 lanes" ] + 368 -> 539 [ label = "2 lanes" ] + 539 -> 106 [ label = "2 lanes" ] + 559 -> 80 [ label = "0 lanes" ] + 19 -> 104 [ label = "2 lanes" ] + 104 -> 555 [ label = "2 lanes" ] + 20 -> 91 [ label = "3 lanes" ] + 64 -> 89 [ label = "3 lanes" ] + 91 -> 64 [ label = "3 lanes" ] + 89 -> 485 [ label = "4 lanes" ] + 485 -> 100 [ label = "4 lanes" ] + 26 -> 158 [ label = "3 lanes" ] + 99 -> 26 [ label = "3 lanes" ] + 432 -> 99 [ label = "3 lanes" ] + 47 -> 25 [ label = "1 lanes" ] + 555 -> 332 [ label = "2 lanes" ] + 30 -> 84 [ label = "2 lanes" ] + 84 -> 85 [ label = "2 lanes" ] + 86 -> 501 [ label = "1 lanes" ] + 289 -> 354 [ label = "1 lanes" ] + 291 -> 273 [ label = "1 lanes" ] + 352 -> 355 [ label = "1 lanes" ] + 354 -> 508 [ label = "1 lanes" ] + 355 -> 442 [ label = "1 lanes" ] + 442 -> 558 [ label = "1 lanes" ] + 501 -> 289 [ label = "1 lanes" ] + 508 -> 352 [ label = "1 lanes" ] + 558 -> 291 [ label = "1 lanes" ] + 37 -> 51 [ label = "2 lanes" ] + 51 -> 37 [ label = "2 lanes" ] + 50 -> 52 [ label = "2 lanes" ] + 52 -> 50 [ label = "2 lanes" ] + 51 -> 50 [ label = "2 lanes" ] + 50 -> 51 [ label = "2 lanes" ] + 88 -> 114 [ label = "1 lanes" ] + 296 -> 88 [ label = "1 lanes" ] + 296 -> 298 [ label = "3 lanes" ] + 298 -> 67 [ label = "3 lanes" ] + 92 -> 93 [ label = "1 lanes" ] + 93 -> 95 [ label = "1 lanes" ] + 95 -> 68 [ label = "1 lanes" ] + 93 -> 94 [ label = "1 lanes" ] + 94 -> 95 [ label = "1 lanes" ] + 94 -> 425 [ label = "1 lanes" ] + 12 -> 97 [ label = "1 lanes" ] + 97 -> 136 [ label = "1 lanes" ] + 136 -> 400 [ label = "1 lanes" ] + 87 -> 60 [ label = "1 lanes" ] + 101 -> 16 [ label = "2 lanes" ] 102 -> 103 [ label = "1 lanes" ] - 103 -> 285 [ label = "1 lanes" ] - 94 -> 155 [ label = "3 lanes" ] - 495 -> 494 [ label = "1 lanes" ] + 103 -> 102 [ label = "1 lanes" ] 104 -> 105 [ label = "1 lanes" ] - 105 -> 104 [ label = "1 lanes" ] - 233 -> 432 [ label = "1 lanes" ] - 432 -> 233 [ label = "1 lanes" ] - 66 -> 107 [ label = "1 lanes" ] - 107 -> 66 [ label = "1 lanes" ] - 80 -> 112 [ label = "1 lanes" ] - 188 -> 498 [ label = "1 lanes" ] - 298 -> 410 [ label = "1 lanes" ] - 410 -> 188 [ label = "1 lanes" ] - 498 -> 130 [ label = "1 lanes" ] - 118 -> 479 [ label = "2 lanes" ] - 479 -> 118 [ label = "2 lanes" ] - 119 -> 120 [ label = "2 lanes" ] + 105 -> 282 [ label = "1 lanes" ] + 97 -> 157 [ label = "3 lanes" ] + 486 -> 485 [ label = "1 lanes" ] + 106 -> 107 [ label = "1 lanes" ] + 107 -> 106 [ label = "1 lanes" ] + 232 -> 424 [ label = "1 lanes" ] + 424 -> 232 [ label = "1 lanes" ] + 73 -> 109 [ label = "1 lanes" ] + 109 -> 73 [ label = "1 lanes" ] + 85 -> 114 [ label = "1 lanes" ] + 188 -> 489 [ label = "1 lanes" ] + 295 -> 402 [ label = "1 lanes" ] + 402 -> 188 [ label = "1 lanes" ] + 489 -> 132 [ label = "1 lanes" ] + 120 -> 471 [ label = "2 lanes" ] + 471 -> 120 [ label = "2 lanes" ] 121 -> 122 [ label = "2 lanes" ] - 122 -> 121 [ label = "2 lanes" ] - 122 -> 123 [ label = "2 lanes" ] - 123 -> 122 [ label = "2 lanes" ] - 122 -> 124 [ label = "2 lanes" ] - 124 -> 122 [ label = "2 lanes" ] + 123 -> 124 [ label = "2 lanes" ] + 124 -> 123 [ label = "2 lanes" ] 124 -> 125 [ label = "2 lanes" ] 125 -> 124 [ label = "2 lanes" ] - 204 -> 126 [ label = "1 lanes" ] - 126 -> 204 [ label = "1 lanes" ] - 127 -> 376 [ label = "1 lanes" ] - 376 -> 127 [ label = "1 lanes" ] - 376 -> 128 [ label = "1 lanes" ] - 128 -> 376 [ label = "1 lanes" ] - 36 -> 111 [ label = "3 lanes" ] - 111 -> 114 [ label = "3 lanes" ] - 129 -> 417 [ label = "1 lanes" ] - 417 -> 211 [ label = "1 lanes" ] - 21 -> 225 [ label = "2 lanes" ] - 24 -> 120 [ label = "2 lanes" ] - 120 -> 157 [ label = "2 lanes" ] - 121 -> 25 [ label = "2 lanes" ] - 157 -> 577 [ label = "2 lanes" ] - 202 -> 231 [ label = "2 lanes" ] - 225 -> 202 [ label = "2 lanes" ] - 231 -> 24 [ label = "2 lanes" ] - 577 -> 121 [ label = "2 lanes" ] - 69 -> 42 [ label = "2 lanes" ] - 126 -> 540 [ label = "2 lanes" ] - 540 -> 43 [ label = "2 lanes" ] - 126 -> 42 [ label = "2 lanes" ] - 42 -> 126 [ label = "2 lanes" ] - 43 -> 131 [ label = "1 lanes" ] - 131 -> 132 [ label = "1 lanes" ] - 116 -> 117 [ label = "2 lanes" ] - 117 -> 116 [ label = "2 lanes" ] - 117 -> 118 [ label = "2 lanes" ] - 118 -> 117 [ label = "2 lanes" ] - 118 -> 3 [ label = "2 lanes" ] - 3 -> 118 [ label = "2 lanes" ] - 59 -> 62 [ label = "1 lanes" ] - 134 -> 59 [ label = "1 lanes" ] - 135 -> 341 [ label = "3 lanes" ] - 70 -> 136 [ label = "2 lanes" ] - 137 -> 32 [ label = "2 lanes" ] - 138 -> 139 [ label = "0 lanes" ] - 253 -> 254 [ label = "0 lanes" ] - 29 -> 142 [ label = "2 lanes" ] - 52 -> 219 [ label = "3 lanes" ] - 53 -> 217 [ label = "3 lanes" ] - 217 -> 52 [ label = "3 lanes" ] - 219 -> 16 [ label = "3 lanes" ] - 497 -> 52 [ label = "2 lanes" ] - 112 -> 113 [ label = "1 lanes" ] - 80 -> 85 [ label = "3 lanes" ] - 85 -> 298 [ label = "3 lanes" ] - 335 -> 569 [ label = "3 lanes" ] - 567 -> 335 [ label = "3 lanes" ] - 31 -> 76 [ label = "0 lanes" ] - 142 -> 169 [ label = "1 lanes" ] - 146 -> 337 [ label = "3 lanes" ] - 28 -> 168 [ label = "2 lanes" ] - 108 -> 109 [ label = "1 lanes" ] - 23 -> 152 [ label = "5 lanes" ] - 153 -> 189 [ label = "2 lanes" ] - 50 -> 186 [ label = "3 lanes" ] - 61 -> 339 [ label = "3 lanes" ] - 62 -> 61 [ label = "3 lanes" ] - 155 -> 62 [ label = "3 lanes" ] - 93 -> 57 [ label = "3 lanes" ] - 155 -> 93 [ label = "3 lanes" ] - 56 -> 153 [ label = "4 lanes" ] - 153 -> 160 [ label = "4 lanes" ] - 160 -> 13 [ label = "4 lanes" ] - 106 -> 160 [ label = "2 lanes" ] - 160 -> 436 [ label = "2 lanes" ] - 13 -> 159 [ label = "4 lanes" ] - 159 -> 190 [ label = "3 lanes" ] - 190 -> 150 [ label = "3 lanes" ] + 124 -> 126 [ label = "2 lanes" ] + 126 -> 124 [ label = "2 lanes" ] + 126 -> 127 [ label = "2 lanes" ] + 127 -> 126 [ label = "2 lanes" ] + 203 -> 128 [ label = "1 lanes" ] + 128 -> 203 [ label = "1 lanes" ] + 129 -> 369 [ label = "1 lanes" ] + 369 -> 129 [ label = "1 lanes" ] + 369 -> 130 [ label = "1 lanes" ] + 130 -> 369 [ label = "1 lanes" ] + 46 -> 113 [ label = "3 lanes" ] + 113 -> 116 [ label = "3 lanes" ] + 131 -> 409 [ label = "1 lanes" ] + 409 -> 210 [ label = "1 lanes" ] + 33 -> 224 [ label = "2 lanes" ] + 36 -> 122 [ label = "2 lanes" ] + 122 -> 159 [ label = "2 lanes" ] + 123 -> 37 [ label = "2 lanes" ] + 159 -> 565 [ label = "2 lanes" ] + 201 -> 230 [ label = "2 lanes" ] + 224 -> 201 [ label = "2 lanes" ] + 230 -> 36 [ label = "2 lanes" ] + 565 -> 123 [ label = "2 lanes" ] + 76 -> 52 [ label = "2 lanes" ] + 128 -> 529 [ label = "2 lanes" ] + 529 -> 53 [ label = "2 lanes" ] + 128 -> 52 [ label = "2 lanes" ] + 52 -> 128 [ label = "2 lanes" ] + 53 -> 133 [ label = "1 lanes" ] + 133 -> 134 [ label = "1 lanes" ] + 118 -> 119 [ label = "2 lanes" ] + 119 -> 118 [ label = "2 lanes" ] + 119 -> 120 [ label = "2 lanes" ] + 120 -> 119 [ label = "2 lanes" ] + 120 -> 15 [ label = "2 lanes" ] + 15 -> 120 [ label = "2 lanes" ] + 66 -> 69 [ label = "1 lanes" ] + 136 -> 66 [ label = "1 lanes" ] + 137 -> 335 [ label = "3 lanes" ] + 77 -> 138 [ label = "2 lanes" ] + 139 -> 43 [ label = "2 lanes" ] + 140 -> 141 [ label = "0 lanes" ] + 252 -> 253 [ label = "0 lanes" ] + 40 -> 144 [ label = "2 lanes" ] + 61 -> 218 [ label = "3 lanes" ] + 62 -> 216 [ label = "3 lanes" ] + 216 -> 61 [ label = "3 lanes" ] + 218 -> 29 [ label = "3 lanes" ] + 488 -> 61 [ label = "2 lanes" ] + 114 -> 115 [ label = "1 lanes" ] + 85 -> 88 [ label = "3 lanes" ] + 88 -> 295 [ label = "3 lanes" ] + 329 -> 557 [ label = "3 lanes" ] + 555 -> 329 [ label = "3 lanes" ] + 42 -> 18 [ label = "0 lanes" ] + 144 -> 170 [ label = "1 lanes" ] + 148 -> 331 [ label = "3 lanes" ] + 39 -> 169 [ label = "2 lanes" ] + 110 -> 111 [ label = "1 lanes" ] + 35 -> 154 [ label = "5 lanes" ] + 155 -> 189 [ label = "2 lanes" ] + 59 -> 186 [ label = "3 lanes" ] + 68 -> 333 [ label = "3 lanes" ] + 69 -> 68 [ label = "3 lanes" ] + 157 -> 69 [ label = "3 lanes" ] + 96 -> 21 [ label = "3 lanes" ] + 157 -> 96 [ label = "3 lanes" ] + 65 -> 155 [ label = "4 lanes" ] + 155 -> 162 [ label = "4 lanes" ] + 162 -> 26 [ label = "4 lanes" ] + 108 -> 162 [ label = "2 lanes" ] + 162 -> 428 [ label = "2 lanes" ] + 26 -> 161 [ label = "4 lanes" ] + 161 -> 190 [ label = "3 lanes" ] + 190 -> 152 [ label = "3 lanes" ] 171 -> 172 [ label = "1 lanes" ] 172 -> 181 [ label = "1 lanes" ] - 183 -> 448 [ label = "1 lanes" ] - 448 -> 171 [ label = "1 lanes" ] - 151 -> 176 [ label = "0 lanes" ] - 64 -> 258 [ label = "2 lanes" ] - 258 -> 64 [ label = "2 lanes" ] - 258 -> 144 [ label = "2 lanes" ] - 144 -> 258 [ label = "2 lanes" ] - 174 -> 475 [ label = "2 lanes" ] - 475 -> 174 [ label = "2 lanes" ] - 175 -> 73 [ label = "1 lanes" ] - 167 -> 179 [ label = "1 lanes" ] - 390 -> 167 [ label = "1 lanes" ] - 144 -> 261 [ label = "2 lanes" ] - 261 -> 144 [ label = "2 lanes" ] - 260 -> 144 [ label = "2 lanes" ] - 144 -> 260 [ label = "2 lanes" ] - 313 -> 260 [ label = "2 lanes" ] - 260 -> 313 [ label = "2 lanes" ] - 173 -> 203 [ label = "1 lanes" ] - 203 -> 173 [ label = "1 lanes" ] - 168 -> 176 [ label = "0 lanes" ] - 254 -> 384 [ label = "0 lanes" ] - 380 -> 151 [ label = "0 lanes" ] - 384 -> 380 [ label = "0 lanes" ] - 173 -> 263 [ label = "2 lanes" ] - 263 -> 173 [ label = "2 lanes" ] + 183 -> 440 [ label = "1 lanes" ] + 440 -> 171 [ label = "1 lanes" ] + 153 -> 176 [ label = "0 lanes" ] + 71 -> 257 [ label = "2 lanes" ] + 257 -> 71 [ label = "2 lanes" ] + 257 -> 146 [ label = "2 lanes" ] + 146 -> 257 [ label = "2 lanes" ] + 174 -> 467 [ label = "2 lanes" ] + 467 -> 174 [ label = "2 lanes" ] + 175 -> 79 [ label = "1 lanes" ] + 168 -> 179 [ label = "1 lanes" ] + 383 -> 168 [ label = "1 lanes" ] + 146 -> 260 [ label = "2 lanes" ] + 260 -> 146 [ label = "2 lanes" ] + 259 -> 146 [ label = "2 lanes" ] + 146 -> 259 [ label = "2 lanes" ] + 307 -> 259 [ label = "2 lanes" ] + 259 -> 307 [ label = "2 lanes" ] + 173 -> 202 [ label = "1 lanes" ] + 202 -> 173 [ label = "1 lanes" ] + 169 -> 176 [ label = "0 lanes" ] + 253 -> 377 [ label = "0 lanes" ] + 373 -> 153 [ label = "0 lanes" ] + 377 -> 373 [ label = "0 lanes" ] + 173 -> 262 [ label = "2 lanes" ] + 262 -> 173 [ label = "2 lanes" ] 174 -> 173 [ label = "2 lanes" ] 173 -> 174 [ label = "2 lanes" ] 176 -> 174 [ label = "2 lanes" ] 174 -> 176 [ label = "2 lanes" ] - 263 -> 145 [ label = "2 lanes" ] - 145 -> 263 [ label = "2 lanes" ] - 117 -> 178 [ label = "2 lanes" ] - 178 -> 117 [ label = "2 lanes" ] + 262 -> 147 [ label = "2 lanes" ] + 147 -> 262 [ label = "2 lanes" ] + 119 -> 178 [ label = "2 lanes" ] + 178 -> 119 [ label = "2 lanes" ] 176 -> 177 [ label = "2 lanes" ] 177 -> 176 [ label = "2 lanes" ] - 166 -> 23 [ label = "5 lanes" ] - 253 -> 166 [ label = "5 lanes" ] - 139 -> 296 [ label = "0 lanes" ] + 167 -> 35 [ label = "5 lanes" ] + 252 -> 167 [ label = "5 lanes" ] + 141 -> 293 [ label = "0 lanes" ] 182 -> 183 [ label = "2 lanes" ] - 183 -> 447 [ label = "2 lanes" ] - 447 -> 184 [ label = "2 lanes" ] - 181 -> 282 [ label = "0 lanes" ] + 183 -> 439 [ label = "2 lanes" ] + 439 -> 184 [ label = "2 lanes" ] + 181 -> 279 [ label = "0 lanes" ] 186 -> 181 [ label = "0 lanes" ] - 282 -> 254 [ label = "0 lanes" ] - 75 -> 305 [ label = "2 lanes" ] - 223 -> 75 [ label = "2 lanes" ] - 191 -> 113 [ label = "1 lanes" ] - 14 -> 445 [ label = "4 lanes" ] - 60 -> 14 [ label = "4 lanes" ] - 445 -> 135 [ label = "4 lanes" ] - 67 -> 429 [ label = "1 lanes" ] - 429 -> 67 [ label = "1 lanes" ] - 426 -> 193 [ label = "1 lanes" ] - 193 -> 426 [ label = "1 lanes" ] - 429 -> 426 [ label = "1 lanes" ] - 426 -> 429 [ label = "1 lanes" ] - 421 -> 2 [ label = "1 lanes" ] - 200 -> 199 [ label = "1 lanes" ] - 30 -> 253 [ label = "3 lanes" ] - 182 -> 446 [ label = "3 lanes" ] - 206 -> 500 [ label = "3 lanes" ] - 446 -> 30 [ label = "3 lanes" ] - 500 -> 182 [ label = "3 lanes" ] - 169 -> 205 [ label = "1 lanes" ] - 165 -> 207 [ label = "2 lanes" ] - 236 -> 133 [ label = "3 lanes" ] - 111 -> 514 [ label = "1 lanes" ] - 115 -> 416 [ label = "1 lanes" ] - 331 -> 115 [ label = "1 lanes" ] - 332 -> 520 [ label = "1 lanes" ] - 416 -> 417 [ label = "1 lanes" ] - 451 -> 331 [ label = "1 lanes" ] - 514 -> 332 [ label = "1 lanes" ] - 520 -> 451 [ label = "1 lanes" ] - 212 -> 213 [ label = "1 lanes" ] - 209 -> 342 [ label = "1 lanes" ] - 210 -> 209 [ label = "1 lanes" ] - 342 -> 208 [ label = "1 lanes" ] - 210 -> 79 [ label = "1 lanes" ] - 213 -> 498 [ label = "1 lanes" ] - 214 -> 497 [ label = "1 lanes" ] - 497 -> 216 [ label = "1 lanes" ] - 498 -> 214 [ label = "1 lanes" ] - 229 -> 232 [ label = "2 lanes" ] - 232 -> 24 [ label = "2 lanes" ] + 279 -> 253 [ label = "0 lanes" ] + 81 -> 302 [ label = "2 lanes" ] + 222 -> 81 [ label = "2 lanes" ] + 191 -> 115 [ label = "1 lanes" ] + 27 -> 437 [ label = "4 lanes" ] + 67 -> 27 [ label = "4 lanes" ] + 437 -> 137 [ label = "4 lanes" ] + 74 -> 421 [ label = "1 lanes" ] + 421 -> 74 [ label = "1 lanes" ] + 418 -> 193 [ label = "1 lanes" ] + 193 -> 418 [ label = "1 lanes" ] + 421 -> 418 [ label = "1 lanes" ] + 418 -> 421 [ label = "1 lanes" ] + 413 -> 6 [ label = "1 lanes" ] + 199 -> 198 [ label = "1 lanes" ] + 41 -> 252 [ label = "3 lanes" ] + 182 -> 438 [ label = "3 lanes" ] + 205 -> 491 [ label = "3 lanes" ] + 438 -> 41 [ label = "3 lanes" ] + 491 -> 182 [ label = "3 lanes" ] + 170 -> 204 [ label = "1 lanes" ] + 166 -> 206 [ label = "2 lanes" ] + 235 -> 135 [ label = "3 lanes" ] + 113 -> 503 [ label = "1 lanes" ] + 117 -> 408 [ label = "1 lanes" ] + 325 -> 117 [ label = "1 lanes" ] + 326 -> 509 [ label = "1 lanes" ] + 408 -> 409 [ label = "1 lanes" ] + 443 -> 325 [ label = "1 lanes" ] + 503 -> 326 [ label = "1 lanes" ] + 509 -> 443 [ label = "1 lanes" ] + 211 -> 212 [ label = "1 lanes" ] + 208 -> 336 [ label = "1 lanes" ] + 209 -> 208 [ label = "1 lanes" ] + 336 -> 207 [ label = "1 lanes" ] + 209 -> 84 [ label = "1 lanes" ] + 212 -> 489 [ label = "1 lanes" ] + 213 -> 488 [ label = "1 lanes" ] + 488 -> 215 [ label = "1 lanes" ] + 489 -> 213 [ label = "1 lanes" ] + 228 -> 231 [ label = "2 lanes" ] + 231 -> 36 [ label = "2 lanes" ] + 220 -> 221 [ label = "1 lanes" ] 221 -> 222 [ label = "1 lanes" ] - 222 -> 223 [ label = "1 lanes" ] - 223 -> 221 [ label = "1 lanes" ] - 232 -> 230 [ label = "2 lanes" ] - 227 -> 226 [ label = "2 lanes" ] - 483 -> 227 [ label = "2 lanes" ] + 222 -> 220 [ label = "1 lanes" ] + 231 -> 229 [ label = "2 lanes" ] + 226 -> 225 [ label = "2 lanes" ] + 475 -> 226 [ label = "2 lanes" ] + 217 -> 218 [ label = "2 lanes" ] 218 -> 219 [ label = "2 lanes" ] 219 -> 220 [ label = "2 lanes" ] - 220 -> 221 [ label = "2 lanes" ] - 228 -> 230 [ label = "2 lanes" ] - 230 -> 231 [ label = "2 lanes" ] - 231 -> 484 [ label = "2 lanes" ] - 485 -> 228 [ label = "2 lanes" ] - 222 -> 412 [ label = "1 lanes" ] - 7 -> 35 [ label = "2 lanes" ] - 35 -> 286 [ label = "2 lanes" ] - 81 -> 562 [ label = "2 lanes" ] - 286 -> 287 [ label = "2 lanes" ] - 287 -> 81 [ label = "2 lanes" ] - 562 -> 36 [ label = "2 lanes" ] - 138 -> 237 [ label = "2 lanes" ] - 234 -> 29 [ label = "2 lanes" ] - 142 -> 70 [ label = "2 lanes" ] - 238 -> 239 [ label = "2 lanes" ] - 64 -> 314 [ label = "2 lanes" ] - 314 -> 64 [ label = "2 lanes" ] - 65 -> 64 [ label = "2 lanes" ] - 64 -> 65 [ label = "2 lanes" ] - 238 -> 65 [ label = "2 lanes" ] - 65 -> 238 [ label = "2 lanes" ] - 314 -> 63 [ label = "2 lanes" ] - 63 -> 314 [ label = "2 lanes" ] - 242 -> 241 [ label = "1 lanes" ] + 227 -> 229 [ label = "2 lanes" ] + 229 -> 230 [ label = "2 lanes" ] + 230 -> 476 [ label = "2 lanes" ] + 477 -> 227 [ label = "2 lanes" ] + 221 -> 404 [ label = "1 lanes" ] + 24 -> 45 [ label = "2 lanes" ] + 45 -> 283 [ label = "2 lanes" ] + 86 -> 550 [ label = "2 lanes" ] + 283 -> 284 [ label = "2 lanes" ] + 284 -> 86 [ label = "2 lanes" ] + 550 -> 46 [ label = "2 lanes" ] + 140 -> 236 [ label = "2 lanes" ] + 233 -> 40 [ label = "2 lanes" ] + 144 -> 77 [ label = "2 lanes" ] + 237 -> 238 [ label = "2 lanes" ] + 71 -> 308 [ label = "2 lanes" ] + 308 -> 71 [ label = "2 lanes" ] + 72 -> 71 [ label = "2 lanes" ] + 71 -> 72 [ label = "2 lanes" ] + 237 -> 72 [ label = "2 lanes" ] + 72 -> 237 [ label = "2 lanes" ] + 308 -> 70 [ label = "2 lanes" ] + 70 -> 308 [ label = "2 lanes" ] 241 -> 240 [ label = "1 lanes" ] - 243 -> 250 [ label = "1 lanes" ] - 250 -> 242 [ label = "1 lanes" ] - 249 -> 250 [ label = "1 lanes" ] - 251 -> 383 [ label = "0 lanes" ] - 383 -> 252 [ label = "0 lanes" ] - 150 -> 118 [ label = "3 lanes" ] - 150 -> 161 [ label = "1 lanes" ] - 401 -> 256 [ label = "1 lanes" ] - 116 -> 256 [ label = "2 lanes" ] - 151 -> 177 [ label = "2 lanes" ] - 258 -> 259 [ label = "1 lanes" ] - 259 -> 258 [ label = "1 lanes" ] - 258 -> 324 [ label = "1 lanes" ] - 324 -> 258 [ label = "1 lanes" ] - 315 -> 323 [ label = "1 lanes" ] - 323 -> 315 [ label = "1 lanes" ] - 324 -> 315 [ label = "1 lanes" ] - 315 -> 324 [ label = "1 lanes" ] - 263 -> 310 [ label = "1 lanes" ] - 310 -> 263 [ label = "1 lanes" ] - 310 -> 1 [ label = "1 lanes" ] - 1 -> 310 [ label = "1 lanes" ] - 211 -> 559 [ label = "1 lanes" ] - 559 -> 212 [ label = "1 lanes" ] - 265 -> 266 [ label = "1 lanes" ] - 266 -> 406 [ label = "1 lanes" ] - 267 -> 265 [ label = "1 lanes" ] - 406 -> 509 [ label = "1 lanes" ] - 266 -> 265 [ label = "1 lanes" ] - 287 -> 271 [ label = "1 lanes" ] - 271 -> 275 [ label = "1 lanes" ] - 275 -> 269 [ label = "1 lanes" ] - 273 -> 274 [ label = "1 lanes" ] - 275 -> 35 [ label = "1 lanes" ] - 6 -> 274 [ label = "1 lanes" ] - 274 -> 270 [ label = "1 lanes" ] - 77 -> 264 [ label = "2 lanes" ] - 276 -> 77 [ label = "2 lanes" ] - 271 -> 270 [ label = "1 lanes" ] - 270 -> 272 [ label = "1 lanes" ] - 566 -> 277 [ label = "1 lanes" ] - 277 -> 278 [ label = "1 lanes" ] - 278 -> 277 [ label = "1 lanes" ] - 143 -> 25 [ label = "2 lanes" ] - 25 -> 143 [ label = "2 lanes" ] - 141 -> 143 [ label = "2 lanes" ] - 143 -> 141 [ label = "2 lanes" ] - 487 -> 280 [ label = "1 lanes" ] - 180 -> 140 [ label = "0 lanes" ] - 254 -> 381 [ label = "0 lanes" ] - 381 -> 180 [ label = "0 lanes" ] - 192 -> 435 [ label = "2 lanes" ] - 435 -> 436 [ label = "2 lanes" ] - 436 -> 437 [ label = "2 lanes" ] - 172 -> 253 [ label = "3 lanes" ] + 240 -> 239 [ label = "1 lanes" ] + 242 -> 249 [ label = "1 lanes" ] + 249 -> 241 [ label = "1 lanes" ] + 248 -> 249 [ label = "1 lanes" ] + 250 -> 376 [ label = "0 lanes" ] + 376 -> 251 [ label = "0 lanes" ] + 152 -> 120 [ label = "3 lanes" ] + 152 -> 14 [ label = "1 lanes" ] + 394 -> 255 [ label = "1 lanes" ] + 118 -> 255 [ label = "2 lanes" ] + 153 -> 177 [ label = "2 lanes" ] + 257 -> 258 [ label = "1 lanes" ] + 258 -> 257 [ label = "1 lanes" ] + 257 -> 318 [ label = "1 lanes" ] + 318 -> 257 [ label = "1 lanes" ] + 309 -> 317 [ label = "1 lanes" ] + 317 -> 309 [ label = "1 lanes" ] + 318 -> 309 [ label = "1 lanes" ] + 309 -> 318 [ label = "1 lanes" ] + 262 -> 305 [ label = "1 lanes" ] + 305 -> 262 [ label = "1 lanes" ] + 305 -> 9 [ label = "1 lanes" ] + 9 -> 305 [ label = "1 lanes" ] + 210 -> 547 [ label = "1 lanes" ] + 547 -> 211 [ label = "1 lanes" ] + 264 -> 265 [ label = "1 lanes" ] + 265 -> 398 [ label = "1 lanes" ] + 266 -> 264 [ label = "1 lanes" ] + 398 -> 498 [ label = "1 lanes" ] + 265 -> 264 [ label = "1 lanes" ] + 284 -> 268 [ label = "1 lanes" ] + 268 -> 272 [ label = "1 lanes" ] + 272 -> 10 [ label = "1 lanes" ] + 270 -> 271 [ label = "1 lanes" ] + 272 -> 45 [ label = "1 lanes" ] + 11 -> 271 [ label = "1 lanes" ] + 271 -> 267 [ label = "1 lanes" ] + 82 -> 263 [ label = "2 lanes" ] + 273 -> 82 [ label = "2 lanes" ] + 268 -> 267 [ label = "1 lanes" ] + 267 -> 269 [ label = "1 lanes" ] + 554 -> 274 [ label = "1 lanes" ] + 274 -> 275 [ label = "1 lanes" ] + 275 -> 274 [ label = "1 lanes" ] + 145 -> 37 [ label = "2 lanes" ] + 37 -> 145 [ label = "2 lanes" ] + 143 -> 145 [ label = "2 lanes" ] + 145 -> 143 [ label = "2 lanes" ] + 479 -> 277 [ label = "1 lanes" ] + 180 -> 142 [ label = "0 lanes" ] + 253 -> 374 [ label = "0 lanes" ] + 374 -> 180 [ label = "0 lanes" ] + 192 -> 427 [ label = "2 lanes" ] + 427 -> 428 [ label = "2 lanes" ] + 428 -> 429 [ label = "2 lanes" ] + 172 -> 252 [ label = "3 lanes" ] 186 -> 172 [ label = "3 lanes" ] - 282 -> 253 [ label = "0 lanes" ] - 154 -> 304 [ label = "3 lanes" ] - 304 -> 164 [ label = "3 lanes" ] - 283 -> 579 [ label = "3 lanes" ] - 579 -> 284 [ label = "3 lanes" ] - 22 -> 30 [ label = "4 lanes" ] - 30 -> 171 [ label = "4 lanes" ] + 279 -> 252 [ label = "0 lanes" ] + 156 -> 301 [ label = "3 lanes" ] + 301 -> 165 [ label = "3 lanes" ] + 280 -> 567 [ label = "3 lanes" ] + 567 -> 281 [ label = "3 lanes" ] + 34 -> 41 [ label = "4 lanes" ] + 41 -> 171 [ label = "4 lanes" ] 171 -> 184 [ label = "4 lanes" ] - 284 -> 22 [ label = "4 lanes" ] - 184 -> 343 [ label = "3 lanes" ] - 286 -> 364 [ label = "1 lanes" ] - 287 -> 363 [ label = "1 lanes" ] - 289 -> 367 [ label = "1 lanes" ] - 367 -> 290 [ label = "1 lanes" ] - 291 -> 292 [ label = "1 lanes" ] - 295 -> 345 [ label = "1 lanes" ] - 345 -> 350 [ label = "1 lanes" ] - 349 -> 351 [ label = "1 lanes" ] - 350 -> 349 [ label = "1 lanes" ] - 351 -> 293 [ label = "1 lanes" ] - 293 -> 294 [ label = "1 lanes" ] - 306 -> 307 [ label = "2 lanes" ] - 310 -> 309 [ label = "1 lanes" ] - 309 -> 310 [ label = "1 lanes" ] - 260 -> 311 [ label = "1 lanes" ] - 145 -> 312 [ label = "2 lanes" ] - 312 -> 145 [ label = "2 lanes" ] - 262 -> 145 [ label = "2 lanes" ] - 145 -> 262 [ label = "2 lanes" ] - 315 -> 314 [ label = "1 lanes" ] + 281 -> 34 [ label = "4 lanes" ] + 184 -> 337 [ label = "3 lanes" ] + 283 -> 358 [ label = "1 lanes" ] + 284 -> 357 [ label = "1 lanes" ] + 286 -> 361 [ label = "1 lanes" ] + 361 -> 287 [ label = "1 lanes" ] + 288 -> 289 [ label = "1 lanes" ] + 292 -> 339 [ label = "1 lanes" ] + 339 -> 344 [ label = "1 lanes" ] + 343 -> 345 [ label = "1 lanes" ] + 344 -> 343 [ label = "1 lanes" ] + 345 -> 290 [ label = "1 lanes" ] + 290 -> 291 [ label = "1 lanes" ] + 303 -> 304 [ label = "2 lanes" ] + 305 -> 8 [ label = "1 lanes" ] + 8 -> 305 [ label = "1 lanes" ] + 259 -> 7 [ label = "1 lanes" ] + 147 -> 306 [ label = "2 lanes" ] + 306 -> 147 [ label = "2 lanes" ] + 261 -> 147 [ label = "2 lanes" ] + 147 -> 261 [ label = "2 lanes" ] + 309 -> 308 [ label = "1 lanes" ] + 308 -> 309 [ label = "1 lanes" ] + 318 -> 260 [ label = "1 lanes" ] + 311 -> 310 [ label = "1 lanes" ] + 200 -> 551 [ label = "2 lanes" ] + 544 -> 553 [ label = "2 lanes" ] + 551 -> 544 [ label = "2 lanes" ] + 256 -> 552 [ label = "2 lanes" ] + 552 -> 316 [ label = "2 lanes" ] + 315 -> 256 [ label = "2 lanes" ] 314 -> 315 [ label = "1 lanes" ] - 324 -> 261 [ label = "1 lanes" ] - 317 -> 316 [ label = "1 lanes" ] - 201 -> 563 [ label = "2 lanes" ] - 556 -> 565 [ label = "2 lanes" ] - 563 -> 556 [ label = "2 lanes" ] - 257 -> 564 [ label = "2 lanes" ] - 564 -> 322 [ label = "2 lanes" ] - 321 -> 257 [ label = "2 lanes" ] - 320 -> 321 [ label = "1 lanes" ] - 319 -> 320 [ label = "1 lanes" ] - 318 -> 319 [ label = "1 lanes" ] - 329 -> 323 [ label = "1 lanes" ] - 326 -> 325 [ label = "1 lanes" ] - 327 -> 326 [ label = "1 lanes" ] - 316 -> 329 [ label = "1 lanes" ] - 328 -> 316 [ label = "1 lanes" ] - 63 -> 329 [ label = "1 lanes" ] - 327 -> 63 [ label = "1 lanes" ] - 330 -> 327 [ label = "1 lanes" ] - 43 -> 44 [ label = "2 lanes" ] - 44 -> 45 [ label = "2 lanes" ] - 168 -> 151 [ label = "2 lanes" ] - 86 -> 54 [ label = "2 lanes" ] - 87 -> 17 [ label = "3 lanes" ] - 264 -> 335 [ label = "1 lanes" ] - 569 -> 338 [ label = "3 lanes" ] - 135 -> 336 [ label = "3 lanes" ] - 101 -> 333 [ label = "3 lanes" ] - 338 -> 101 [ label = "3 lanes" ] - 333 -> 31 [ label = "2 lanes" ] - 17 -> 209 [ label = "3 lanes" ] - 209 -> 18 [ label = "3 lanes" ] - 45 -> 229 [ label = "3 lanes" ] - 202 -> 227 [ label = "3 lanes" ] - 227 -> 499 [ label = "3 lanes" ] - 228 -> 202 [ label = "3 lanes" ] - 229 -> 228 [ label = "3 lanes" ] - 205 -> 165 [ label = "1 lanes" ] - 239 -> 26 [ label = "3 lanes" ] - 135 -> 442 [ label = "2 lanes" ] - 442 -> 544 [ label = "2 lanes" ] - 544 -> 334 [ label = "2 lanes" ] - 345 -> 344 [ label = "1 lanes" ] - 344 -> 346 [ label = "1 lanes" ] - 347 -> 344 [ label = "1 lanes" ] - 346 -> 349 [ label = "1 lanes" ] - 348 -> 369 [ label = "1 lanes" ] - 353 -> 346 [ label = "1 lanes" ] - 357 -> 353 [ label = "1 lanes" ] - 364 -> 348 [ label = "1 lanes" ] - 369 -> 357 [ label = "1 lanes" ] - 285 -> 350 [ label = "1 lanes" ] - 352 -> 365 [ label = "1 lanes" ] - 356 -> 362 [ label = "1 lanes" ] - 362 -> 351 [ label = "1 lanes" ] - 363 -> 352 [ label = "1 lanes" ] - 365 -> 356 [ label = "1 lanes" ] + 313 -> 314 [ label = "1 lanes" ] + 312 -> 313 [ label = "1 lanes" ] + 323 -> 317 [ label = "1 lanes" ] + 320 -> 319 [ label = "1 lanes" ] + 321 -> 320 [ label = "1 lanes" ] + 310 -> 323 [ label = "1 lanes" ] + 322 -> 310 [ label = "1 lanes" ] + 70 -> 323 [ label = "1 lanes" ] + 321 -> 70 [ label = "1 lanes" ] + 324 -> 321 [ label = "1 lanes" ] + 53 -> 54 [ label = "2 lanes" ] + 54 -> 55 [ label = "2 lanes" ] + 169 -> 153 [ label = "2 lanes" ] + 89 -> 63 [ label = "2 lanes" ] + 90 -> 30 [ label = "3 lanes" ] + 263 -> 329 [ label = "1 lanes" ] + 557 -> 332 [ label = "3 lanes" ] + 137 -> 330 [ label = "3 lanes" ] + 103 -> 327 [ label = "3 lanes" ] + 332 -> 103 [ label = "3 lanes" ] + 327 -> 42 [ label = "2 lanes" ] + 30 -> 208 [ label = "3 lanes" ] + 208 -> 31 [ label = "3 lanes" ] + 55 -> 228 [ label = "3 lanes" ] + 201 -> 226 [ label = "3 lanes" ] + 226 -> 490 [ label = "3 lanes" ] + 227 -> 201 [ label = "3 lanes" ] + 228 -> 227 [ label = "3 lanes" ] + 204 -> 166 [ label = "1 lanes" ] + 238 -> 38 [ label = "3 lanes" ] + 137 -> 434 [ label = "2 lanes" ] + 434 -> 532 [ label = "2 lanes" ] + 532 -> 328 [ label = "2 lanes" ] + 339 -> 338 [ label = "1 lanes" ] + 338 -> 340 [ label = "1 lanes" ] + 341 -> 338 [ label = "1 lanes" ] + 340 -> 343 [ label = "1 lanes" ] + 342 -> 363 [ label = "1 lanes" ] + 347 -> 340 [ label = "1 lanes" ] + 351 -> 347 [ label = "1 lanes" ] + 358 -> 342 [ label = "1 lanes" ] + 363 -> 351 [ label = "1 lanes" ] + 282 -> 344 [ label = "1 lanes" ] + 346 -> 359 [ label = "1 lanes" ] + 350 -> 356 [ label = "1 lanes" ] + 356 -> 345 [ label = "1 lanes" ] + 357 -> 346 [ label = "1 lanes" ] + 359 -> 350 [ label = "1 lanes" ] + 348 -> 347 [ label = "1 lanes" ] + 352 -> 349 [ label = "1 lanes" ] + 349 -> 350 [ label = "1 lanes" ] + 350 -> 366 [ label = "1 lanes" ] + 351 -> 367 [ label = "1 lanes" ] + 366 -> 351 [ label = "1 lanes" ] 354 -> 353 [ label = "1 lanes" ] - 358 -> 355 [ label = "1 lanes" ] - 355 -> 356 [ label = "1 lanes" ] - 356 -> 372 [ label = "1 lanes" ] - 357 -> 373 [ label = "1 lanes" ] - 372 -> 357 [ label = "1 lanes" ] - 360 -> 359 [ label = "1 lanes" ] - 290 -> 348 [ label = "1 lanes" ] - 348 -> 352 [ label = "1 lanes" ] - 352 -> 291 [ label = "1 lanes" ] - 362 -> 361 [ label = "1 lanes" ] - 364 -> 363 [ label = "1 lanes" ] - 367 -> 366 [ label = "1 lanes" ] - 366 -> 580 [ label = "1 lanes" ] - 370 -> 366 [ label = "1 lanes" ] - 580 -> 368 [ label = "1 lanes" ] - 581 -> 370 [ label = "1 lanes" ] - 32 -> 439 [ label = "2 lanes" ] - 439 -> 138 [ label = "2 lanes" ] - 370 -> 373 [ label = "1 lanes" ] - 372 -> 371 [ label = "1 lanes" ] - 569 -> 568 [ label = "3 lanes" ] - 568 -> 569 [ label = "3 lanes" ] - 377 -> 36 [ label = "1 lanes" ] - 378 -> 419 [ label = "1 lanes" ] - 339 -> 342 [ label = "0 lanes" ] - 342 -> 87 [ label = "0 lanes" ] - 339 -> 18 [ label = "3 lanes" ] - 380 -> 388 [ label = "0 lanes" ] - 386 -> 380 [ label = "0 lanes" ] - 388 -> 177 [ label = "0 lanes" ] - 180 -> 382 [ label = "0 lanes" ] - 382 -> 49 [ label = "0 lanes" ] - 386 -> 180 [ label = "0 lanes" ] - 385 -> 386 [ label = "0 lanes" ] - 389 -> 179 [ label = "0 lanes" ] - 388 -> 389 [ label = "0 lanes" ] + 287 -> 342 [ label = "1 lanes" ] + 342 -> 346 [ label = "1 lanes" ] + 346 -> 288 [ label = "1 lanes" ] + 356 -> 355 [ label = "1 lanes" ] + 358 -> 357 [ label = "1 lanes" ] + 361 -> 360 [ label = "1 lanes" ] + 360 -> 568 [ label = "1 lanes" ] + 364 -> 360 [ label = "1 lanes" ] + 568 -> 362 [ label = "1 lanes" ] + 569 -> 364 [ label = "1 lanes" ] + 43 -> 431 [ label = "2 lanes" ] + 431 -> 140 [ label = "2 lanes" ] + 364 -> 367 [ label = "1 lanes" ] + 366 -> 365 [ label = "1 lanes" ] + 557 -> 556 [ label = "3 lanes" ] + 556 -> 557 [ label = "3 lanes" ] + 370 -> 46 [ label = "1 lanes" ] + 371 -> 411 [ label = "1 lanes" ] + 333 -> 336 [ label = "0 lanes" ] + 336 -> 90 [ label = "0 lanes" ] + 333 -> 31 [ label = "3 lanes" ] + 373 -> 381 [ label = "0 lanes" ] + 379 -> 373 [ label = "0 lanes" ] + 381 -> 177 [ label = "0 lanes" ] + 180 -> 375 [ label = "0 lanes" ] + 375 -> 58 [ label = "0 lanes" ] + 379 -> 180 [ label = "0 lanes" ] + 378 -> 379 [ label = "0 lanes" ] + 382 -> 179 [ label = "0 lanes" ] 381 -> 382 [ label = "0 lanes" ] - 382 -> 383 [ label = "0 lanes" ] - 384 -> 385 [ label = "0 lanes" ] - 385 -> 381 [ label = "0 lanes" ] - 389 -> 384 [ label = "0 lanes" ] - 22 -> 387 [ label = "2 lanes" ] - 166 -> 22 [ label = "2 lanes" ] - 179 -> 166 [ label = "2 lanes" ] - 164 -> 306 [ label = "3 lanes" ] - 306 -> 496 [ label = "3 lanes" ] - 496 -> 299 [ label = "3 lanes" ] - 46 -> 303 [ label = "1 lanes" ] - 46 -> 154 [ label = "3 lanes" ] - 152 -> 393 [ label = "3 lanes" ] - 392 -> 391 [ label = "3 lanes" ] - 393 -> 392 [ label = "3 lanes" ] - 152 -> 46 [ label = "5 lanes" ] - 193 -> 394 [ label = "1 lanes" ] - 394 -> 425 [ label = "1 lanes" ] - 425 -> 429 [ label = "1 lanes" ] - 429 -> 193 [ label = "1 lanes" ] - 337 -> 545 [ label = "2 lanes" ] - 545 -> 396 [ label = "2 lanes" ] - 340 -> 336 [ label = "3 lanes" ] - 396 -> 340 [ label = "3 lanes" ] - 300 -> 394 [ label = "2 lanes" ] - 394 -> 425 [ label = "2 lanes" ] - 397 -> 398 [ label = "2 lanes" ] - 398 -> 255 [ label = "2 lanes" ] - 425 -> 397 [ label = "2 lanes" ] - 397 -> 68 [ label = "1 lanes" ] - 340 -> 478 [ label = "2 lanes" ] - 442 -> 340 [ label = "2 lanes" ] - 477 -> 442 [ label = "2 lanes" ] - 400 -> 256 [ label = "2 lanes" ] - 255 -> 441 [ label = "2 lanes" ] - 441 -> 477 [ label = "2 lanes" ] - 95 -> 153 [ label = "1 lanes" ] - 399 -> 95 [ label = "1 lanes" ] - 403 -> 431 [ label = "2 lanes" ] - 404 -> 510 [ label = "2 lanes" ] - 431 -> 404 [ label = "2 lanes" ] - 510 -> 405 [ label = "2 lanes" ] - 374 -> 376 [ label = "1 lanes" ] - 376 -> 406 [ label = "1 lanes" ] - 405 -> 54 [ label = "1 lanes" ] - 406 -> 405 [ label = "1 lanes" ] - 78 -> 87 [ label = "3 lanes" ] - 87 -> 78 [ label = "3 lanes" ] - 129 -> 78 [ label = "3 lanes" ] - 78 -> 129 [ label = "3 lanes" ] - 20 -> 75 [ label = "3 lanes" ] + 374 -> 375 [ label = "0 lanes" ] + 375 -> 376 [ label = "0 lanes" ] + 377 -> 378 [ label = "0 lanes" ] + 378 -> 374 [ label = "0 lanes" ] + 382 -> 377 [ label = "0 lanes" ] + 34 -> 380 [ label = "2 lanes" ] + 167 -> 34 [ label = "2 lanes" ] + 179 -> 167 [ label = "2 lanes" ] + 165 -> 303 [ label = "3 lanes" ] + 303 -> 487 [ label = "3 lanes" ] + 487 -> 296 [ label = "3 lanes" ] + 56 -> 300 [ label = "1 lanes" ] + 56 -> 156 [ label = "3 lanes" ] + 154 -> 386 [ label = "3 lanes" ] + 385 -> 384 [ label = "3 lanes" ] + 386 -> 385 [ label = "3 lanes" ] + 154 -> 56 [ label = "5 lanes" ] + 193 -> 387 [ label = "1 lanes" ] + 387 -> 417 [ label = "1 lanes" ] + 417 -> 421 [ label = "1 lanes" ] + 421 -> 193 [ label = "1 lanes" ] + 331 -> 533 [ label = "2 lanes" ] + 533 -> 389 [ label = "2 lanes" ] + 334 -> 330 [ label = "3 lanes" ] + 389 -> 334 [ label = "3 lanes" ] + 297 -> 387 [ label = "2 lanes" ] + 387 -> 417 [ label = "2 lanes" ] + 390 -> 391 [ label = "2 lanes" ] + 391 -> 254 [ label = "2 lanes" ] + 417 -> 390 [ label = "2 lanes" ] + 390 -> 75 [ label = "1 lanes" ] + 334 -> 470 [ label = "2 lanes" ] + 434 -> 334 [ label = "2 lanes" ] + 469 -> 434 [ label = "2 lanes" ] + 393 -> 255 [ label = "2 lanes" ] + 254 -> 433 [ label = "2 lanes" ] + 433 -> 469 [ label = "2 lanes" ] + 98 -> 155 [ label = "1 lanes" ] + 392 -> 98 [ label = "1 lanes" ] + 395 -> 423 [ label = "2 lanes" ] + 396 -> 499 [ label = "2 lanes" ] + 423 -> 396 [ label = "2 lanes" ] + 499 -> 397 [ label = "2 lanes" ] + 368 -> 369 [ label = "1 lanes" ] + 369 -> 398 [ label = "1 lanes" ] + 397 -> 63 [ label = "1 lanes" ] + 398 -> 397 [ label = "1 lanes" ] + 83 -> 90 [ label = "3 lanes" ] + 90 -> 83 [ label = "3 lanes" ] + 131 -> 83 [ label = "3 lanes" ] + 83 -> 131 [ label = "3 lanes" ] + 32 -> 81 [ label = "3 lanes" ] + 81 -> 384 [ label = "3 lanes" ] + 330 -> 399 [ label = "2 lanes" ] + 399 -> 164 [ label = "2 lanes" ] + 164 -> 163 [ label = "3 lanes" ] + 399 -> 392 [ label = "2 lanes" ] + 400 -> 4 [ label = "2 lanes" ] + 149 -> 152 [ label = "1 lanes" ] + 98 -> 400 [ label = "2 lanes" ] + 99 -> 108 [ label = "2 lanes" ] + 108 -> 98 [ label = "2 lanes" ] + 149 -> 160 [ label = "2 lanes" ] + 150 -> 99 [ label = "2 lanes" ] + 160 -> 150 [ label = "2 lanes" ] + 255 -> 149 [ label = "2 lanes" ] + 84 -> 401 [ label = "1 lanes" ] + 234 -> 468 [ label = "1 lanes" ] + 213 -> 214 [ label = "1 lanes" ] + 215 -> 217 [ label = "2 lanes" ] + 217 -> 410 [ label = "2 lanes" ] + 410 -> 411 [ label = "2 lanes" ] + 411 -> 561 [ label = "2 lanes" ] + 216 -> 214 [ label = "1 lanes" ] + 403 -> 405 [ label = "1 lanes" ] + 405 -> 487 [ label = "1 lanes" ] + 487 -> 216 [ label = "1 lanes" ] + 196 -> 312 [ label = "1 lanes" ] + 299 -> 196 [ label = "1 lanes" ] + 295 -> 296 [ label = "1 lanes" ] + 195 -> 406 [ label = "1 lanes" ] + 294 -> 402 [ label = "1 lanes" ] + 402 -> 62 [ label = "1 lanes" ] + 408 -> 548 [ label = "1 lanes" ] + 548 -> 407 [ label = "1 lanes" ] + 411 -> 416 [ label = "1 lanes" ] + 411 -> 416 [ label = "1 lanes" ] + 412 -> 410 [ label = "1 lanes" ] + 415 -> 414 [ label = "1 lanes" ] + 27 -> 28 [ label = "2 lanes" ] + 28 -> 209 [ label = "2 lanes" ] + 254 -> 27 [ label = "2 lanes" ] + 370 -> 416 [ label = "1 lanes" ] + 416 -> 370 [ label = "1 lanes" ] + 31 -> 437 [ label = "1 lanes" ] + 437 -> 433 [ label = "1 lanes" ] + 417 -> 418 [ label = "1 lanes" ] + 194 -> 319 [ label = "1 lanes" ] + 319 -> 419 [ label = "1 lanes" ] + 419 -> 420 [ label = "1 lanes" ] + 193 -> 540 [ label = "1 lanes" ] + 540 -> 193 [ label = "1 lanes" ] + 540 -> 445 [ label = "1 lanes" ] + 445 -> 540 [ label = "1 lanes" ] + 101 -> 537 [ label = "0 lanes" ] + 537 -> 42 [ label = "0 lanes" ] + 91 -> 422 [ label = "2 lanes" ] + 423 -> 91 [ label = "2 lanes" ] + 96 -> 13 [ label = "2 lanes" ] + 425 -> 426 [ label = "2 lanes" ] + 426 -> 96 [ label = "2 lanes" ] + 395 -> 426 [ label = "2 lanes" ] + 380 -> 431 [ label = "1 lanes" ] + 431 -> 438 [ label = "1 lanes" ] + 438 -> 440 [ label = "1 lanes" ] + 439 -> 430 [ label = "1 lanes" ] + 440 -> 439 [ label = "1 lanes" ] + 563 -> 380 [ label = "1 lanes" ] + 110 -> 278 [ label = "2 lanes" ] + 134 -> 110 [ label = "2 lanes" ] + 160 -> 190 [ label = "2 lanes" ] + 190 -> 235 [ label = "2 lanes" ] + 432 -> 160 [ label = "2 lanes" ] + 436 -> 435 [ label = "1 lanes" ] + 116 -> 117 [ label = "1 lanes" ] + 117 -> 131 [ label = "1 lanes" ] + 132 -> 488 [ label = "2 lanes" ] + 116 -> 132 [ label = "2 lanes" ] + 132 -> 116 [ label = "2 lanes" ] + 325 -> 441 [ label = "1 lanes" ] + 442 -> 510 [ label = "1 lanes" ] + 507 -> 515 [ label = "1 lanes" ] + 510 -> 525 [ label = "1 lanes" ] + 515 -> 518 [ label = "1 lanes" ] + 518 -> 521 [ label = "1 lanes" ] + 521 -> 443 [ label = "1 lanes" ] + 525 -> 507 [ label = "1 lanes" ] + 330 -> 392 [ label = "2 lanes" ] + 330 -> 335 [ label = "3 lanes" ] + 444 -> 195 [ label = "1 lanes" ] + 195 -> 444 [ label = "1 lanes" ] + 445 -> 194 [ label = "1 lanes" ] + 419 -> 70 [ label = "1 lanes" ] + 196 -> 455 [ label = "2 lanes" ] + 446 -> 447 [ label = "2 lanes" ] + 447 -> 451 [ label = "2 lanes" ] + 450 -> 256 [ label = "2 lanes" ] + 451 -> 450 [ label = "2 lanes" ] + 452 -> 446 [ label = "2 lanes" ] + 453 -> 452 [ label = "2 lanes" ] + 455 -> 453 [ label = "2 lanes" ] + 448 -> 256 [ label = "1 lanes" ] + 449 -> 456 [ label = "1 lanes" ] + 447 -> 450 [ label = "1 lanes" ] + 450 -> 462 [ label = "2 lanes" ] + 451 -> 452 [ label = "1 lanes" ] + 453 -> 454 [ label = "1 lanes" ] + 455 -> 446 [ label = "1 lanes" ] + 454 -> 456 [ label = "2 lanes" ] + 456 -> 455 [ label = "2 lanes" ] + 460 -> 457 [ label = "2 lanes" ] + 386 -> 156 [ label = "2 lanes" ] + 458 -> 386 [ label = "2 lanes" ] + 302 -> 458 [ label = "2 lanes" ] + 458 -> 460 [ label = "2 lanes" ] + 297 -> 298 [ label = "2 lanes" ] + 299 -> 304 [ label = "2 lanes" ] + 300 -> 299 [ label = "2 lanes" ] + 304 -> 405 [ label = "2 lanes" ] + 405 -> 297 [ label = "2 lanes" ] + 459 -> 300 [ label = "2 lanes" ] + 301 -> 459 [ label = "2 lanes" ] + 385 -> 301 [ label = "2 lanes" ] + 461 -> 385 [ label = "2 lanes" ] + 302 -> 461 [ label = "2 lanes" ] + 462 -> 463 [ label = "1 lanes" ] + 464 -> 462 [ label = "1 lanes" ] + 466 -> 464 [ label = "1 lanes" ] + 464 -> 465 [ label = "1 lanes" ] + 468 -> 188 [ label = "1 lanes" ] + 470 -> 393 [ label = "2 lanes" ] + 150 -> 161 [ label = "2 lanes" ] + 161 -> 151 [ label = "2 lanes" ] + 294 -> 295 [ label = "1 lanes" ] + 31 -> 137 [ label = "3 lanes" ] + 66 -> 157 [ label = "3 lanes" ] + 335 -> 66 [ label = "3 lanes" ] + 335 -> 333 [ label = "0 lanes" ] + 388 -> 393 [ label = "2 lanes" ] + 472 -> 388 [ label = "2 lanes" ] + 5 -> 97 [ label = "3 lanes" ] + 223 -> 225 [ label = "2 lanes" ] + 224 -> 478 [ label = "2 lanes" ] + 225 -> 224 [ label = "2 lanes" ] + 404 -> 223 [ label = "2 lanes" ] + 473 -> 457 [ label = "2 lanes" ] + 477 -> 480 [ label = "2 lanes" ] + 478 -> 477 [ label = "2 lanes" ] + 479 -> 478 [ label = "2 lanes" ] + 480 -> 277 [ label = "1 lanes" ] + 159 -> 474 [ label = "1 lanes" ] + 474 -> 159 [ label = "1 lanes" ] + 474 -> 481 [ label = "1 lanes" ] + 481 -> 474 [ label = "1 lanes" ] 75 -> 391 [ label = "3 lanes" ] - 336 -> 407 [ label = "2 lanes" ] - 407 -> 163 [ label = "2 lanes" ] - 163 -> 162 [ label = "3 lanes" ] - 407 -> 399 [ label = "2 lanes" ] - 408 -> 5 [ label = "2 lanes" ] - 147 -> 150 [ label = "1 lanes" ] - 95 -> 408 [ label = "2 lanes" ] - 96 -> 106 [ label = "2 lanes" ] - 106 -> 95 [ label = "2 lanes" ] - 147 -> 158 [ label = "2 lanes" ] - 148 -> 96 [ label = "2 lanes" ] - 158 -> 148 [ label = "2 lanes" ] - 256 -> 147 [ label = "2 lanes" ] - 79 -> 409 [ label = "1 lanes" ] - 235 -> 476 [ label = "1 lanes" ] - 214 -> 215 [ label = "1 lanes" ] - 216 -> 218 [ label = "2 lanes" ] - 218 -> 418 [ label = "2 lanes" ] - 418 -> 419 [ label = "2 lanes" ] - 419 -> 573 [ label = "2 lanes" ] - 217 -> 215 [ label = "1 lanes" ] - 411 -> 413 [ label = "1 lanes" ] - 413 -> 496 [ label = "1 lanes" ] - 496 -> 217 [ label = "1 lanes" ] - 197 -> 318 [ label = "1 lanes" ] - 302 -> 197 [ label = "1 lanes" ] - 298 -> 299 [ label = "1 lanes" ] - 195 -> 414 [ label = "1 lanes" ] - 297 -> 410 [ label = "1 lanes" ] - 410 -> 53 [ label = "1 lanes" ] - 416 -> 560 [ label = "1 lanes" ] - 560 -> 415 [ label = "1 lanes" ] - 419 -> 424 [ label = "1 lanes" ] - 419 -> 424 [ label = "1 lanes" ] - 420 -> 418 [ label = "1 lanes" ] - 423 -> 422 [ label = "1 lanes" ] - 14 -> 15 [ label = "2 lanes" ] - 15 -> 210 [ label = "2 lanes" ] - 255 -> 14 [ label = "2 lanes" ] - 377 -> 424 [ label = "1 lanes" ] - 424 -> 377 [ label = "1 lanes" ] - 18 -> 445 [ label = "1 lanes" ] - 445 -> 441 [ label = "1 lanes" ] - 425 -> 426 [ label = "1 lanes" ] - 194 -> 325 [ label = "1 lanes" ] - 325 -> 427 [ label = "1 lanes" ] - 427 -> 428 [ label = "1 lanes" ] - 193 -> 552 [ label = "1 lanes" ] - 552 -> 193 [ label = "1 lanes" ] - 552 -> 453 [ label = "1 lanes" ] - 453 -> 552 [ label = "1 lanes" ] - 99 -> 549 [ label = "0 lanes" ] - 549 -> 31 [ label = "0 lanes" ] - 88 -> 430 [ label = "2 lanes" ] - 431 -> 88 [ label = "2 lanes" ] - 93 -> 170 [ label = "2 lanes" ] - 433 -> 434 [ label = "2 lanes" ] - 434 -> 93 [ label = "2 lanes" ] - 403 -> 434 [ label = "2 lanes" ] - 387 -> 439 [ label = "1 lanes" ] - 439 -> 446 [ label = "1 lanes" ] - 446 -> 448 [ label = "1 lanes" ] - 447 -> 438 [ label = "1 lanes" ] - 448 -> 447 [ label = "1 lanes" ] - 575 -> 387 [ label = "1 lanes" ] - 108 -> 281 [ label = "2 lanes" ] - 132 -> 108 [ label = "2 lanes" ] - 158 -> 190 [ label = "2 lanes" ] - 190 -> 236 [ label = "2 lanes" ] - 440 -> 158 [ label = "2 lanes" ] - 444 -> 443 [ label = "1 lanes" ] - 114 -> 115 [ label = "1 lanes" ] - 115 -> 129 [ label = "1 lanes" ] - 130 -> 497 [ label = "2 lanes" ] - 114 -> 130 [ label = "2 lanes" ] - 130 -> 114 [ label = "2 lanes" ] - 331 -> 449 [ label = "1 lanes" ] - 450 -> 521 [ label = "1 lanes" ] - 518 -> 526 [ label = "1 lanes" ] - 521 -> 536 [ label = "1 lanes" ] - 526 -> 529 [ label = "1 lanes" ] - 529 -> 532 [ label = "1 lanes" ] - 532 -> 451 [ label = "1 lanes" ] - 536 -> 518 [ label = "1 lanes" ] - 336 -> 399 [ label = "2 lanes" ] - 336 -> 341 [ label = "3 lanes" ] - 452 -> 195 [ label = "1 lanes" ] - 195 -> 452 [ label = "1 lanes" ] - 453 -> 194 [ label = "1 lanes" ] - 427 -> 63 [ label = "1 lanes" ] - 197 -> 463 [ label = "2 lanes" ] - 454 -> 455 [ label = "2 lanes" ] - 455 -> 459 [ label = "2 lanes" ] - 458 -> 257 [ label = "2 lanes" ] - 459 -> 458 [ label = "2 lanes" ] - 460 -> 454 [ label = "2 lanes" ] - 461 -> 460 [ label = "2 lanes" ] - 463 -> 461 [ label = "2 lanes" ] - 456 -> 257 [ label = "1 lanes" ] - 457 -> 464 [ label = "1 lanes" ] - 455 -> 458 [ label = "1 lanes" ] - 458 -> 470 [ label = "2 lanes" ] - 459 -> 460 [ label = "1 lanes" ] - 461 -> 462 [ label = "1 lanes" ] - 463 -> 454 [ label = "1 lanes" ] - 462 -> 464 [ label = "2 lanes" ] - 464 -> 463 [ label = "2 lanes" ] - 468 -> 465 [ label = "2 lanes" ] - 393 -> 154 [ label = "2 lanes" ] - 466 -> 393 [ label = "2 lanes" ] - 305 -> 466 [ label = "2 lanes" ] - 466 -> 468 [ label = "2 lanes" ] - 300 -> 301 [ label = "2 lanes" ] - 302 -> 307 [ label = "2 lanes" ] - 303 -> 302 [ label = "2 lanes" ] - 307 -> 413 [ label = "2 lanes" ] - 413 -> 300 [ label = "2 lanes" ] - 467 -> 303 [ label = "2 lanes" ] - 304 -> 467 [ label = "2 lanes" ] - 392 -> 304 [ label = "2 lanes" ] - 469 -> 392 [ label = "2 lanes" ] - 305 -> 469 [ label = "2 lanes" ] - 470 -> 471 [ label = "1 lanes" ] - 472 -> 470 [ label = "1 lanes" ] - 474 -> 472 [ label = "1 lanes" ] - 472 -> 473 [ label = "1 lanes" ] - 476 -> 188 [ label = "1 lanes" ] - 478 -> 400 [ label = "2 lanes" ] - 148 -> 159 [ label = "2 lanes" ] - 159 -> 149 [ label = "2 lanes" ] - 297 -> 298 [ label = "1 lanes" ] - 18 -> 135 [ label = "3 lanes" ] - 59 -> 155 [ label = "3 lanes" ] - 341 -> 59 [ label = "3 lanes" ] - 341 -> 339 [ label = "0 lanes" ] - 395 -> 400 [ label = "2 lanes" ] - 480 -> 395 [ label = "2 lanes" ] - 402 -> 94 [ label = "3 lanes" ] - 224 -> 226 [ label = "2 lanes" ] - 225 -> 486 [ label = "2 lanes" ] - 226 -> 225 [ label = "2 lanes" ] - 412 -> 224 [ label = "2 lanes" ] - 481 -> 465 [ label = "2 lanes" ] - 485 -> 488 [ label = "2 lanes" ] - 486 -> 485 [ label = "2 lanes" ] - 487 -> 486 [ label = "2 lanes" ] - 488 -> 280 [ label = "1 lanes" ] - 157 -> 482 [ label = "1 lanes" ] - 482 -> 157 [ label = "1 lanes" ] - 482 -> 489 [ label = "1 lanes" ] - 489 -> 482 [ label = "1 lanes" ] - 68 -> 398 [ label = "3 lanes" ] - 398 -> 60 [ label = "3 lanes" ] - 67 -> 582 [ label = "2 lanes" ] - 330 -> 67 [ label = "2 lanes" ] - 582 -> 68 [ label = "2 lanes" ] - 465 -> 483 [ label = "2 lanes" ] - 483 -> 484 [ label = "2 lanes" ] - 484 -> 482 [ label = "2 lanes" ] - 586 -> 234 [ label = "2 lanes" ] - 136 -> 33 [ label = "2 lanes" ] - 491 -> 137 [ label = "2 lanes" ] - 298 -> 53 [ label = "3 lanes" ] - 167 -> 23 [ label = "2 lanes" ] - 23 -> 167 [ label = "2 lanes" ] - 177 -> 167 [ label = "2 lanes" ] - 167 -> 177 [ label = "2 lanes" ] - 492 -> 503 [ label = "0 lanes" ] - 503 -> 185 [ label = "0 lanes" ] - 38 -> 220 [ label = "3 lanes" ] - 220 -> 16 [ label = "3 lanes" ] - 391 -> 38 [ label = "3 lanes" ] - 21 -> 224 [ label = "3 lanes" ] - 224 -> 499 [ label = "3 lanes" ] - 281 -> 21 [ label = "3 lanes" ] - 39 -> 281 [ label = "3 lanes" ] - 16 -> 378 [ label = "3 lanes" ] - 378 -> 39 [ label = "3 lanes" ] - 235 -> 297 [ label = "1 lanes" ] - 191 -> 235 [ label = "1 lanes" ] - 113 -> 191 [ label = "1 lanes" ] - 499 -> 20 [ label = "3 lanes" ] - 500 -> 501 [ label = "1 lanes" ] - 501 -> 508 [ label = "1 lanes" ] - 183 -> 501 [ label = "1 lanes" ] - 503 -> 507 [ label = "1 lanes" ] - 507 -> 0 [ label = "1 lanes" ] - 505 -> 506 [ label = "1 lanes" ] + 391 -> 67 [ label = "3 lanes" ] + 74 -> 570 [ label = "2 lanes" ] + 324 -> 74 [ label = "2 lanes" ] + 570 -> 75 [ label = "2 lanes" ] + 457 -> 475 [ label = "2 lanes" ] + 475 -> 476 [ label = "2 lanes" ] + 476 -> 474 [ label = "2 lanes" ] + 574 -> 233 [ label = "2 lanes" ] + 138 -> 44 [ label = "2 lanes" ] + 482 -> 139 [ label = "2 lanes" ] + 295 -> 62 [ label = "3 lanes" ] + 168 -> 35 [ label = "2 lanes" ] + 35 -> 168 [ label = "2 lanes" ] + 177 -> 168 [ label = "2 lanes" ] + 168 -> 177 [ label = "2 lanes" ] + 483 -> 493 [ label = "0 lanes" ] + 493 -> 185 [ label = "0 lanes" ] + 48 -> 219 [ label = "3 lanes" ] + 219 -> 29 [ label = "3 lanes" ] + 384 -> 48 [ label = "3 lanes" ] + 33 -> 223 [ label = "3 lanes" ] + 223 -> 490 [ label = "3 lanes" ] + 278 -> 33 [ label = "3 lanes" ] + 49 -> 278 [ label = "3 lanes" ] + 29 -> 371 [ label = "3 lanes" ] + 371 -> 49 [ label = "3 lanes" ] + 234 -> 294 [ label = "1 lanes" ] + 191 -> 234 [ label = "1 lanes" ] + 115 -> 191 [ label = "1 lanes" ] + 490 -> 32 [ label = "3 lanes" ] + 491 -> 492 [ label = "1 lanes" ] + 492 -> 497 [ label = "1 lanes" ] + 183 -> 492 [ label = "1 lanes" ] + 493 -> 496 [ label = "1 lanes" ] + 496 -> 0 [ label = "1 lanes" ] + 495 -> 1 [ label = "1 lanes" ] + 494 -> 495 [ label = "1 lanes" ] + 495 -> 496 [ label = "1 lanes" ] + 499 -> 89 [ label = "1 lanes" ] + 501 -> 513 [ label = "1 lanes" ] + 502 -> 520 [ label = "1 lanes" ] + 504 -> 514 [ label = "1 lanes" ] + 513 -> 524 [ label = "1 lanes" ] + 514 -> 502 [ label = "1 lanes" ] + 520 -> 503 [ label = "1 lanes" ] + 524 -> 504 [ label = "1 lanes" ] + 289 -> 512 [ label = "1 lanes" ] + 505 -> 516 [ label = "1 lanes" ] + 512 -> 526 [ label = "1 lanes" ] + 516 -> 519 [ label = "1 lanes" ] + 519 -> 523 [ label = "1 lanes" ] + 523 -> 326 [ label = "1 lanes" ] + 526 -> 505 [ label = "1 lanes" ] 504 -> 505 [ label = "1 lanes" ] - 505 -> 507 [ label = "1 lanes" ] - 510 -> 86 [ label = "1 lanes" ] - 512 -> 524 [ label = "1 lanes" ] - 513 -> 531 [ label = "1 lanes" ] - 515 -> 525 [ label = "1 lanes" ] - 524 -> 535 [ label = "1 lanes" ] - 525 -> 513 [ label = "1 lanes" ] - 531 -> 514 [ label = "1 lanes" ] - 535 -> 515 [ label = "1 lanes" ] - 292 -> 523 [ label = "1 lanes" ] - 516 -> 527 [ label = "1 lanes" ] - 523 -> 537 [ label = "1 lanes" ] - 527 -> 530 [ label = "1 lanes" ] - 530 -> 534 [ label = "1 lanes" ] - 534 -> 332 [ label = "1 lanes" ] - 537 -> 516 [ label = "1 lanes" ] - 515 -> 516 [ label = "1 lanes" ] - 516 -> 517 [ label = "1 lanes" ] - 518 -> 517 [ label = "1 lanes" ] + 505 -> 506 [ label = "1 lanes" ] + 507 -> 506 [ label = "1 lanes" ] + 506 -> 517 [ label = "1 lanes" ] + 508 -> 511 [ label = "1 lanes" ] + 511 -> 527 [ label = "1 lanes" ] 517 -> 528 [ label = "1 lanes" ] - 519 -> 522 [ label = "1 lanes" ] - 522 -> 538 [ label = "1 lanes" ] - 528 -> 539 [ label = "1 lanes" ] - 533 -> 520 [ label = "1 lanes" ] - 538 -> 517 [ label = "1 lanes" ] - 539 -> 533 [ label = "1 lanes" ] - 521 -> 522 [ label = "1 lanes" ] - 522 -> 523 [ label = "1 lanes" ] - 523 -> 524 [ label = "1 lanes" ] - 525 -> 527 [ label = "1 lanes" ] - 527 -> 528 [ label = "1 lanes" ] - 528 -> 526 [ label = "1 lanes" ] - 529 -> 539 [ label = "1 lanes" ] - 530 -> 513 [ label = "1 lanes" ] - 539 -> 530 [ label = "1 lanes" ] - 531 -> 534 [ label = "1 lanes" ] - 533 -> 532 [ label = "1 lanes" ] - 534 -> 533 [ label = "1 lanes" ] - 535 -> 537 [ label = "1 lanes" ] - 537 -> 538 [ label = "1 lanes" ] - 538 -> 536 [ label = "1 lanes" ] - 541 -> 435 [ label = "1 lanes" ] - 543 -> 181 [ label = "1 lanes" ] - 395 -> 545 [ label = "2 lanes" ] - 479 -> 395 [ label = "2 lanes" ] - 545 -> 544 [ label = "2 lanes" ] - 547 -> 546 [ label = "1 lanes" ] - 548 -> 547 [ label = "1 lanes" ] - 87 -> 547 [ label = "1 lanes" ] - 550 -> 549 [ label = "0 lanes" ] - 551 -> 550 [ label = "0 lanes" ] - 333 -> 550 [ label = "1 lanes" ] - 550 -> 374 [ label = "1 lanes" ] - 552 -> 553 [ label = "1 lanes" ] - 553 -> 554 [ label = "1 lanes" ] - 553 -> 452 [ label = "1 lanes" ] - 555 -> 42 [ label = "2 lanes" ] - 475 -> 556 [ label = "1 lanes" ] - 247 -> 540 [ label = "1 lanes" ] - 246 -> 557 [ label = "1 lanes" ] - 40 -> 248 [ label = "1 lanes" ] - 41 -> 558 [ label = "1 lanes" ] - 245 -> 42 [ label = "1 lanes" ] - 559 -> 560 [ label = "1 lanes" ] - 511 -> 43 [ label = "2 lanes" ] - 561 -> 562 [ label = "1 lanes" ] - 562 -> 561 [ label = "1 lanes" ] - 199 -> 317 [ label = "1 lanes" ] - 317 -> 198 [ label = "1 lanes" ] - 564 -> 563 [ label = "2 lanes" ] - 322 -> 201 [ label = "1 lanes" ] - 328 -> 200 [ label = "1 lanes" ] - 565 -> 328 [ label = "1 lanes" ] - 279 -> 570 [ label = "1 lanes" ] - 77 -> 572 [ label = "0 lanes" ] - 103 -> 571 [ label = "1 lanes" ] - 572 -> 103 [ label = "1 lanes" ] - 333 -> 379 [ label = "1 lanes" ] - 379 -> 333 [ label = "1 lanes" ] - 574 -> 481 [ label = "2 lanes" ] - 575 -> 576 [ label = "2 lanes" ] - 576 -> 574 [ label = "2 lanes" ] - 576 -> 284 [ label = "1 lanes" ] - 124 -> 143 [ label = "1 lanes" ] - 577 -> 578 [ label = "2 lanes" ] - 578 -> 577 [ label = "2 lanes" ] - 579 -> 574 [ label = "1 lanes" ] - 574 -> 579 [ label = "1 lanes" ] - 288 -> 580 [ label = "1 lanes" ] + 522 -> 509 [ label = "1 lanes" ] + 527 -> 506 [ label = "1 lanes" ] + 528 -> 522 [ label = "1 lanes" ] + 510 -> 511 [ label = "1 lanes" ] + 511 -> 512 [ label = "1 lanes" ] + 512 -> 513 [ label = "1 lanes" ] + 514 -> 516 [ label = "1 lanes" ] + 516 -> 517 [ label = "1 lanes" ] + 517 -> 515 [ label = "1 lanes" ] + 518 -> 528 [ label = "1 lanes" ] + 519 -> 502 [ label = "1 lanes" ] + 528 -> 519 [ label = "1 lanes" ] + 520 -> 523 [ label = "1 lanes" ] + 522 -> 521 [ label = "1 lanes" ] + 523 -> 522 [ label = "1 lanes" ] + 524 -> 526 [ label = "1 lanes" ] + 526 -> 527 [ label = "1 lanes" ] + 527 -> 525 [ label = "1 lanes" ] + 530 -> 427 [ label = "1 lanes" ] + 531 -> 181 [ label = "1 lanes" ] + 388 -> 533 [ label = "2 lanes" ] + 471 -> 388 [ label = "2 lanes" ] + 533 -> 532 [ label = "2 lanes" ] + 535 -> 534 [ label = "1 lanes" ] + 536 -> 535 [ label = "1 lanes" ] + 90 -> 535 [ label = "1 lanes" ] + 538 -> 537 [ label = "0 lanes" ] + 539 -> 538 [ label = "0 lanes" ] + 327 -> 538 [ label = "1 lanes" ] + 538 -> 368 [ label = "1 lanes" ] + 540 -> 541 [ label = "1 lanes" ] + 541 -> 542 [ label = "1 lanes" ] + 541 -> 444 [ label = "1 lanes" ] + 543 -> 52 [ label = "2 lanes" ] + 467 -> 544 [ label = "1 lanes" ] + 246 -> 529 [ label = "1 lanes" ] + 245 -> 545 [ label = "1 lanes" ] + 50 -> 247 [ label = "1 lanes" ] + 51 -> 546 [ label = "1 lanes" ] + 244 -> 52 [ label = "1 lanes" ] + 547 -> 548 [ label = "1 lanes" ] + 500 -> 53 [ label = "2 lanes" ] + 549 -> 550 [ label = "1 lanes" ] + 550 -> 549 [ label = "1 lanes" ] + 198 -> 311 [ label = "1 lanes" ] + 311 -> 197 [ label = "1 lanes" ] + 552 -> 551 [ label = "2 lanes" ] + 316 -> 200 [ label = "1 lanes" ] + 322 -> 199 [ label = "1 lanes" ] + 553 -> 322 [ label = "1 lanes" ] + 276 -> 558 [ label = "1 lanes" ] + 82 -> 560 [ label = "0 lanes" ] + 105 -> 559 [ label = "1 lanes" ] + 560 -> 105 [ label = "1 lanes" ] + 327 -> 372 [ label = "1 lanes" ] + 372 -> 327 [ label = "1 lanes" ] + 562 -> 473 [ label = "2 lanes" ] + 563 -> 564 [ label = "2 lanes" ] + 564 -> 562 [ label = "2 lanes" ] + 564 -> 281 [ label = "1 lanes" ] + 126 -> 145 [ label = "1 lanes" ] + 565 -> 566 [ label = "2 lanes" ] + 566 -> 565 [ label = "2 lanes" ] + 567 -> 562 [ label = "1 lanes" ] + 562 -> 567 [ label = "1 lanes" ] + 285 -> 568 [ label = "1 lanes" ] + 353 -> 359 [ label = "1 lanes" ] 359 -> 365 [ label = "1 lanes" ] - 365 -> 371 [ label = "1 lanes" ] - 369 -> 581 [ label = "1 lanes" ] - 371 -> 369 [ label = "1 lanes" ] - 187 -> 48 [ label = "3 lanes" ] - 334 -> 238 [ label = "2 lanes" ] - 334 -> 239 [ label = "2 lanes" ] - 54 -> 509 [ label = "3 lanes" ] - 127 -> 110 [ label = "3 lanes" ] - 509 -> 127 [ label = "3 lanes" ] - 48 -> 493 [ label = "2 lanes" ] - 493 -> 48 [ label = "2 lanes" ] - 110 -> 99 [ label = "2 lanes" ] - 582 -> 583 [ label = "1 lanes" ] - 583 -> 582 [ label = "1 lanes" ] - 583 -> 584 [ label = "1 lanes" ] - 584 -> 583 [ label = "1 lanes" ] - 583 -> 585 [ label = "1 lanes" ] - 585 -> 583 [ label = "1 lanes" ] - 162 -> 440 [ label = "3 lanes" ] - 159 -> 236 [ label = "3 lanes" ] - 568 -> 566 [ label = "3 lanes" ] - 566 -> 568 [ label = "3 lanes" ] - 449 -> 129 [ label = "3 lanes" ] - 129 -> 449 [ label = "3 lanes" ] - 566 -> 449 [ label = "3 lanes" ] - 449 -> 566 [ label = "3 lanes" ] + 363 -> 569 [ label = "1 lanes" ] + 365 -> 363 [ label = "1 lanes" ] + 187 -> 57 [ label = "3 lanes" ] + 328 -> 237 [ label = "2 lanes" ] + 328 -> 238 [ label = "2 lanes" ] + 63 -> 498 [ label = "3 lanes" ] + 129 -> 112 [ label = "3 lanes" ] + 498 -> 129 [ label = "3 lanes" ] + 57 -> 484 [ label = "2 lanes" ] + 484 -> 57 [ label = "2 lanes" ] + 112 -> 101 [ label = "2 lanes" ] + 570 -> 571 [ label = "1 lanes" ] + 571 -> 570 [ label = "1 lanes" ] + 571 -> 572 [ label = "1 lanes" ] + 572 -> 571 [ label = "1 lanes" ] + 571 -> 573 [ label = "1 lanes" ] + 573 -> 571 [ label = "1 lanes" ] + 163 -> 432 [ label = "3 lanes" ] + 161 -> 235 [ label = "3 lanes" ] + 556 -> 554 [ label = "3 lanes" ] + 554 -> 556 [ label = "3 lanes" ] + 441 -> 131 [ label = "3 lanes" ] + 131 -> 441 [ label = "3 lanes" ] + 554 -> 441 [ label = "3 lanes" ] + 441 -> 554 [ label = "3 lanes" ] } diff --git a/tests/src/northgate_dual_carriageway/geometry.json b/tests/src/northgate_dual_carriageway/geometry.json index cb6ec48d..c1acacd1 100644 --- a/tests/src/northgate_dual_carriageway/geometry.json +++ b/tests/src/northgate_dual_carriageway/geometry.json @@ -263,7 +263,7 @@ "properties": { "dst_i": 944726788, "osm_way_id": 10738253, - "src_i": -1, + "src_i": -2, "type": "road" }, "type": "Feature" @@ -1429,31 +1429,31 @@ "coordinates": [ [ [ - -122.32875929910438, - 47.70868194514035 + -122.32872921576096, + 47.70868161688792 ], [ - -122.32887872636934, - 47.70868324915682 + -122.32879602858137, + 47.70868234713715 ], [ - -122.32888127363066, - 47.70857756086995 + -122.32879857851559, + 47.708576658850276 ], [ - -122.32876184636571, - 47.708576256853476 + -122.32873176569518, + 47.70857592860105 ], [ - -122.32875929910438, - 47.70868194514035 + -122.32872921576096, + 47.70868161688792 ] ] ], "type": "Polygon" }, "properties": { - "dst_i": 95600097, + "dst_i": -1, "osm_way_id": 130345926, "src_i": 53029362, "type": "road" @@ -3645,12 +3645,36 @@ 47.7101845183567 ], [ - -122.32872655623838, - 47.7104603079483 + -122.32869423568852, + 47.71054235216821 ], [ - -122.32875885273224, - 47.710466069003154 + -122.3284526655054, + 47.71099354996194 + ], + [ + -122.32827319584284, + 47.711270984412955 + ], + [ + -122.32809864562887, + 47.71150080427625 + ], + [ + -122.32812839753429, + 47.711511036758615 + ], + [ + -122.32830340481195, + 47.71128061614842 + ], + [ + -122.32848373514412, + 47.71100185070129 + ], + [ + -122.32872616332398, + 47.710549048517635 ], [ -122.32886750024385, @@ -3677,24 +3701,48 @@ "coordinates": [ [ [ - -122.3288305569359, - 47.71046680734627 + -122.32819282213015, + 47.71152998636628 + ], + [ + -122.32836762626839, + 47.711301487606576 + ], + [ + -122.3285288802059, + 47.71104733029927 + ], + [ + -122.32864581366726, + 47.71084312221885 + ], + [ + -122.32874868373356, + 47.71063878463609 + ], + [ + -122.32871703942413, + 47.710631570277364 ], [ - -122.32886243645939, - 47.7103845571817 + -122.32861438586167, + 47.71083547798435 ], [ - -122.32883010789088, - 47.71037888246173 + -122.32849792015553, + 47.71103886948067 ], [ - -122.32879822836738, - 47.71046113262631 + -122.32833737453309, + 47.71129191162905 ], [ - -122.3288305569359, - 47.71046680734627 + -122.3281631156638, + 47.71151969632732 + ], + [ + -122.32819282213015, + 47.71152998636628 ] ] ], @@ -6771,8 +6819,8 @@ "properties": { "complexity": "MapEdge", "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/-1", - "osm_node_id": -1, + "osm_link": "https://www.openstreetmap.org/node/-2", + "osm_node_id": -2, "type": "intersection" }, "type": "Feature" @@ -6782,16 +6830,49 @@ "coordinates": [ [ [ - -122.32876184502926, - 47.708576256853476 + -122.32891550128541, + 47.70857793678642 + ], + [ + -122.32891295135119, + 47.70868362507329 ], [ - -122.32875929910438, - 47.70868194514035 + -122.32879602858137, + 47.70868234713715 + ], + [ + -122.32879857851559, + 47.708576658850276 + ], + [ + -122.32891550128541, + 47.70857793678642 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-1", + "osm_node_id": -1, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -122.32873176569518, + 47.70857592860105 ], [ - -122.32875207830008, - 47.70868186600004 + -122.32872921576096, + 47.70868161688792 ], [ -122.32875431550653, @@ -6818,8 +6899,8 @@ 47.70855563900405 ], [ - -122.32876184502926, - 47.708576256853476 + -122.32873176569518, + 47.70857592860105 ] ] ], @@ -7137,43 +7218,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -122.32894558329238, - 47.7085782632402 - ], - [ - -122.32894303603105, - 47.70868395152707 - ], - [ - -122.32887872636934, - 47.70868324915682 - ], - [ - -122.32888127363066, - 47.70857756086995 - ], - [ - -122.32894558329238, - 47.7085782632402 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/95600097", - "osm_node_id": 95600097, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ @@ -9257,24 +9301,24 @@ "coordinates": [ [ [ - -122.3287236147262, - 47.71055380952674 + -122.32806757599013, + 47.711591115960594 ], [ - -122.32869218157485, - 47.71054619047325 + -122.32803782408472, + 47.71158088347822 ], [ - -122.32872655623838, - 47.7104603079483 + -122.32809864562887, + 47.71150080427625 ], [ - -122.32875885273224, - 47.710466069003154 + -122.32812839753429, + 47.711511036758615 ], [ - -122.3287236147262, - 47.71055380952674 + -122.32806757599013, + 47.711591115960594 ] ] ], @@ -10477,24 +10521,24 @@ "coordinates": [ [ [ - -122.32886383571574, - 47.71029186139551 + -122.32875992055061, + 47.71054639282064 ], [ - -122.32889616428426, - 47.710297536115476 + -122.32879156486004, + 47.71055360717936 ], [ - -122.32886243645939, - 47.7103845571817 + -122.32874868373356, + 47.71063878463609 ], [ - -122.32883010789088, - 47.71037888246173 + -122.32871703942413, + 47.710631570277364 ], [ - -122.32886383571574, - 47.71029186139551 + -122.32875992055061, + 47.71054639282064 ] ] ], @@ -10514,24 +10558,24 @@ "coordinates": [ [ [ - -122.32879156486004, - 47.71055360717936 + -122.32813165311067, + 47.71160994505915 ], [ - -122.32875992055061, - 47.71054639282064 + -122.32810194664434, + 47.71159965502019 ], [ - -122.32879822836738, - 47.71046113262631 + -122.3281631156638, + 47.71151969632732 ], [ - -122.3288305569359, - 47.71046680734627 + -122.32819282213015, + 47.71152998636628 ], [ - -122.32879156486004, - 47.71055360717936 + -122.32813165311067, + 47.71160994505915 ] ] ], diff --git a/tests/src/northgate_dual_carriageway/road_network.dot b/tests/src/northgate_dual_carriageway/road_network.dot index 18aab150..fcac0330 100644 --- a/tests/src/northgate_dual_carriageway/road_network.dot +++ b/tests/src/northgate_dual_carriageway/road_network.dot @@ -1,13 +1,13 @@ digraph { 0 [ label = "MapEdge" ] - 1 [ label = "Lights RoadIntersection" ] - 2 [ label = "Unknown" ] - 3 [ label = "MapEdge" ] - 4 [ label = "Unknown" ] + 1 [ label = "MapEdge" ] + 2 [ label = "Lights RoadIntersection" ] + 3 [ label = "Unknown" ] + 4 [ label = "MapEdge" ] 5 [ label = "Unknown" ] - 6 [ label = "Lights RoadIntersection" ] - 7 [ label = "Unknown" ] - 8 [ label = "MapEdge" ] + 6 [ label = "Unknown" ] + 7 [ label = "Lights RoadIntersection" ] + 8 [ label = "Unknown" ] 9 [ label = "MapEdge" ] 10 [ label = "Unknown" ] 11 [ label = "Unknown" ] @@ -175,16 +175,16 @@ digraph { 173 [ label = "Unknown" ] 174 [ label = "Unknown" ] 175 [ label = "MapEdge" ] - 6 -> 43 [ label = "1 lanes" ] - 2 -> 81 [ label = "2 lanes" ] - 81 -> 2 [ label = "1 lanes" ] - 7 -> 5 [ label = "2 lanes" ] - 5 -> 7 [ label = "2 lanes" ] - 1 -> 8 [ label = "1 lanes" ] - 7 -> 32 [ label = "2 lanes" ] - 32 -> 7 [ label = "1 lanes" ] - 71 -> 7 [ label = "2 lanes" ] - 7 -> 71 [ label = "1 lanes" ] + 7 -> 43 [ label = "1 lanes" ] + 3 -> 81 [ label = "2 lanes" ] + 81 -> 3 [ label = "1 lanes" ] + 8 -> 6 [ label = "2 lanes" ] + 6 -> 8 [ label = "2 lanes" ] + 2 -> 9 [ label = "1 lanes" ] + 8 -> 32 [ label = "2 lanes" ] + 32 -> 8 [ label = "1 lanes" ] + 71 -> 8 [ label = "2 lanes" ] + 8 -> 71 [ label = "1 lanes" ] 0 -> 34 [ label = "2 lanes" ] 73 -> 72 [ label = "1 lanes" ] 72 -> 73 [ label = "3 lanes" ] @@ -228,10 +228,10 @@ digraph { 68 -> 64 [ label = "1 lanes" ] 68 -> 33 [ label = "1 lanes" ] 33 -> 68 [ label = "1 lanes" ] - 1 -> 9 [ label = "3 lanes" ] - 9 -> 1 [ label = "2 lanes" ] - 10 -> 1 [ label = "5 lanes" ] - 1 -> 10 [ label = "1 lanes" ] + 2 -> 1 [ label = "3 lanes" ] + 1 -> 2 [ label = "2 lanes" ] + 10 -> 2 [ label = "5 lanes" ] + 2 -> 10 [ label = "1 lanes" ] 38 -> 53 [ label = "3 lanes" ] 53 -> 38 [ label = "3 lanes" ] 39 -> 58 [ label = "3 lanes" ] @@ -248,8 +248,8 @@ digraph { 43 -> 154 [ label = "3 lanes" ] 92 -> 40 [ label = "3 lanes" ] 154 -> 41 [ label = "3 lanes" ] - 41 -> 5 [ label = "2 lanes" ] - 5 -> 41 [ label = "2 lanes" ] + 41 -> 6 [ label = "2 lanes" ] + 6 -> 41 [ label = "2 lanes" ] 40 -> 14 [ label = "1 lanes" ] 100 -> 96 [ label = "1 lanes" ] 124 -> 48 [ label = "1 lanes" ] @@ -257,17 +257,17 @@ digraph { 52 -> 51 [ label = "1 lanes" ] 37 -> 59 [ label = "3 lanes" ] 59 -> 37 [ label = "3 lanes" ] - 2 -> 38 [ label = "3 lanes" ] - 75 -> 2 [ label = "3 lanes" ] - 53 -> 3 [ label = "3 lanes" ] - 3 -> 53 [ label = "2 lanes" ] + 3 -> 38 [ label = "3 lanes" ] + 75 -> 3 [ label = "3 lanes" ] + 53 -> 4 [ label = "3 lanes" ] + 4 -> 53 [ label = "2 lanes" ] 79 -> 55 [ label = "1 lanes" ] 55 -> 79 [ label = "2 lanes" ] 44 -> 39 [ label = "3 lanes" ] 59 -> 10 [ label = "4 lanes" ] 10 -> 59 [ label = "2 lanes" ] - 42 -> 1 [ label = "4 lanes" ] - 1 -> 42 [ label = "3 lanes" ] + 42 -> 2 [ label = "4 lanes" ] + 2 -> 42 [ label = "3 lanes" ] 34 -> 10 [ label = "2 lanes" ] 153 -> 92 [ label = "5 lanes" ] 92 -> 74 [ label = "3 lanes" ] @@ -275,10 +275,10 @@ digraph { 25 -> 54 [ label = "3 lanes" ] 38 -> 76 [ label = "3 lanes" ] 61 -> 119 [ label = "5 lanes" ] - 6 -> 14 [ label = "3 lanes" ] + 7 -> 14 [ label = "3 lanes" ] 14 -> 22 [ label = "3 lanes" ] 22 -> 35 [ label = "3 lanes" ] - 42 -> 4 [ label = "3 lanes" ] + 42 -> 5 [ label = "3 lanes" ] 15 -> 92 [ label = "4 lanes" ] 35 -> 15 [ label = "4 lanes" ] 152 -> 12 [ label = "1 lanes" ] @@ -288,10 +288,10 @@ digraph { 67 -> 14 [ label = "1 lanes" ] 14 -> 67 [ label = "1 lanes" ] 13 -> 21 [ label = "2 lanes" ] - 21 -> 6 [ label = "2 lanes" ] - 6 -> 154 [ label = "2 lanes" ] - 1 -> 71 [ label = "2 lanes" ] - 71 -> 1 [ label = "2 lanes" ] + 21 -> 7 [ label = "2 lanes" ] + 7 -> 154 [ label = "2 lanes" ] + 2 -> 71 [ label = "2 lanes" ] + 71 -> 2 [ label = "2 lanes" ] 72 -> 11 [ label = "1 lanes" ] 11 -> 72 [ label = "2 lanes" ] 117 -> 118 [ label = "1 lanes" ] @@ -374,8 +374,8 @@ digraph { 135 -> 131 [ label = "1 lanes" ] 133 -> 132 [ label = "1 lanes" ] 116 -> 134 [ label = "1 lanes" ] - 4 -> 61 [ label = "4 lanes" ] - 119 -> 6 [ label = "4 lanes" ] + 5 -> 61 [ label = "4 lanes" ] + 119 -> 7 [ label = "4 lanes" ] 136 -> 104 [ label = "1 lanes" ] 136 -> 105 [ label = "1 lanes" ] 147 -> 136 [ label = "1 lanes" ] diff --git a/tests/src/perth_peanut_roundabout/geometry.json b/tests/src/perth_peanut_roundabout/geometry.json index 58f5b7a6..d57fad7d 100644 --- a/tests/src/perth_peanut_roundabout/geometry.json +++ b/tests/src/perth_peanut_roundabout/geometry.json @@ -849,33 +849,33 @@ "coordinates": [ [ [ - 115.9021727946214, - -31.97985926636003 + 115.90244610777401, + -31.979636536743808 ], [ - 115.90188208052435, - -31.980112246461186 + 115.90221160852431, + -31.979826661450815 ], [ - 115.90194188540325, - -31.98016169116974 + 115.90226931409356, + -31.979877868829956 ], [ - 115.90223259950031, - -31.979908711068585 + 115.90250381334327, + -31.97968774412295 ], [ - 115.9021727946214, - -31.97985926636003 + 115.90244610777401, + -31.979636536743808 ] ] ], "type": "Polygon" }, "properties": { - "dst_i": 69038027, + "dst_i": 585206961, "osm_way_id": 392774581, - "src_i": 585206961, + "src_i": -2, "type": "road" }, "type": "Feature" @@ -885,33 +885,33 @@ "coordinates": [ [ [ - 115.90244610777401, - -31.979636536743808 + 115.9021727946214, + -31.97985926636003 ], [ - 115.90221160852431, - -31.979826661450815 + 115.90188208052435, + -31.980112246461186 ], [ - 115.90226931409356, - -31.979877868829956 + 115.90194188540325, + -31.98016169116974 ], [ - 115.90250381334327, - -31.97968774412295 + 115.90223259950031, + -31.979908711068585 ], [ - 115.90244610777401, - -31.979636536743808 + 115.9021727946214, + -31.97985926636003 ] ] ], "type": "Polygon" }, "properties": { - "dst_i": 585206961, + "dst_i": 69038027, "osm_way_id": 392774581, - "src_i": 3959658626, + "src_i": 585206961, "type": "road" }, "type": "Feature" @@ -1644,6 +1644,43 @@ }, "type": "Feature" }, + { + "geometry": { + "coordinates": [ + [ + [ + 115.90252275166095, + -31.97957439631043 + ], + [ + 115.90258045723021, + -31.979625603689573 + ], + [ + 115.90250381334327, + -31.97968774412295 + ], + [ + 115.90244610777401, + -31.979636536743808 + ], + [ + 115.90252275166095, + -31.97957439631043 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-2", + "osm_node_id": -2, + "type": "intersection" + }, + "type": "Feature" + }, { "geometry": { "coordinates": [ @@ -2574,43 +2611,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - 115.90252275166095, - -31.97957439631043 - ], - [ - 115.90258045723021, - -31.979625603689573 - ], - [ - 115.90250381334327, - -31.97968774412295 - ], - [ - 115.90244610777401, - -31.979636536743808 - ], - [ - 115.90252275166095, - -31.97957439631043 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/3959658626", - "osm_node_id": 3959658626, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ diff --git a/tests/src/perth_peanut_roundabout/road_network.dot b/tests/src/perth_peanut_roundabout/road_network.dot index 6ca6cf0c..f1f7191e 100644 --- a/tests/src/perth_peanut_roundabout/road_network.dot +++ b/tests/src/perth_peanut_roundabout/road_network.dot @@ -1,17 +1,17 @@ digraph { 0 [ label = "MapEdge" ] 1 [ label = "MapEdge" ] - 2 [ label = "Unknown" ] - 3 [ label = "MapEdge" ] - 4 [ label = "Unknown" ] + 2 [ label = "MapEdge" ] + 3 [ label = "Unknown" ] + 4 [ label = "MapEdge" ] 5 [ label = "Unknown" ] - 6 [ label = "MapEdge" ] - 7 [ label = "Unknown" ] - 8 [ label = "MapEdge" ] + 6 [ label = "Unknown" ] + 7 [ label = "MapEdge" ] + 8 [ label = "Unknown" ] 9 [ label = "MapEdge" ] - 10 [ label = "Unknown" ] - 11 [ label = "MapEdge" ] - 12 [ label = "Unknown" ] + 10 [ label = "MapEdge" ] + 11 [ label = "Unknown" ] + 12 [ label = "MapEdge" ] 13 [ label = "Unknown" ] 14 [ label = "Unknown" ] 15 [ label = "Unknown" ] @@ -24,85 +24,82 @@ digraph { 22 [ label = "MapEdge" ] 23 [ label = "Unknown" ] 24 [ label = "Unknown" ] - 25 [ label = "MapEdge" ] + 25 [ label = "Unknown" ] 26 [ label = "Unknown" ] 27 [ label = "Unknown" ] 28 [ label = "Unknown" ] 29 [ label = "Unknown" ] - 30 [ label = "Unknown" ] - 31 [ label = "Unknown" ] + 30 [ label = "MapEdge" ] + 31 [ label = "MapEdge" ] 32 [ label = "Unknown" ] - 33 [ label = "MapEdge" ] - 34 [ label = "MapEdge" ] - 35 [ label = "Unknown" ] + 33 [ label = "Unknown" ] + 34 [ label = "Lights RoadIntersection" ] + 35 [ label = "MapEdge" ] 36 [ label = "Unknown" ] - 37 [ label = "Lights RoadIntersection" ] - 38 [ label = "MapEdge" ] - 39 [ label = "Unknown" ] - 40 [ label = "MapEdge" ] - 14 -> 2 [ label = "4 lanes" ] - 0 -> 39 [ label = "2 lanes" ] - 39 -> 0 [ label = "2 lanes" ] - 39 -> 6 [ label = "2 lanes" ] - 6 -> 39 [ label = "2 lanes" ] - 5 -> 3 [ label = "2 lanes" ] - 3 -> 5 [ label = "2 lanes" ] - 4 -> 9 [ label = "2 lanes" ] - 9 -> 4 [ label = "2 lanes" ] - 8 -> 10 [ label = "2 lanes" ] - 10 -> 8 [ label = "2 lanes" ] - 10 -> 17 [ label = "2 lanes" ] - 17 -> 10 [ label = "2 lanes" ] - 5 -> 12 [ label = "2 lanes" ] - 12 -> 5 [ label = "2 lanes" ] - 12 -> 32 [ label = "2 lanes" ] - 32 -> 12 [ label = "2 lanes" ] - 4 -> 5 [ label = "2 lanes" ] - 5 -> 4 [ label = "2 lanes" ] - 12 -> 1 [ label = "1 lanes" ] - 1 -> 12 [ label = "1 lanes" ] - 37 -> 38 [ label = "2 lanes" ] - 38 -> 37 [ label = "2 lanes" ] - 2 -> 20 [ label = "1 lanes" ] - 15 -> 35 [ label = "1 lanes" ] - 16 -> 2 [ label = "1 lanes" ] - 18 -> 36 [ label = "1 lanes" ] + 37 [ label = "MapEdge" ] + 14 -> 3 [ label = "4 lanes" ] + 1 -> 36 [ label = "2 lanes" ] + 36 -> 1 [ label = "2 lanes" ] + 36 -> 7 [ label = "2 lanes" ] + 7 -> 36 [ label = "2 lanes" ] + 6 -> 4 [ label = "2 lanes" ] + 4 -> 6 [ label = "2 lanes" ] + 5 -> 10 [ label = "2 lanes" ] + 10 -> 5 [ label = "2 lanes" ] + 9 -> 11 [ label = "2 lanes" ] + 11 -> 9 [ label = "2 lanes" ] + 11 -> 17 [ label = "2 lanes" ] + 17 -> 11 [ label = "2 lanes" ] + 6 -> 13 [ label = "2 lanes" ] + 13 -> 6 [ label = "2 lanes" ] + 13 -> 29 [ label = "2 lanes" ] + 29 -> 13 [ label = "2 lanes" ] + 5 -> 6 [ label = "2 lanes" ] + 6 -> 5 [ label = "2 lanes" ] + 13 -> 2 [ label = "1 lanes" ] + 2 -> 13 [ label = "1 lanes" ] + 34 -> 35 [ label = "2 lanes" ] + 35 -> 34 [ label = "2 lanes" ] + 3 -> 20 [ label = "1 lanes" ] + 15 -> 32 [ label = "1 lanes" ] + 16 -> 3 [ label = "1 lanes" ] + 18 -> 33 [ label = "1 lanes" ] 19 -> 15 [ label = "1 lanes" ] 20 -> 18 [ label = "1 lanes" ] - 35 -> 16 [ label = "1 lanes" ] - 36 -> 19 [ label = "1 lanes" ] - 27 -> 22 [ label = "3 lanes" ] - 22 -> 27 [ label = "3 lanes" ] - 21 -> 4 [ label = "2 lanes" ] - 4 -> 21 [ label = "2 lanes" ] - 25 -> 21 [ label = "2 lanes" ] - 21 -> 25 [ label = "2 lanes" ] - 27 -> 26 [ label = "1 lanes" ] - 26 -> 27 [ label = "1 lanes" ] - 29 -> 28 [ label = "1 lanes" ] - 28 -> 29 [ label = "1 lanes" ] - 11 -> 29 [ label = "1 lanes" ] - 29 -> 11 [ label = "1 lanes" ] - 29 -> 21 [ label = "1 lanes" ] - 21 -> 29 [ label = "1 lanes" ] - 31 -> 10 [ label = "2 lanes" ] - 10 -> 31 [ label = "2 lanes" ] - 30 -> 27 [ label = "3 lanes" ] - 27 -> 30 [ label = "3 lanes" ] - 7 -> 31 [ label = "2 lanes" ] - 31 -> 7 [ label = "2 lanes" ] - 33 -> 7 [ label = "2 lanes" ] - 7 -> 33 [ label = "2 lanes" ] - 34 -> 7 [ label = "2 lanes" ] - 7 -> 34 [ label = "2 lanes" ] - 16 -> 30 [ label = "4 lanes" ] - 32 -> 19 [ label = "2 lanes" ] + 32 -> 16 [ label = "1 lanes" ] + 33 -> 19 [ label = "1 lanes" ] + 24 -> 22 [ label = "3 lanes" ] + 22 -> 24 [ label = "3 lanes" ] + 0 -> 21 [ label = "2 lanes" ] + 21 -> 0 [ label = "2 lanes" ] + 21 -> 5 [ label = "2 lanes" ] + 5 -> 21 [ label = "2 lanes" ] + 24 -> 23 [ label = "1 lanes" ] + 23 -> 24 [ label = "1 lanes" ] + 26 -> 25 [ label = "1 lanes" ] + 25 -> 26 [ label = "1 lanes" ] + 12 -> 26 [ label = "1 lanes" ] + 26 -> 12 [ label = "1 lanes" ] + 26 -> 21 [ label = "1 lanes" ] + 21 -> 26 [ label = "1 lanes" ] + 28 -> 11 [ label = "2 lanes" ] + 11 -> 28 [ label = "2 lanes" ] + 27 -> 24 [ label = "3 lanes" ] + 24 -> 27 [ label = "3 lanes" ] + 8 -> 28 [ label = "2 lanes" ] + 28 -> 8 [ label = "2 lanes" ] + 30 -> 8 [ label = "2 lanes" ] + 8 -> 30 [ label = "2 lanes" ] + 31 -> 8 [ label = "2 lanes" ] + 8 -> 31 [ label = "2 lanes" ] + 16 -> 27 [ label = "4 lanes" ] + 29 -> 19 [ label = "2 lanes" ] 17 -> 18 [ label = "2 lanes" ] - 37 -> 35 [ label = "3 lanes" ] - 15 -> 37 [ label = "3 lanes" ] - 36 -> 32 [ label = "2 lanes" ] + 34 -> 32 [ label = "3 lanes" ] + 15 -> 34 [ label = "3 lanes" ] + 33 -> 29 [ label = "2 lanes" ] 20 -> 17 [ label = "2 lanes" ] - 40 -> 39 [ label = "1 lanes" ] - 39 -> 40 [ label = "1 lanes" ] - 30 -> 14 [ label = "4 lanes" ] + 37 -> 36 [ label = "1 lanes" ] + 36 -> 37 [ label = "1 lanes" ] + 27 -> 14 [ label = "4 lanes" ] } diff --git a/tests/src/roosevelt_cycletrack/road_network.dot b/tests/src/roosevelt_cycletrack/road_network.dot index 7043153d..8c980048 100644 --- a/tests/src/roosevelt_cycletrack/road_network.dot +++ b/tests/src/roosevelt_cycletrack/road_network.dot @@ -90,8 +90,8 @@ digraph { 88 [ label = "Unknown" ] 89 [ label = "Unknown" ] 90 [ label = "Unknown" ] - 91 [ label = "Unknown" ] - 92 [ label = "MapEdge" ] + 91 [ label = "MapEdge" ] + 92 [ label = "Unknown" ] 93 [ label = "Unknown" ] 94 [ label = "Unknown" ] 95 [ label = "Unknown" ] @@ -99,9 +99,8 @@ digraph { 97 [ label = "Unknown" ] 98 [ label = "Unknown" ] 99 [ label = "Unknown" ] - 100 [ label = "Unknown" ] - 0 -> 95 [ label = "2 lanes" ] - 95 -> 0 [ label = "1 lanes" ] + 0 -> 94 [ label = "2 lanes" ] + 94 -> 0 [ label = "1 lanes" ] 5 -> 43 [ label = "2 lanes" ] 43 -> 5 [ label = "2 lanes" ] 43 -> 6 [ label = "2 lanes" ] @@ -112,16 +111,16 @@ digraph { 14 -> 42 [ label = "2 lanes" ] 41 -> 19 [ label = "2 lanes" ] 19 -> 41 [ label = "2 lanes" ] - 89 -> 41 [ label = "2 lanes" ] - 41 -> 89 [ label = "2 lanes" ] - 18 -> 93 [ label = "2 lanes" ] - 93 -> 18 [ label = "2 lanes" ] + 88 -> 41 [ label = "2 lanes" ] + 41 -> 88 [ label = "2 lanes" ] + 18 -> 92 [ label = "2 lanes" ] + 92 -> 18 [ label = "2 lanes" ] 2 -> 31 [ label = "2 lanes" ] 31 -> 2 [ label = "2 lanes" ] - 31 -> 96 [ label = "2 lanes" ] - 96 -> 31 [ label = "2 lanes" ] - 17 -> 92 [ label = "2 lanes" ] - 92 -> 17 [ label = "2 lanes" ] + 31 -> 95 [ label = "2 lanes" ] + 95 -> 31 [ label = "2 lanes" ] + 17 -> 91 [ label = "2 lanes" ] + 91 -> 17 [ label = "2 lanes" ] 20 -> 45 [ label = "2 lanes" ] 45 -> 20 [ label = "2 lanes" ] 21 -> 20 [ label = "2 lanes" ] @@ -138,24 +137,24 @@ digraph { 20 -> 7 [ label = "2 lanes" ] 10 -> 7 [ label = "2 lanes" ] 7 -> 10 [ label = "2 lanes" ] - 95 -> 10 [ label = "2 lanes" ] - 10 -> 95 [ label = "2 lanes" ] + 94 -> 10 [ label = "2 lanes" ] + 10 -> 94 [ label = "2 lanes" ] 7 -> 46 [ label = "2 lanes" ] 46 -> 7 [ label = "2 lanes" ] 46 -> 8 [ label = "2 lanes" ] 8 -> 46 [ label = "2 lanes" ] - 91 -> 7 [ label = "2 lanes" ] - 7 -> 91 [ label = "2 lanes" ] + 90 -> 7 [ label = "2 lanes" ] + 7 -> 90 [ label = "2 lanes" ] 44 -> 24 [ label = "2 lanes" ] 24 -> 44 [ label = "2 lanes" ] - 90 -> 44 [ label = "2 lanes" ] - 44 -> 90 [ label = "2 lanes" ] - 77 -> 60 [ label = "1 lanes" ] - 71 -> 77 [ label = "1 lanes" ] - 27 -> 99 [ label = "3 lanes" ] - 99 -> 27 [ label = "4 lanes" ] - 99 -> 26 [ label = "3 lanes" ] - 26 -> 99 [ label = "4 lanes" ] + 89 -> 44 [ label = "2 lanes" ] + 44 -> 89 [ label = "2 lanes" ] + 76 -> 60 [ label = "1 lanes" ] + 70 -> 76 [ label = "1 lanes" ] + 27 -> 98 [ label = "3 lanes" ] + 98 -> 27 [ label = "4 lanes" ] + 98 -> 26 [ label = "3 lanes" ] + 26 -> 98 [ label = "4 lanes" ] 10 -> 47 [ label = "3 lanes" ] 47 -> 10 [ label = "3 lanes" ] 34 -> 10 [ label = "3 lanes" ] @@ -163,10 +162,10 @@ digraph { 47 -> 11 [ label = "3 lanes" ] 11 -> 47 [ label = "3 lanes" ] 49 -> 9 [ label = "3 lanes" ] - 74 -> 36 [ label = "1 lanes" ] - 37 -> 73 [ label = "1 lanes" ] - 73 -> 74 [ label = "1 lanes" ] - 70 -> 37 [ label = "1 lanes" ] + 73 -> 36 [ label = "1 lanes" ] + 37 -> 72 [ label = "1 lanes" ] + 72 -> 73 [ label = "1 lanes" ] + 69 -> 37 [ label = "1 lanes" ] 6 -> 18 [ label = "3 lanes" ] 14 -> 6 [ label = "3 lanes" ] 17 -> 8 [ label = "3 lanes" ] @@ -175,28 +174,28 @@ digraph { 24 -> 17 [ label = "3 lanes" ] 25 -> 19 [ label = "3 lanes" ] 39 -> 25 [ label = "3 lanes" ] - 4 -> 78 [ label = "3 lanes" ] + 4 -> 77 [ label = "3 lanes" ] 8 -> 4 [ label = "3 lanes" ] - 78 -> 32 [ label = "3 lanes" ] + 77 -> 32 [ label = "3 lanes" ] 40 -> 23 [ label = "4 lanes" ] 23 -> 3 [ label = "4 lanes" ] 32 -> 11 [ label = "4 lanes" ] - 11 -> 82 [ label = "3 lanes" ] + 11 -> 81 [ label = "3 lanes" ] 15 -> 64 [ label = "3 lanes" ] 62 -> 15 [ label = "3 lanes" ] 64 -> 65 [ label = "3 lanes" ] 65 -> 40 [ label = "3 lanes" ] - 82 -> 62 [ label = "3 lanes" ] - 84 -> 30 [ label = "1 lanes" ] - 52 -> 84 [ label = "1 lanes" ] - 23 -> 68 [ label = "2 lanes" ] - 68 -> 50 [ label = "2 lanes" ] + 81 -> 62 [ label = "3 lanes" ] + 83 -> 30 [ label = "1 lanes" ] + 52 -> 83 [ label = "1 lanes" ] + 23 -> 67 [ label = "2 lanes" ] + 67 -> 50 [ label = "2 lanes" ] 56 -> 53 [ label = "1 lanes" ] 54 -> 55 [ label = "1 lanes" ] 58 -> 57 [ label = "1 lanes" ] 59 -> 51 [ label = "1 lanes" ] - 78 -> 61 [ label = "1 lanes" ] - 61 -> 78 [ label = "1 lanes" ] + 77 -> 61 [ label = "1 lanes" ] + 61 -> 77 [ label = "1 lanes" ] 63 -> 62 [ label = "1 lanes" ] 62 -> 63 [ label = "1 lanes" ] 65 -> 64 [ label = "1 lanes" ] @@ -205,69 +204,69 @@ digraph { 63 -> 15 [ label = "2 lanes" ] 63 -> 16 [ label = "2 lanes" ] 16 -> 63 [ label = "2 lanes" ] - 4 -> 94 [ label = "2 lanes" ] - 94 -> 4 [ label = "2 lanes" ] + 4 -> 93 [ label = "2 lanes" ] + 93 -> 4 [ label = "2 lanes" ] 12 -> 11 [ label = "3 lanes" ] 11 -> 12 [ label = "3 lanes" ] 3 -> 27 [ label = "3 lanes" ] 27 -> 3 [ label = "4 lanes" ] - 72 -> 70 [ label = "1 lanes" ] - 38 -> 72 [ label = "1 lanes" ] - 33 -> 71 [ label = "1 lanes" ] - 72 -> 73 [ label = "1 lanes" ] - 75 -> 76 [ label = "1 lanes" ] - 76 -> 74 [ label = "1 lanes" ] - 77 -> 76 [ label = "1 lanes" ] + 71 -> 69 [ label = "1 lanes" ] + 38 -> 71 [ label = "1 lanes" ] + 33 -> 70 [ label = "1 lanes" ] + 71 -> 72 [ label = "1 lanes" ] + 74 -> 75 [ label = "1 lanes" ] + 75 -> 73 [ label = "1 lanes" ] + 76 -> 75 [ label = "1 lanes" ] 48 -> 50 [ label = "3 lanes" ] 50 -> 48 [ label = "3 lanes" ] - 80 -> 79 [ label = "1 lanes" ] + 79 -> 78 [ label = "1 lanes" ] 1 -> 2 [ label = "3 lanes" ] 2 -> 1 [ label = "4 lanes" ] - 2 -> 85 [ label = "3 lanes" ] - 85 -> 2 [ label = "4 lanes" ] - 85 -> 48 [ label = "3 lanes" ] - 48 -> 85 [ label = "4 lanes" ] + 2 -> 84 [ label = "3 lanes" ] + 84 -> 2 [ label = "4 lanes" ] + 84 -> 48 [ label = "3 lanes" ] + 48 -> 84 [ label = "4 lanes" ] 42 -> 41 [ label = "1 lanes" ] 43 -> 42 [ label = "1 lanes" ] 44 -> 43 [ label = "1 lanes" ] 45 -> 44 [ label = "1 lanes" ] 46 -> 45 [ label = "1 lanes" ] 61 -> 46 [ label = "1 lanes" ] - 67 -> 47 [ label = "1 lanes" ] + 66 -> 47 [ label = "1 lanes" ] 47 -> 61 [ label = "1 lanes" ] + 67 -> 66 [ label = "1 lanes" ] 68 -> 67 [ label = "1 lanes" ] - 69 -> 68 [ label = "1 lanes" ] - 88 -> 69 [ label = "1 lanes" ] - 41 -> 81 [ label = "1 lanes" ] - 98 -> 88 [ label = "1 lanes" ] - 50 -> 69 [ label = "3 lanes" ] - 69 -> 50 [ label = "3 lanes" ] - 69 -> 3 [ label = "3 lanes" ] - 3 -> 69 [ label = "3 lanes" ] + 87 -> 68 [ label = "1 lanes" ] + 41 -> 80 [ label = "1 lanes" ] + 97 -> 87 [ label = "1 lanes" ] + 50 -> 68 [ label = "3 lanes" ] + 68 -> 50 [ label = "3 lanes" ] + 68 -> 3 [ label = "3 lanes" ] + 3 -> 68 [ label = "3 lanes" ] 3 -> 49 [ label = "3 lanes" ] - 82 -> 83 [ label = "1 lanes" ] - 83 -> 82 [ label = "1 lanes" ] - 29 -> 84 [ label = "1 lanes" ] + 81 -> 82 [ label = "1 lanes" ] + 82 -> 81 [ label = "1 lanes" ] + 29 -> 83 [ label = "1 lanes" ] + 84 -> 85 [ label = "1 lanes" ] + 85 -> 84 [ label = "1 lanes" ] 85 -> 86 [ label = "1 lanes" ] 86 -> 85 [ label = "1 lanes" ] 86 -> 87 [ label = "1 lanes" ] 87 -> 86 [ label = "1 lanes" ] - 87 -> 88 [ label = "1 lanes" ] - 88 -> 87 [ label = "1 lanes" ] - 88 -> 49 [ label = "1 lanes" ] - 49 -> 88 [ label = "1 lanes" ] - 86 -> 87 [ label = "1 lanes" ] - 87 -> 86 [ label = "1 lanes" ] - 86 -> 87 [ label = "1 lanes" ] - 87 -> 86 [ label = "1 lanes" ] - 67 -> 15 [ label = "2 lanes" ] - 15 -> 67 [ label = "2 lanes" ] - 96 -> 67 [ label = "2 lanes" ] - 67 -> 96 [ label = "2 lanes" ] + 87 -> 49 [ label = "1 lanes" ] + 49 -> 87 [ label = "1 lanes" ] + 85 -> 86 [ label = "1 lanes" ] + 86 -> 85 [ label = "1 lanes" ] + 85 -> 86 [ label = "1 lanes" ] + 86 -> 85 [ label = "1 lanes" ] + 66 -> 15 [ label = "2 lanes" ] + 15 -> 66 [ label = "2 lanes" ] + 95 -> 66 [ label = "2 lanes" ] + 66 -> 95 [ label = "2 lanes" ] + 95 -> 94 [ label = "2 lanes" ] + 94 -> 95 [ label = "2 lanes" ] 96 -> 95 [ label = "2 lanes" ] 95 -> 96 [ label = "2 lanes" ] - 97 -> 96 [ label = "2 lanes" ] - 96 -> 97 [ label = "2 lanes" ] - 99 -> 100 [ label = "1 lanes" ] - 100 -> 99 [ label = "1 lanes" ] + 98 -> 99 [ label = "1 lanes" ] + 99 -> 98 [ label = "1 lanes" ] } diff --git a/tests/src/seattle_triangle/geometry.json b/tests/src/seattle_triangle/geometry.json index 83cb9440..635e56fd 100644 --- a/tests/src/seattle_triangle/geometry.json +++ b/tests/src/seattle_triangle/geometry.json @@ -767,7 +767,7 @@ "properties": { "dst_i": 8780140709, "osm_way_id": 948577962, - "src_i": 53148299, + "src_i": -2, "type": "road" }, "type": "Feature" @@ -940,6 +940,43 @@ }, "type": "Feature" }, + { + "geometry": { + "coordinates": [ + [ + [ + -122.33694701896012, + 47.61601016413487 + ], + [ + -122.33696894913622, + 47.61599322450963 + ], + [ + -122.3370694706704, + 47.616052353118704 + ], + [ + -122.3370475404943, + 47.616069292743944 + ], + [ + -122.33694701896012, + 47.61601016413487 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-2", + "osm_node_id": -2, + "type": "intersection" + }, + "type": "Feature" + }, { "geometry": { "coordinates": [ @@ -1088,43 +1125,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -122.33694701896012, - 47.61601016413487 - ], - [ - -122.33696894913622, - 47.61599322450963 - ], - [ - -122.3370694706704, - 47.616052353118704 - ], - [ - -122.3370475404943, - 47.616069292743944 - ], - [ - -122.33694701896012, - 47.61601016413487 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/53148299", - "osm_node_id": 53148299, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ diff --git a/tests/src/seattle_triangle/road_network.dot b/tests/src/seattle_triangle/road_network.dot index 6e3a1d74..dc09f4f2 100644 --- a/tests/src/seattle_triangle/road_network.dot +++ b/tests/src/seattle_triangle/road_network.dot @@ -3,13 +3,13 @@ digraph { 1 [ label = "MapEdge" ] 2 [ label = "MapEdge" ] 3 [ label = "MapEdge" ] - 4 [ label = "Lights RoadIntersection" ] + 4 [ label = "MapEdge" ] 5 [ label = "MapEdge" ] - 6 [ label = "MapEdge" ] + 6 [ label = "Lights RoadIntersection" ] 7 [ label = "Lights RoadIntersection" ] 8 [ label = "Lights RoadIntersection" ] - 9 [ label = "Lights RoadIntersection" ] - 10 [ label = "MapEdge" ] + 9 [ label = "MapEdge" ] + 10 [ label = "Unknown" ] 11 [ label = "Unknown" ] 12 [ label = "Unknown" ] 13 [ label = "Unknown" ] @@ -32,41 +32,40 @@ digraph { 30 [ label = "Unknown" ] 31 [ label = "Unknown" ] 32 [ label = "Unknown" ] - 33 [ label = "Unknown" ] - 10 -> 9 [ label = "3 lanes" ] - 9 -> 10 [ label = "3 lanes" ] - 7 -> 9 [ label = "1 lanes" ] - 9 -> 7 [ label = "2 lanes" ] - 9 -> 8 [ label = "2 lanes" ] + 9 -> 8 [ label = "3 lanes" ] 8 -> 9 [ label = "3 lanes" ] - 8 -> 32 [ label = "3 lanes" ] - 32 -> 8 [ label = "3 lanes" ] - 32 -> 2 [ label = "3 lanes" ] - 2 -> 32 [ label = "3 lanes" ] + 6 -> 8 [ label = "1 lanes" ] + 8 -> 6 [ label = "2 lanes" ] + 8 -> 7 [ label = "2 lanes" ] 7 -> 8 [ label = "3 lanes" ] - 31 -> 3 [ label = "4 lanes" ] - 3 -> 31 [ label = "1 lanes" ] - 0 -> 7 [ label = "4 lanes" ] - 7 -> 0 [ label = "2 lanes" ] - 1 -> 33 [ label = "2 lanes" ] - 33 -> 1 [ label = "2 lanes" ] - 33 -> 7 [ label = "2 lanes" ] - 7 -> 33 [ label = "2 lanes" ] - 13 -> 14 [ label = "1 lanes" ] - 15 -> 16 [ label = "1 lanes" ] - 18 -> 19 [ label = "1 lanes" ] - 20 -> 21 [ label = "1 lanes" ] - 22 -> 23 [ label = "1 lanes" ] - 24 -> 12 [ label = "1 lanes" ] - 25 -> 26 [ label = "1 lanes" ] - 27 -> 28 [ label = "1 lanes" ] - 29 -> 11 [ label = "1 lanes" ] - 17 -> 30 [ label = "1 lanes" ] - 33 -> 5 [ label = "1 lanes" ] + 7 -> 31 [ label = "3 lanes" ] + 31 -> 7 [ label = "3 lanes" ] + 31 -> 3 [ label = "3 lanes" ] + 3 -> 31 [ label = "3 lanes" ] + 6 -> 7 [ label = "3 lanes" ] + 30 -> 4 [ label = "4 lanes" ] + 4 -> 30 [ label = "1 lanes" ] + 1 -> 6 [ label = "4 lanes" ] + 6 -> 1 [ label = "2 lanes" ] + 2 -> 32 [ label = "2 lanes" ] + 32 -> 2 [ label = "2 lanes" ] + 32 -> 6 [ label = "2 lanes" ] + 6 -> 32 [ label = "2 lanes" ] + 12 -> 13 [ label = "1 lanes" ] + 14 -> 15 [ label = "1 lanes" ] + 17 -> 18 [ label = "1 lanes" ] + 19 -> 20 [ label = "1 lanes" ] + 21 -> 22 [ label = "1 lanes" ] + 23 -> 11 [ label = "1 lanes" ] + 24 -> 25 [ label = "1 lanes" ] + 26 -> 27 [ label = "1 lanes" ] + 28 -> 10 [ label = "1 lanes" ] + 16 -> 29 [ label = "1 lanes" ] + 32 -> 0 [ label = "1 lanes" ] + 30 -> 31 [ label = "1 lanes" ] 31 -> 32 [ label = "1 lanes" ] - 32 -> 33 [ label = "1 lanes" ] - 9 -> 6 [ label = "3 lanes" ] - 6 -> 9 [ label = "1 lanes" ] - 8 -> 31 [ label = "3 lanes" ] - 31 -> 8 [ label = "1 lanes" ] + 8 -> 5 [ label = "3 lanes" ] + 5 -> 8 [ label = "1 lanes" ] + 7 -> 30 [ label = "3 lanes" ] + 30 -> 7 [ label = "1 lanes" ] } diff --git a/tests/src/service_road_loop/geometry.json b/tests/src/service_road_loop/geometry.json index d12cb677..af52b394 100644 --- a/tests/src/service_road_loop/geometry.json +++ b/tests/src/service_road_loop/geometry.json @@ -589,31 +589,31 @@ "coordinates": [ [ [ - -2.5660805073917192, - 51.460286995830174 + -2.5662118987886853, + 51.46024976662164 ], [ - -2.566012530397134, - 51.46030625659688 + -2.5661439217941, + 51.46026902738834 ], [ - -2.5660244817617195, - 51.46032262964252 + -2.5661558731586855, + 51.46028540043399 ], [ - -2.566092458756305, - 51.46030336887582 + -2.5662238501532713, + 51.46026613966728 ], [ - -2.5660805073917192, - 51.460286995830174 + -2.5662118987886853, + 51.46024976662164 ] ] ], "type": "Polygon" }, "properties": { - "dst_i": 6036958604, + "dst_i": -4, "osm_way_id": 640910749, "src_i": 6036958542, "type": "road" @@ -863,7 +863,7 @@ "properties": { "dst_i": 6036958634, "osm_way_id": 640910767, - "src_i": -1, + "src_i": -3, "type": "road" }, "type": "Feature" @@ -897,7 +897,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 6036958484, + "dst_i": -1, "osm_way_id": 640910767, "src_i": 6036958615, "type": "road" @@ -1140,6 +1140,80 @@ }, "type": "Feature" }, + { + "geometry": { + "coordinates": [ + [ + [ + -2.5660244817617195, + 51.46032262964252 + ], + [ + -2.566012530397134, + 51.46030625659688 + ], + [ + -2.5661439217941, + 51.46026902738834 + ], + [ + -2.5661558731586855, + 51.46028540043399 + ], + [ + -2.5660244817617195, + 51.46032262964252 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-4", + "osm_node_id": -4, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -2.566740273235908, + 51.460268207207214 + ], + [ + -2.5667916496696113, + 51.46025179279278 + ], + [ + -2.5668575106375684, + 51.46033181711008 + ], + [ + -2.566806134203865, + 51.460348231524506 + ], + [ + -2.566740273235908, + 51.460268207207214 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-3", + "osm_node_id": -3, + "type": "intersection" + }, + "type": "Feature" + }, { "geometry": { "coordinates": [ @@ -1182,24 +1256,24 @@ "coordinates": [ [ [ - -2.566740273235908, - 51.460268207207214 + -2.5660315140139254, + 51.46101940768555 ], [ - -2.5667916496696113, - 51.46025179279278 + -2.5660084859860746, + 51.46098642057612 ], [ - -2.5668575106375684, - 51.46033181711008 + -2.566140848792264, + 51.46095055114156 ], [ - -2.566806134203865, - 51.460348231524506 + -2.5661638768201143, + 51.460983538250986 ], [ - -2.566740273235908, - 51.460268207207214 + -2.5660315140139254, + 51.46101940768555 ] ] ], @@ -1682,61 +1756,24 @@ "coordinates": [ [ [ - -2.5660315140139254, - 51.46101940768555 - ], - [ - -2.5660084859860746, - 51.46098642057612 - ], - [ - -2.566140848792264, - 51.46095055114156 + -2.5663245851453533, + 51.46021783801351 ], [ - -2.5661638768201143, - 51.460983538250986 - ], - [ - -2.5660315140139254, - 51.46101940768555 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/6036958484", - "osm_node_id": 6036958484, - "type": "intersection" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - [ - [ - -2.5662118987886853, - 51.46024976662164 + -2.5663365365099393, + 51.46023421105916 ], [ -2.5662238501532713, 51.46026613966728 ], - [ - -2.566092458756305, - 51.46030336887582 - ], - [ - -2.5660805073917192, - 51.460286995830174 - ], [ -2.5662118987886853, 51.46024976662164 + ], + [ + -2.5663245851453533, + 51.46021783801351 ] ] ], @@ -1906,43 +1943,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -2.5659117954050514, - 51.46035455825065 - ], - [ - -2.565899844040466, - 51.460338185205 - ], - [ - -2.566012530397134, - 51.46030625659688 - ], - [ - -2.5660244817617195, - 51.46032262964252 - ], - [ - -2.5659117954050514, - 51.46035455825065 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/6036958604", - "osm_node_id": 6036958604, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ diff --git a/tests/src/service_road_loop/road_network.dot b/tests/src/service_road_loop/road_network.dot index 081c875b..a4192fe0 100644 --- a/tests/src/service_road_loop/road_network.dot +++ b/tests/src/service_road_loop/road_network.dot @@ -2,22 +2,22 @@ digraph { 0 [ label = "MapEdge" ] 1 [ label = "MapEdge" ] 2 [ label = "MapEdge" ] - 3 [ label = "Unknown" ] + 3 [ label = "MapEdge" ] 4 [ label = "MapEdge" ] - 5 [ label = "MapEdge" ] + 5 [ label = "Unknown" ] 6 [ label = "MapEdge" ] - 7 [ label = "Unknown" ] - 8 [ label = "Unknown" ] + 7 [ label = "MapEdge" ] + 8 [ label = "MapEdge" ] 9 [ label = "Unknown" ] - 10 [ label = "MapEdge" ] + 10 [ label = "Unknown" ] 11 [ label = "Unknown" ] - 12 [ label = "Unknown" ] - 13 [ label = "MapEdge" ] - 14 [ label = "MapEdge" ] - 15 [ label = "Unknown" ] + 12 [ label = "MapEdge" ] + 13 [ label = "Unknown" ] + 14 [ label = "Unknown" ] + 15 [ label = "MapEdge" ] 16 [ label = "Unknown" ] 17 [ label = "Unknown" ] - 18 [ label = "MapEdge" ] + 18 [ label = "Unknown" ] 19 [ label = "Unknown" ] 20 [ label = "Unknown" ] 21 [ label = "Unknown" ] @@ -26,39 +26,39 @@ digraph { 24 [ label = "Unknown" ] 25 [ label = "Unknown" ] 26 [ label = "MapEdge" ] - 3 -> 11 [ label = "2 lanes" ] - 11 -> 3 [ label = "2 lanes" ] - 4 -> 25 [ label = "2 lanes" ] - 25 -> 4 [ label = "2 lanes" ] - 8 -> 2 [ label = "2 lanes" ] - 2 -> 8 [ label = "2 lanes" ] - 11 -> 8 [ label = "2 lanes" ] - 8 -> 11 [ label = "2 lanes" ] - 15 -> 3 [ label = "2 lanes" ] - 3 -> 15 [ label = "2 lanes" ] - 25 -> 15 [ label = "2 lanes" ] - 15 -> 25 [ label = "2 lanes" ] - 6 -> 9 [ label = "1 lanes" ] - 7 -> 5 [ label = "1 lanes" ] + 5 -> 13 [ label = "2 lanes" ] + 13 -> 5 [ label = "2 lanes" ] + 6 -> 25 [ label = "2 lanes" ] + 25 -> 6 [ label = "2 lanes" ] + 10 -> 4 [ label = "2 lanes" ] + 4 -> 10 [ label = "2 lanes" ] + 13 -> 10 [ label = "2 lanes" ] + 10 -> 13 [ label = "2 lanes" ] + 16 -> 5 [ label = "2 lanes" ] + 5 -> 16 [ label = "2 lanes" ] + 25 -> 16 [ label = "2 lanes" ] + 16 -> 25 [ label = "2 lanes" ] + 8 -> 11 [ label = "1 lanes" ] 9 -> 7 [ label = "1 lanes" ] - 7 -> 8 [ label = "1 lanes" ] + 11 -> 9 [ label = "1 lanes" ] 9 -> 10 [ label = "1 lanes" ] - 3 -> 17 [ label = "1 lanes" ] - 17 -> 23 [ label = "1 lanes" ] - 23 -> 0 [ label = "1 lanes" ] - 12 -> 11 [ label = "1 lanes" ] 11 -> 12 [ label = "1 lanes" ] - 14 -> 18 [ label = "1 lanes" ] + 5 -> 18 [ label = "1 lanes" ] + 18 -> 23 [ label = "1 lanes" ] + 23 -> 2 [ label = "1 lanes" ] + 14 -> 13 [ label = "1 lanes" ] + 13 -> 14 [ label = "1 lanes" ] + 15 -> 0 [ label = "1 lanes" ] 25 -> 24 [ label = "1 lanes" ] - 16 -> 15 [ label = "1 lanes" ] + 17 -> 16 [ label = "1 lanes" ] 19 -> 22 [ label = "1 lanes" ] 22 -> 19 [ label = "1 lanes" ] - 17 -> 16 [ label = "1 lanes" ] - 22 -> 17 [ label = "1 lanes" ] + 18 -> 17 [ label = "1 lanes" ] + 22 -> 18 [ label = "1 lanes" ] 1 -> 22 [ label = "1 lanes" ] 22 -> 1 [ label = "1 lanes" ] - 19 -> 13 [ label = "1 lanes" ] - 13 -> 19 [ label = "1 lanes" ] + 19 -> 3 [ label = "1 lanes" ] + 3 -> 19 [ label = "1 lanes" ] 21 -> 20 [ label = "1 lanes" ] 20 -> 23 [ label = "1 lanes" ] 21 -> 20 [ label = "1 lanes" ] diff --git a/tests/src/taipei/geometry.json b/tests/src/taipei/geometry.json index 9705970b..1d9b5743 100644 --- a/tests/src/taipei/geometry.json +++ b/tests/src/taipei/geometry.json @@ -1837,7 +1837,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 662162162, + "dst_i": -2, "osm_way_id": 506351807, "src_i": 662161980, "type": "road" @@ -2536,6 +2536,43 @@ }, "type": "Feature" }, + { + "geometry": { + "coordinates": [ + [ + [ + 121.52269531547212, + 25.05320111066227 + ], + [ + 121.52275853700935, + 25.053198205853256 + ], + [ + 121.52275350795576, + 25.053108388798876 + ], + [ + 121.52269028641852, + 25.053111293607888 + ], + [ + 121.52269531547212, + 25.05320111066227 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-2", + "osm_node_id": -2, + "type": "intersection" + }, + "type": "Feature" + }, { "geometry": { "coordinates": [ @@ -4114,43 +4151,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - 121.52269531547212, - 25.05320111066227 - ], - [ - 121.52275853700935, - 25.053198205853256 - ], - [ - 121.52275350795576, - 25.053108388798876 - ], - [ - 121.52269028641852, - 25.053111293607888 - ], - [ - 121.52269531547212, - 25.05320111066227 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/662162162", - "osm_node_id": 662162162, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ diff --git a/tests/src/taipei/road_network.dot b/tests/src/taipei/road_network.dot index 00b73757..c5bcd113 100644 --- a/tests/src/taipei/road_network.dot +++ b/tests/src/taipei/road_network.dot @@ -1,140 +1,139 @@ digraph { 0 [ label = "MapEdge" ] - 1 [ label = "Unknown" ] + 1 [ label = "MapEdge" ] 2 [ label = "Unknown" ] - 3 [ label = "MapEdge" ] - 4 [ label = "Unknown" ] - 5 [ label = "MapEdge" ] + 3 [ label = "Unknown" ] + 4 [ label = "MapEdge" ] + 5 [ label = "Unknown" ] 6 [ label = "MapEdge" ] - 7 [ label = "Lights RoadIntersection" ] - 8 [ label = "MapEdge" ] - 9 [ label = "Lights RoadIntersection" ] + 7 [ label = "MapEdge" ] + 8 [ label = "Lights RoadIntersection" ] + 9 [ label = "MapEdge" ] 10 [ label = "Lights RoadIntersection" ] 11 [ label = "Lights RoadIntersection" ] 12 [ label = "Lights RoadIntersection" ] - 13 [ label = "MapEdge" ] - 14 [ label = "Lights RoadIntersection" ] + 13 [ label = "Lights RoadIntersection" ] + 14 [ label = "MapEdge" ] 15 [ label = "Lights RoadIntersection" ] - 16 [ label = "MapEdge" ] - 17 [ label = "Lights RoadIntersection" ] + 16 [ label = "Lights RoadIntersection" ] + 17 [ label = "MapEdge" ] 18 [ label = "Lights RoadIntersection" ] - 19 [ label = "MapEdge" ] + 19 [ label = "Lights RoadIntersection" ] 20 [ label = "MapEdge" ] 21 [ label = "MapEdge" ] 22 [ label = "MapEdge" ] - 23 [ label = "Unknown" ] - 24 [ label = "MapEdge" ] + 23 [ label = "MapEdge" ] + 24 [ label = "Unknown" ] 25 [ label = "MapEdge" ] - 26 [ label = "Lights RoadIntersection" ] - 27 [ label = "Unknown" ] + 26 [ label = "MapEdge" ] + 27 [ label = "Lights RoadIntersection" ] 28 [ label = "Unknown" ] - 29 [ label = "MapEdge" ] - 30 [ label = "Unknown" ] + 29 [ label = "Unknown" ] + 30 [ label = "MapEdge" ] 31 [ label = "Unknown" ] - 32 [ label = "MapEdge" ] - 33 [ label = "Unknown" ] - 34 [ label = "MapEdge" ] - 35 [ label = "Lights RoadIntersection" ] + 32 [ label = "Unknown" ] + 33 [ label = "MapEdge" ] + 34 [ label = "Unknown" ] + 35 [ label = "MapEdge" ] 36 [ label = "MapEdge" ] - 37 [ label = "MapEdge" ] + 37 [ label = "Unknown" ] 38 [ label = "Unknown" ] 39 [ label = "Unknown" ] 40 [ label = "Unknown" ] 41 [ label = "Unknown" ] 42 [ label = "Unknown" ] - 43 [ label = "Unknown" ] + 43 [ label = "MapEdge" ] 44 [ label = "MapEdge" ] 45 [ label = "MapEdge" ] - 46 [ label = "MapEdge" ] + 46 [ label = "Unknown" ] 47 [ label = "Unknown" ] 48 [ label = "Unknown" ] - 49 [ label = "Unknown" ] + 49 [ label = "MapEdge" ] 50 [ label = "MapEdge" ] - 51 [ label = "MapEdge" ] + 51 [ label = "Unknown" ] 52 [ label = "Unknown" ] 53 [ label = "Unknown" ] - 54 [ label = "Unknown" ] + 54 [ label = "MapEdge" ] 55 [ label = "MapEdge" ] 56 [ label = "MapEdge" ] 57 [ label = "MapEdge" ] - 58 [ label = "MapEdge" ] - 18 -> 19 [ label = "2 lanes" ] - 2 -> 1 [ label = "1 lanes" ] + 19 -> 20 [ label = "2 lanes" ] 3 -> 2 [ label = "1 lanes" ] - 4 -> 5 [ label = "1 lanes" ] - 2 -> 6 [ label = "2 lanes" ] - 6 -> 2 [ label = "2 lanes" ] - 4 -> 2 [ label = "2 lanes" ] - 2 -> 4 [ label = "2 lanes" ] - 7 -> 4 [ label = "2 lanes" ] - 4 -> 7 [ label = "2 lanes" ] - 23 -> 47 [ label = "1 lanes" ] - 47 -> 23 [ label = "1 lanes" ] - 47 -> 22 [ label = "1 lanes" ] - 22 -> 47 [ label = "1 lanes" ] - 26 -> 27 [ label = "1 lanes" ] + 4 -> 3 [ label = "1 lanes" ] + 5 -> 6 [ label = "1 lanes" ] + 3 -> 7 [ label = "2 lanes" ] + 7 -> 3 [ label = "2 lanes" ] + 5 -> 3 [ label = "2 lanes" ] + 3 -> 5 [ label = "2 lanes" ] + 8 -> 5 [ label = "2 lanes" ] + 5 -> 8 [ label = "2 lanes" ] + 24 -> 46 [ label = "1 lanes" ] + 46 -> 24 [ label = "1 lanes" ] + 46 -> 23 [ label = "1 lanes" ] + 23 -> 46 [ label = "1 lanes" ] 27 -> 28 [ label = "1 lanes" ] 28 -> 29 [ label = "1 lanes" ] - 31 -> 30 [ label = "1 lanes" ] - 32 -> 43 [ label = "1 lanes" ] - 43 -> 31 [ label = "1 lanes" ] - 27 -> 24 [ label = "1 lanes" ] - 31 -> 27 [ label = "1 lanes" ] - 33 -> 31 [ label = "1 lanes" ] - 38 -> 42 [ label = "2 lanes" ] - 42 -> 38 [ label = "1 lanes" ] - 41 -> 38 [ label = "2 lanes" ] - 38 -> 41 [ label = "1 lanes" ] - 44 -> 41 [ label = "2 lanes" ] - 41 -> 44 [ label = "1 lanes" ] - 39 -> 41 [ label = "1 lanes" ] - 41 -> 39 [ label = "1 lanes" ] - 40 -> 48 [ label = "1 lanes" ] - 48 -> 40 [ label = "1 lanes" ] - 48 -> 39 [ label = "1 lanes" ] - 39 -> 48 [ label = "1 lanes" ] - 38 -> 39 [ label = "1 lanes" ] - 1 -> 15 [ label = "2 lanes" ] - 16 -> 1 [ label = "2 lanes" ] - 7 -> 20 [ label = "4 lanes" ] - 15 -> 7 [ label = "4 lanes" ] - 17 -> 18 [ label = "3 lanes" ] - 17 -> 11 [ label = "4 lanes" ] - 41 -> 36 [ label = "1 lanes" ] - 36 -> 41 [ label = "1 lanes" ] - 12 -> 40 [ label = "2 lanes" ] - 40 -> 13 [ label = "2 lanes" ] - 11 -> 12 [ label = "5 lanes" ] - 11 -> 56 [ label = "5 lanes" ] - 18 -> 9 [ label = "4 lanes" ] - 25 -> 28 [ label = "1 lanes" ] - 28 -> 43 [ label = "1 lanes" ] - 43 -> 0 [ label = "1 lanes" ] - 50 -> 47 [ label = "1 lanes" ] - 47 -> 49 [ label = "1 lanes" ] - 15 -> 14 [ label = "5 lanes" ] - 9 -> 10 [ label = "2 lanes" ] - 37 -> 54 [ label = "5 lanes" ] - 42 -> 12 [ label = "5 lanes" ] - 54 -> 42 [ label = "5 lanes" ] - 14 -> 33 [ label = "3 lanes" ] - 33 -> 34 [ label = "3 lanes" ] - 14 -> 10 [ label = "4 lanes" ] - 12 -> 18 [ label = "4 lanes" ] - 10 -> 45 [ label = "2 lanes" ] - 10 -> 17 [ label = "4 lanes" ] - 9 -> 15 [ label = "4 lanes" ] - 26 -> 30 [ label = "4 lanes" ] - 30 -> 14 [ label = "4 lanes" ] - 51 -> 26 [ label = "4 lanes" ] - 21 -> 23 [ label = "3 lanes" ] - 23 -> 11 [ label = "3 lanes" ] - 46 -> 17 [ label = "4 lanes" ] - 8 -> 9 [ label = "3 lanes" ] - 54 -> 53 [ label = "1 lanes" ] - 53 -> 54 [ label = "1 lanes" ] - 52 -> 48 [ label = "1 lanes" ] - 48 -> 55 [ label = "1 lanes" ] - 57 -> 14 [ label = "1 lanes" ] - 15 -> 58 [ label = "1 lanes" ] + 29 -> 30 [ label = "1 lanes" ] + 32 -> 31 [ label = "1 lanes" ] + 33 -> 42 [ label = "1 lanes" ] + 42 -> 32 [ label = "1 lanes" ] + 28 -> 25 [ label = "1 lanes" ] + 32 -> 28 [ label = "1 lanes" ] + 34 -> 32 [ label = "1 lanes" ] + 37 -> 41 [ label = "2 lanes" ] + 41 -> 37 [ label = "1 lanes" ] + 40 -> 37 [ label = "2 lanes" ] + 37 -> 40 [ label = "1 lanes" ] + 43 -> 40 [ label = "2 lanes" ] + 40 -> 43 [ label = "1 lanes" ] + 38 -> 40 [ label = "1 lanes" ] + 40 -> 38 [ label = "1 lanes" ] + 39 -> 47 [ label = "1 lanes" ] + 47 -> 39 [ label = "1 lanes" ] + 47 -> 38 [ label = "1 lanes" ] + 38 -> 47 [ label = "1 lanes" ] + 37 -> 38 [ label = "1 lanes" ] + 2 -> 16 [ label = "2 lanes" ] + 17 -> 2 [ label = "2 lanes" ] + 8 -> 21 [ label = "4 lanes" ] + 16 -> 8 [ label = "4 lanes" ] + 18 -> 19 [ label = "3 lanes" ] + 18 -> 12 [ label = "4 lanes" ] + 40 -> 35 [ label = "1 lanes" ] + 35 -> 40 [ label = "1 lanes" ] + 13 -> 39 [ label = "2 lanes" ] + 39 -> 14 [ label = "2 lanes" ] + 12 -> 13 [ label = "5 lanes" ] + 12 -> 55 [ label = "5 lanes" ] + 19 -> 10 [ label = "4 lanes" ] + 26 -> 29 [ label = "1 lanes" ] + 29 -> 42 [ label = "1 lanes" ] + 42 -> 1 [ label = "1 lanes" ] + 49 -> 46 [ label = "1 lanes" ] + 46 -> 48 [ label = "1 lanes" ] + 16 -> 15 [ label = "5 lanes" ] + 10 -> 11 [ label = "2 lanes" ] + 36 -> 53 [ label = "5 lanes" ] + 41 -> 13 [ label = "5 lanes" ] + 53 -> 41 [ label = "5 lanes" ] + 15 -> 34 [ label = "3 lanes" ] + 34 -> 0 [ label = "3 lanes" ] + 15 -> 11 [ label = "4 lanes" ] + 13 -> 19 [ label = "4 lanes" ] + 11 -> 44 [ label = "2 lanes" ] + 11 -> 18 [ label = "4 lanes" ] + 10 -> 16 [ label = "4 lanes" ] + 27 -> 31 [ label = "4 lanes" ] + 31 -> 15 [ label = "4 lanes" ] + 50 -> 27 [ label = "4 lanes" ] + 22 -> 24 [ label = "3 lanes" ] + 24 -> 12 [ label = "3 lanes" ] + 45 -> 18 [ label = "4 lanes" ] + 9 -> 10 [ label = "3 lanes" ] + 53 -> 52 [ label = "1 lanes" ] + 52 -> 53 [ label = "1 lanes" ] + 51 -> 47 [ label = "1 lanes" ] + 47 -> 54 [ label = "1 lanes" ] + 56 -> 15 [ label = "1 lanes" ] + 16 -> 57 [ label = "1 lanes" ] } diff --git a/tests/src/tempe_split/geometry.json b/tests/src/tempe_split/geometry.json index ca0ad5e0..9985abfd 100644 --- a/tests/src/tempe_split/geometry.json +++ b/tests/src/tempe_split/geometry.json @@ -705,7 +705,7 @@ "type": "Polygon" }, "properties": { - "dst_i": 7121900770, + "dst_i": -1, "osm_way_id": 561633983, "src_i": 5717678154, "type": "road" @@ -1099,7 +1099,7 @@ "properties": { "dst_i": 7121900772, "osm_way_id": 762209212, - "src_i": -1, + "src_i": -2, "type": "road" }, "type": "Feature" @@ -1288,6 +1288,43 @@ ], "type": "Polygon" }, + "properties": { + "complexity": "MapEdge", + "control": "Border", + "osm_link": "https://www.openstreetmap.org/node/-2", + "osm_node_id": -2, + "type": "intersection" + }, + "type": "Feature" + }, + { + "geometry": { + "coordinates": [ + [ + [ + -111.93825, + 33.42240752949234 + ], + [ + -111.9382284522972, + 33.42240731365522 + ], + [ + -111.93822974636615, + 33.422317387816854 + ], + [ + -111.93825129406896, + 33.42231760365398 + ], + [ + -111.93825, + 33.42240752949234 + ] + ] + ], + "type": "Polygon" + }, "properties": { "complexity": "MapEdge", "control": "Border", @@ -2370,43 +2407,6 @@ }, "type": "Feature" }, - { - "geometry": { - "coordinates": [ - [ - [ - -111.93825, - 33.42240752949234 - ], - [ - -111.9382284522972, - 33.42240731365522 - ], - [ - -111.93822974636615, - 33.422317387816854 - ], - [ - -111.93825129406896, - 33.42231760365398 - ], - [ - -111.93825, - 33.42240752949234 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "complexity": "MapEdge", - "control": "Border", - "osm_link": "https://www.openstreetmap.org/node/7121900770", - "osm_node_id": 7121900770, - "type": "intersection" - }, - "type": "Feature" - }, { "geometry": { "coordinates": [ diff --git a/tests/src/tempe_split/road_network.dot b/tests/src/tempe_split/road_network.dot index b409a705..3516454e 100644 --- a/tests/src/tempe_split/road_network.dot +++ b/tests/src/tempe_split/road_network.dot @@ -2,77 +2,75 @@ digraph { 0 [ label = "MapEdge" ] 1 [ label = "MapEdge" ] 2 [ label = "MapEdge" ] - 3 [ label = "Unknown" ] + 3 [ label = "MapEdge" ] 4 [ label = "Unknown" ] - 5 [ label = "MapEdge" ] - 6 [ label = "Lights RoadIntersection" ] - 7 [ label = "MapEdge" ] - 8 [ label = "Unknown" ] + 5 [ label = "Unknown" ] + 6 [ label = "MapEdge" ] + 7 [ label = "Lights RoadIntersection" ] + 8 [ label = "MapEdge" ] 9 [ label = "Unknown" ] - 10 [ label = "MapEdge" ] + 10 [ label = "Unknown" ] 11 [ label = "MapEdge" ] - 12 [ label = "Unknown" ] + 12 [ label = "MapEdge" ] 13 [ label = "Unknown" ] 14 [ label = "Unknown" ] 15 [ label = "Unknown" ] - 16 [ label = "MapEdge" ] + 16 [ label = "Unknown" ] 17 [ label = "MapEdge" ] - 18 [ label = "Unknown" ] - 19 [ label = "MapEdge" ] - 20 [ label = "Unknown" ] - 21 [ label = "MapEdge" ] - 22 [ label = "Unknown" ] + 18 [ label = "MapEdge" ] + 19 [ label = "Unknown" ] + 20 [ label = "MapEdge" ] + 21 [ label = "Unknown" ] + 22 [ label = "MapEdge" ] 23 [ label = "MapEdge" ] 24 [ label = "Unknown" ] 25 [ label = "Unknown" ] 26 [ label = "Unknown" ] 27 [ label = "Unknown" ] - 28 [ label = "MapEdge" ] - 29 [ label = "Unknown" ] - 30 [ label = "Unknown" ] - 31 [ label = "MapEdge" ] - 32 [ label = "MapEdge" ] - 6 -> 32 [ label = "4 lanes" ] - 6 -> 10 [ label = "4 lanes" ] - 8 -> 6 [ label = "6 lanes" ] - 1 -> 9 [ label = "4 lanes" ] - 9 -> 6 [ label = "7 lanes" ] - 4 -> 6 [ label = "6 lanes" ] - 14 -> 18 [ label = "6 lanes" ] - 18 -> 4 [ label = "6 lanes" ] - 12 -> 11 [ label = "4 lanes" ] - 11 -> 12 [ label = "5 lanes" ] - 6 -> 26 [ label = "4 lanes" ] - 26 -> 6 [ label = "6 lanes" ] + 28 [ label = "Unknown" ] + 29 [ label = "MapEdge" ] + 30 [ label = "MapEdge" ] + 7 -> 30 [ label = "4 lanes" ] + 7 -> 11 [ label = "4 lanes" ] + 9 -> 7 [ label = "6 lanes" ] + 2 -> 10 [ label = "4 lanes" ] + 10 -> 7 [ label = "7 lanes" ] + 5 -> 7 [ label = "6 lanes" ] + 15 -> 19 [ label = "6 lanes" ] + 19 -> 5 [ label = "6 lanes" ] 13 -> 12 [ label = "4 lanes" ] - 12 -> 13 [ label = "6 lanes" ] - 26 -> 13 [ label = "4 lanes" ] - 13 -> 26 [ label = "6 lanes" ] - 3 -> 2 [ label = "4 lanes" ] - 6 -> 3 [ label = "4 lanes" ] - 5 -> 14 [ label = "4 lanes" ] - 20 -> 15 [ label = "1 lanes" ] - 15 -> 16 [ label = "1 lanes" ] - 28 -> 20 [ label = "1 lanes" ] - 3 -> 4 [ label = "1 lanes" ] - 4 -> 15 [ label = "1 lanes" ] - 18 -> 20 [ label = "1 lanes" ] - 20 -> 18 [ label = "1 lanes" ] - 20 -> 24 [ label = "1 lanes" ] - 24 -> 20 [ label = "1 lanes" ] - 24 -> 29 [ label = "1 lanes" ] - 29 -> 24 [ label = "1 lanes" ] - 29 -> 19 [ label = "1 lanes" ] - 19 -> 29 [ label = "1 lanes" ] - 13 -> 21 [ label = "0 lanes" ] + 12 -> 13 [ label = "5 lanes" ] + 7 -> 26 [ label = "4 lanes" ] + 26 -> 7 [ label = "6 lanes" ] + 14 -> 13 [ label = "4 lanes" ] + 13 -> 14 [ label = "6 lanes" ] + 26 -> 14 [ label = "4 lanes" ] + 14 -> 26 [ label = "6 lanes" ] + 4 -> 3 [ label = "4 lanes" ] + 7 -> 4 [ label = "4 lanes" ] + 6 -> 15 [ label = "4 lanes" ] + 21 -> 16 [ label = "1 lanes" ] + 16 -> 17 [ label = "1 lanes" ] + 1 -> 21 [ label = "1 lanes" ] + 4 -> 5 [ label = "1 lanes" ] + 5 -> 16 [ label = "1 lanes" ] + 19 -> 21 [ label = "1 lanes" ] + 21 -> 19 [ label = "1 lanes" ] + 21 -> 24 [ label = "1 lanes" ] + 24 -> 21 [ label = "1 lanes" ] + 24 -> 27 [ label = "1 lanes" ] + 27 -> 24 [ label = "1 lanes" ] + 27 -> 20 [ label = "1 lanes" ] + 20 -> 27 [ label = "1 lanes" ] + 14 -> 22 [ label = "0 lanes" ] 23 -> 26 [ label = "1 lanes" ] 26 -> 23 [ label = "1 lanes" ] 25 -> 24 [ label = "1 lanes" ] 24 -> 25 [ label = "1 lanes" ] - 0 -> 29 [ label = "1 lanes" ] - 29 -> 0 [ label = "1 lanes" ] - 17 -> 3 [ label = "1 lanes" ] - 31 -> 30 [ label = "1 lanes" ] - 30 -> 31 [ label = "1 lanes" ] - 7 -> 8 [ label = "5 lanes" ] + 0 -> 27 [ label = "1 lanes" ] + 27 -> 0 [ label = "1 lanes" ] + 18 -> 4 [ label = "1 lanes" ] + 29 -> 28 [ label = "1 lanes" ] + 28 -> 29 [ label = "1 lanes" ] + 8 -> 9 [ label = "5 lanes" ] }