Only allow restricted access for road of certain highway type

This commit is contained in:
Patrick Niklaus 2017-03-03 12:38:11 +00:00 committed by Patrick Niklaus
parent 93cdd8bb46
commit cc3a4899a2
5 changed files with 65 additions and 16 deletions

View File

@ -165,7 +165,7 @@ Feature: Car - Restricted access
| motorway | yes | permissive | | private | x | | implied oneway | | motorway | yes | permissive | | private | x | | implied oneway |
| trunk | agricultural | designated | permissive | no | | | | | trunk | agricultural | designated | permissive | no | | | |
| pedestrian | | | | | | | | | pedestrian | | | | | | | |
| pedestrian | | | | destination | x | x | | | pedestrian | | | | destination | | | temporary disabled #3773 |
Scenario: Car - Ignore access tags for other modes Scenario: Car - Ignore access tags for other modes
Then routability should be Then routability should be
@ -262,9 +262,11 @@ Feature: Car - Restricted access
Scenario: Car - a way with a list of tags Scenario: Car - a way with a list of tags
Then routability should be Then routability should be
| highway | motor_vehicle | motor_vehicle:forward | motor_vehicle:backward | forw | backw | | highway | motor_vehicle | motor_vehicle:forward | motor_vehicle:backward | forw | backw | # |
| footway | | | destination | | x | | primary | | no | destination | | x | |
| track | destination;agricultural | destination | | x | x | | primary | destination;agricultural | destination | | x | x | |
| footway | | | destination | | | temporary #3373 |
| track | destination;agricultural | destination | | | x | temporary #3373 |
Scenario: Car - Don't route over steps even if marked as accessible Scenario: Car - Don't route over steps even if marked as accessible
Then routability should be Then routability should be
@ -280,3 +282,24 @@ Feature: Car - Restricted access
| steps | permissive | | | steps | permissive | |
| footway | permissive | x | | footway | permissive | x |
| garbagetag | permissive | x | | garbagetag | permissive | x |
Scenario: Car - Access private blacklist
Then routability should be
| highway | access | bothw |
| footway | yes | x |
| pedestrian | private | |
| footway | private | |
| service | private | |
| cycleway | private | |
| track | private | |
Scenario: Car - Access blacklist
Then routability should be
| highway | access | bothw |
| primary | | x |
| primary | customer | |
| primary | emergency | |
| primary | forestry | |
| primary | agricultural | |
| primary | psv | |
| primary | no | |

View File

@ -67,6 +67,8 @@ local profile = {
restricted_access_tag_list = Set { }, restricted_access_tag_list = Set { },
restricted_highway_whitelist = Set { },
access_tags_hierarchy = Sequence { access_tags_hierarchy = Sequence {
'bicycle', 'bicycle',
'vehicle', 'vehicle',

View File

@ -74,7 +74,11 @@ local profile = {
'agricultural', 'agricultural',
'forestry', 'forestry',
'emergency', 'emergency',
'psv' 'psv',
'customer',
'private',
'delivery',
'destination'
}, },
restricted_access_tag_list = Set { restricted_access_tag_list = Set {
@ -137,6 +141,21 @@ local profile = {
["drive-thru"] = 0.5 ["drive-thru"] = 0.5
}, },
restricted_highway_whitelist = Set {
'motorway',
'motorway_link',
'trunk',
'trunk_link',
'primary',
'primary_link',
'secondary',
'secondary_link',
'tertiary',
'tertiary_link',
'residential',
'living_street',
},
route_speeds = { route_speeds = {
ferry = 5, ferry = 5,
shuttle_train = 10 shuttle_train = 10
@ -259,7 +278,7 @@ function node_function (node, result)
-- parse access and barrier tags -- parse access and barrier tags
local access = find_access_tag(node, profile.access_tags_hierarchy) local access = find_access_tag(node, profile.access_tags_hierarchy)
if access then if access then
if profile.access_tag_blacklist[access] then if profile.access_tag_blacklist[access] and not profile.restricted_access_tag_list[access] then
result.barrier = true result.barrier = true
end end
else else

View File

@ -53,6 +53,8 @@ local profile = {
restricted_access_tag_list = Set { }, restricted_access_tag_list = Set { },
restricted_highway_whitelist = Set { },
access_tags_hierarchy = Sequence { access_tags_hierarchy = Sequence {
'foot', 'foot',
'access' 'access'

View File

@ -212,18 +212,8 @@ function Handlers.handle_access(way,result,data,profile)
data.forward_access, data.backward_access = data.forward_access, data.backward_access =
Tags.get_forward_backward_by_set(way,data,profile.access_tags_hierarchy) Tags.get_forward_backward_by_set(way,data,profile.access_tags_hierarchy)
if profile.access_tag_blacklist[data.forward_access] then -- only allow a subset of roads that are marked as restricted
result.forward_mode = mode.inaccessible if profile.restricted_highway_whitelist[data.highway] then
end
if profile.access_tag_blacklist[data.backward_access] then
result.backward_mode = mode.inaccessible
end
if result.forward_mode == mode.inaccessible and result.backward_mode == mode.inaccessible then
return false
end
if profile.restricted_access_tag_list[data.forward_access] then if profile.restricted_access_tag_list[data.forward_access] then
result.forward_restricted = true result.forward_restricted = true
end end
@ -233,6 +223,19 @@ function Handlers.handle_access(way,result,data,profile)
end end
end end
if profile.access_tag_blacklist[data.forward_access] and not result.forward_restricted then
result.forward_mode = mode.inaccessible
end
if profile.access_tag_blacklist[data.backward_access] and not result.backward_restricted then
result.backward_mode = mode.inaccessible
end
if result.forward_mode == mode.inaccessible and result.backward_mode == mode.inaccessible then
return false
end
end
-- handle speed (excluding maxspeed) -- handle speed (excluding maxspeed)
function Handlers.handle_speed(way,result,data,profile) function Handlers.handle_speed(way,result,data,profile)
if result.forward_speed ~= -1 then if result.forward_speed ~= -1 then