diff --git a/profiles/car.lua b/profiles/car.lua index 912d98cac..8c68bc994 100644 --- a/profiles/car.lua +++ b/profiles/car.lua @@ -241,12 +241,6 @@ function way_function (way, result) return end - local width = math.huge - local width_string = way:get_value_by_key("width") - if width_string and tonumber(width_string:match("%d*")) then - width = tonumber(width_string:match("%d*")) - end - -- Check if we are allowed to access the way local access = find_access_tag(way, access_tags_hierachy) if access_tag_blacklist[access] then @@ -404,12 +398,25 @@ function way_function (way, result) result.ignore_in_grid = true end + local width = math.huge + local lanes = math.huge + if result.forward_speed > 0 or result.backward_speed > 0 then + local width_string = way:get_value_by_key("width") + if width_string and tonumber(width_string:match("%d*")) then + width = tonumber(width_string:match("%d*")) + end + + local lanes_string = way:get_value_by_key("lanes") + if lanes_string and tonumber(lanes_string:match("%d*")) then + lanes = tonumber(lanes_string:match("%d*")) + end + end -- scale speeds to get better avg driving times if result.forward_speed > 0 then local scaled_speed = result.forward_speed*speed_reduction + 11; local penalized_speed = math.huge - if width <= 3 then + if width <= 3 or lanes <= 1 then penalized_speed = result.forward_speed / 2; end result.forward_speed = math.min(penalized_speed, scaled_speed) @@ -418,7 +425,7 @@ function way_function (way, result) if result.backward_speed > 0 then local scaled_speed = result.backward_speed*speed_reduction + 11; local penalized_speed = math.huge - if width <= 3 then + if width <= 3 or lanes <= 1 then penalized_speed = result.backward_speed / 2; end result.backward_speed = math.min(penalized_speed, scaled_speed)