map_model/make/
bridges.rs1use abstutil::Timer;
2use geom::{Distance, FindClosest};
3
4use crate::{Road, RoadID};
5
6pub fn find_bridges(roads: &mut Vec<Road>, timer: &mut Timer) {
9 let mut closest: FindClosest<RoadID> = FindClosest::new();
10 let mut bridges = Vec::new();
11 for r in roads.iter() {
12 closest.add(r.id, r.center_pts.points());
13 if r.osm_tags.contains_key("bridge") {
14 bridges.push(r.id);
15 }
16 }
17
18 timer.start_iter("find roads underneath bridge", bridges.len());
19 for bridge in bridges {
20 timer.next();
21 let bridge_pts = roads[bridge.0].center_pts.clone();
22 for (r, _, _) in closest.all_close_pts(bridge_pts.middle(), Distance::meters(500.0)) {
23 #[allow(clippy::collapsible_if)]
24 if bridge != r
25 && bridge_pts != roads[r.0].center_pts
26 && bridge_pts.intersection(&roads[r.0].center_pts).is_some()
27 {
28 if roads[r.0].zorder == 0 {
29 roads[r.0].zorder = -1;
30 }
31 }
32 }
33 }
34}