From cceaf5a4695af9ba59109c9572308c8d849f1db2 Mon Sep 17 00:00:00 2001 From: Michael Bell Date: Wed, 31 Mar 2021 00:28:01 +0100 Subject: [PATCH] Add kerb barrier exception to default car profile OSM data contains many mistakes that tag kerbs as highway barriers when instead they are only describing highway crossings. This PR updates the default car profile to handle these mistakes and unblock routing on the affected highways. --- CHANGELOG.md | 2 ++ features/car/barrier.feature | 12 ++++++++++++ profiles/car.lua | 13 ++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c55f358b90..4f9007696a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ - Misc: - FIXED: Upgrade to @mapbox/node-pre-gyp fix various bugs with Node 12/14 [#5991](https://github.com/Project-OSRM/osrm-backend/pull/5991) - FIXED: `valid` type in documentation examples [#5990](https://github.com/Project-OSRM/osrm-backend/issues/5990) + - Profile: + - FIXED: Add kerb barrier exception to default car profile. [#5999](https://github.com/Project-OSRM/osrm-backend/pull/5999) # 5.24.0 - Changes from 5.23.0 diff --git a/features/car/barrier.feature b/features/car/barrier.feature index 3f32206023e..fd7e7f834e5 100644 --- a/features/car/barrier.feature +++ b/features/car/barrier.feature @@ -46,6 +46,18 @@ Feature: Car - Barriers | bollard | rising | x | | bollard | removable | | + # https://github.com/Project-OSRM/osrm-backend/issues/5996 + Scenario: Car - Kerb exception for barriers + Then routability should be + | node/barrier | node/highway | node/kerb | bothw | + | kerb | | | | + | kerb | crossing | | x | + | kerb | crossing | yes | x | + | kerb | | lowered | x | + | kerb | | flush | x | + | kerb | | raised | | + | kerb | | yes | | + Scenario: Car - Height restrictions Then routability should be | node/barrier | node/maxheight | bothw | diff --git a/profiles/car.lua b/profiles/car.lua index 856badd07b0..401f4bf45b9 100644 --- a/profiles/car.lua +++ b/profiles/car.lua @@ -342,7 +342,18 @@ function process_node(profile, node, result, relations) local bollard = node:get_value_by_key("bollard") local rising_bollard = bollard and "rising" == bollard - if not profile.barrier_whitelist[barrier] and not rising_bollard or restricted_by_height then + -- make an exception for lowered/flat barrier=kerb + -- and incorrect tagging of highway crossing kerb as highway barrier + local kerb = node:get_value_by_key("kerb") + local highway = node:get_value_by_key("highway") + local flat_kerb = kerb and ("lowered" == kerb or "flush" == kerb) + local highway_crossing_kerb = barrier == "kerb" and highway and highway == "crossing" + + if not profile.barrier_whitelist[barrier] + and not rising_bollard + and not flat_kerb + and not highway_crossing_kerb + or restricted_by_height then result.barrier = true end end