{"record":{"id":"c8a3bbe2590cf96a","repo":"a-b-street/abstreet","slug":"giving-up-looking-for-a-driving-lane-near-searched-roads","errorCode":null,"errorMessage":"Giving up looking for a driving lane near {}, searched {} roads: {:?}","messagePattern":"Giving up looking for a driving lane near (.+?), searched (.+?) roads: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"map_model/src/map.rs","lineNumber":628,"sourceCode":"            .get_parent(sidewalk)\n            .find_closest_lane(sidewalk, |l| PathConstraints::Car.can_use(l, self))\n        {\n            if !self.get_l(l).driving_blackhole {\n                return l;\n            }\n        }\n\n        let mut roads_queue: VecDeque<RoadID> = VecDeque::new();\n        let mut visited: HashSet<RoadID> = HashSet::new();\n        {\n            let start = self.building_to_road(b).id;\n            roads_queue.push_back(start);\n            visited.insert(start);\n        }\n\n        loop {\n            if roads_queue.is_empty() {\n                panic!(\n                    \"Giving up looking for a driving lane near {}, searched {} roads: {:?}\",\n                    b,\n                    visited.len(),\n                    visited\n                );\n            }\n            let r = self.get_r(roads_queue.pop_front().unwrap());\n\n            for (l, lt) in r\n                .children_forwards()\n                .into_iter()\n                .chain(r.children_backwards().into_iter())\n            {\n                if lt == LaneType::Driving && !self.get_l(l).driving_blackhole {\n                    return l;\n                }\n            }\n","sourceCodeStart":610,"sourceCodeEnd":646,"githubUrl":"https://github.com/a-b-street/abstreet/blob/0964f29315820c91b171b585eb51e300164e9197/map_model/src/map.rs#L610-L646","documentation":"find_driving_lane_near_building does a BFS from the building's nearest road over the road graph looking for any road with a driving lane reachable without crossing non-driving lanes. If the queue empties, no driving lane was found within the searched component, so it panics with the list of visited roads.","triggerScenarios":"Calling Map::find_driving_lane_near_building (or its callers goal_pos, walking_path_to_nearest_parking_spot, Building::pos) for a building whose connected roads contain only footpaths/service roads without driving lanes.","commonSituations":"Importing maps with pedestrian-only zones, private driveways tagged as footways, or synthetic buildings attached to disconnected paths; also after map edits that strip driving lanes near a building.","solutions":["Check the visited road list in the message and ensure at least one road has a driving lane connected to the building.","Fix OSM tags near the building so a drivable way connects to it (e.g. correct highway=* on the access road).","Remove or relocate the offending building if it genuinely has no road access.","If modeling a transit/pedestrian map intentionally without driving lanes, avoid calling driving-lane-dependent APIs for such buildings."],"exampleFix":"// before\nlet goal = map.find_driving_lane_near_building(b);\n// after\nlet ok = map.get_b(b).accessed_by_roads(map).iter()\n    .any(|r| !map.get_r(*r).lanes(map, Direction::Fwd).is_empty());\nif !ok { return Err(anyhow!(\"building {} has no reachable driving lane\", b)); }\nlet goal = map.find_driving_lane_near_building(b);","handlingStrategy":"fallback","validationCode":"// ensure some connected road has a driving lane before calling\nlet has_driving = map.get_b(b).accessed_by_roads(map).iter()\n    .any(|r| map.get_r(*r).incoming_lanes(map.get_r(*r).src_i).iter().any(|(_, lt)| lt.is_driving()));","typeGuard":null,"tryCatchPattern":"// panic! is not catchable; wrap the call site in catch_unwind only as last resort\nlet result = std::panic::catch_unwind(|| map.find_driving_lane_near_building(b));\nmatch result {\n    Ok(pt) => pt,\n    Err(_) => fallback_to_nearest_road_center(map, b),\n}","preventionTips":["Check OSM highway tags for drivable access near buildings","Avoid importing pedestrian-only zones with buildings that need driving lanes","Run map import checks on all buildings before shipping a map"],"tags":["routing","buildings","graph-search","invariant"],"backgroundTag":"entity-not-found","analyzedSha":"0964f29315820c91b171b585eb51e300164e9197","analyzedAt":"2026-09-13T18:02:03.421Z","contentChangedAt":"2026-09-13T18:02:03.421Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}