expose data about turning onto restricted roads to turn function

This commit is contained in:
karenzshea
2017-02-14 12:59:16 +01:00
committed by Patrick Niklaus
parent a0e7bab598
commit c2727f2029
19 changed files with 210 additions and 103 deletions
+31 -29
View File
@@ -177,25 +177,37 @@ function Handlers.handle_hov(way,result,data,profile)
return
end
-- in this case we will use penalties instead of filtering out
local hov = way:get_value_by_key("hov")
if "designated" == hov then
result.forward_restricted = true
result.backward_restricted = true
end
data.hov_lanes_forward, data.hov_lanes_backward = Tags.get_forward_backward_by_key(way,data,'hov:lanes')
local all_hov_forward = Handlers.has_all_designated_hov_lanes(data.hov_lanes_forward)
local all_hov_backward = Handlers.has_all_designated_hov_lanes(data.hov_lanes_backward)
-- in this case we will use turn penalties instead of filtering out
if properties.weight_name == 'routability' then
if (all_hov_forward) then
result.forward_restricted = true
end
if (all_hov_backward) then
result.backward_restricted = true
end
return
end
-- check if all lanes are hov only
data.hov_lanes_forward, data.hov_lanes_backward = Tags.get_forward_backward_by_key(way,data,'hov:lanes')
local inaccessible_forward = Handlers.has_all_designated_hov_lanes(data.hov_lanes_forward)
local inaccessible_backward = Handlers.has_all_designated_hov_lanes(data.hov_lanes_backward)
if inaccessible_forward then
-- filter out ways where all lanes are hov only
if all_hov_forward then
result.forward_mode = mode.inaccessible
end
if inaccessible_backward then
if all_hov_backward then
result.backward_mode = mode.inaccessible
end
end
-- check accessibility by traversing our acces tag hierarchy
-- check accessibility by traversing our access tag hierarchy
function Handlers.handle_access(way,result,data,profile)
data.forward_access, data.backward_access =
Tags.get_forward_backward_by_set(way,data,profile.access_tags_hierarchy)
@@ -211,6 +223,14 @@ function Handlers.handle_access(way,result,data,profile)
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
result.forward_restricted = true
end
if profile.restricted_access_tag_list[data.backward_access] then
result.backward_restricted = true
end
end
-- handle speed (excluding maxspeed)
@@ -273,24 +293,6 @@ end
function Handlers.handle_penalties(way,result,data,profile)
-- heavily penalize a way tagged with all HOV lanes
-- in order to only route over them if there is no other option
local forward_hov_penalty = 1.0
local backward_hov_penalty = 1.0
if profile.avoid.hov_lanes then
local hov = way:get_value_by_key("hov")
if "designated" == hov then
forward_hov_penalty = 0.1
backward_hov_penalty = 0.1
else
data.hov_lanes_forward, data.hov_lanes_backward = Tags.get_forward_backward_by_key(way,data,'hov:lanes')
if Handlers.has_all_designated_hov_lanes(data.hov_lanes_forward) then
forward_hov_penalty = 0.1
end
if Handlers.has_all_designated_hov_lanes(data.hov_lanes_backward) then
backward_hov_penalty = 0.1
end
end
end
local service_penalty = 1.0
local service = way:get_value_by_key("service")
if service and profile.service_penalties[service] then
@@ -330,8 +332,8 @@ function Handlers.handle_penalties(way,result,data,profile)
sideroad_penalty = profile.side_road_multiplier
end
local forward_penalty = math.min(service_penalty, width_penalty, alternating_penalty, sideroad_penalty, forward_hov_penalty)
local backward_penalty = math.min(service_penalty, width_penalty, alternating_penalty, sideroad_penalty, backward_hov_penalty)
local forward_penalty = math.min(service_penalty, width_penalty, alternating_penalty, sideroad_penalty)
local backward_penalty = math.min(service_penalty, width_penalty, alternating_penalty, sideroad_penalty)
if properties.weight_name == 'routability' then
if result.forward_speed > 0 then