Only allow restricted access for road of certain highway type
This commit is contained in:
parent
93cdd8bb46
commit
cc3a4899a2
@ -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 | |
|
||||||
|
@ -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',
|
||||||
|
@ -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
|
||||||
|
@ -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'
|
||||||
|
@ -212,25 +212,28 @@ 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
|
||||||
|
if profile.restricted_highway_whitelist[data.highway] then
|
||||||
|
if profile.restricted_access_tag_list[data.forward_access] then
|
||||||
|
result.forward_restricted = true
|
||||||
|
end
|
||||||
|
|
||||||
|
if profile.restricted_access_tag_list[data.backward_access] then
|
||||||
|
result.backward_restricted = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if profile.access_tag_blacklist[data.forward_access] and not result.forward_restricted then
|
||||||
result.forward_mode = mode.inaccessible
|
result.forward_mode = mode.inaccessible
|
||||||
end
|
end
|
||||||
|
|
||||||
if profile.access_tag_blacklist[data.backward_access] then
|
if profile.access_tag_blacklist[data.backward_access] and not result.backward_restricted then
|
||||||
result.backward_mode = mode.inaccessible
|
result.backward_mode = mode.inaccessible
|
||||||
end
|
end
|
||||||
|
|
||||||
if result.forward_mode == mode.inaccessible and result.backward_mode == mode.inaccessible then
|
if result.forward_mode == mode.inaccessible and result.backward_mode == mode.inaccessible then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
if profile.restricted_access_tag_list[data.forward_access] then
|
|
||||||
result.forward_restricted = true
|
|
||||||
end
|
|
||||||
|
|
||||||
if profile.restricted_access_tag_list[data.backward_access] then
|
|
||||||
result.backward_restricted = true
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- handle speed (excluding maxspeed)
|
-- handle speed (excluding maxspeed)
|
||||||
|
Loading…
Reference in New Issue
Block a user