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.
This commit is contained in:
Michael Bell 2021-03-31 00:28:01 +01:00
parent c15b02ecf6
commit 8d3ebc64dc
4 changed files with 30 additions and 1 deletions

View File

@ -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

View File

@ -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 |

View File

@ -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

View File

@ -125,6 +125,7 @@
{"key": "side_road", "value": "rotary", "description": "gets speed penalty"},
{"key": "route", "object_types": ["way"]},
{"key": "highway", "value": "traffic_signals", "object_types": ["node"]},
{"key": "highway", "value": "crossing", "object_types": ["node"]},
{"key": "access", "value": "yes"},
{"key": "access", "value": "motorcar"},
{"key": "access", "value": "motor_vehicle"},
@ -202,6 +203,7 @@
{"key": "barrier", "value": "lift_gate"},
{"key": "barrier", "value": "no"},
{"key": "barrier", "value": "entrance"},
{"key": "barrier", "value": "kerb"},
{"key": "highway", "value": "motorway"},
{"key": "highway", "value": "motorway_link"},
{"key": "highway", "value": "trunk"},
@ -220,6 +222,8 @@
{"key": "highway", "value": "movable"},
{"key": "highway", "value": "shuttle_train"},
{"key": "highway", "value": "default"},
{"key": "kerb", "value": "lowered", "object_types": ["node"]},
{"key": "kerb", "value": "flush", "object_types": ["node"]},
{"key": "width", "description": "Penalties for narrow streets"},
{"key": "lanes", "description": "Penalties for shared single lane streets"},
{"key": "lanes:forward", "description": "Lanes in forward direction"},