From b89c7580e63c3a77455ea80bf0feec244a8e47e8 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Fri, 20 Feb 2015 10:28:49 +0100 Subject: [PATCH] implement scaling for narrow roads as an alternative expected speed and take the minimum. Follows @emiltin's idea. --- features/car/maxspeed.feature | 14 +++++++------- profiles/car.lua | 12 ++++++++---- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/features/car/maxspeed.feature b/features/car/maxspeed.feature index 3bc1ad03f..781f4c617 100644 --- a/features/car/maxspeed.feature +++ b/features/car/maxspeed.feature @@ -79,17 +79,17 @@ OSRM will use 4/5 of the projected free-flow speed. | highway | maxspeed | width | maxspeed:forward | maxspeed:backward | forw | backw | | primary | | | | | 63 km/h | 63 km/h | - | primary | | 3 | | | 31 km/h | 31 km/h | + | primary | | 3 | | | 32 km/h | 32 km/h | | primary | 60 | | | | 59 km/h | 59 km/h | - | primary | 60 | 3 | | | 29 km/h | 29 km/h | + | primary | 60 | 3 | | | 30 km/h | 30 km/h | | primary | | | 60 | | 59 km/h | 63 km/h | - | primary | | 3 | 60 | | 29 km/h | 31 km/h | + | primary | | 3 | 60 | | 30 km/h | 32 km/h | | primary | | | | 60 | 63 km/h | 59 km/h | - | primary | | 3 | | 60 | 31 km/h | 29 km/h | + | primary | | 3 | | 60 | 32 km/h | 30 km/h | | primary | 15 | | 60 | | 59 km/h | 23 km/h | - | primary | 15 | 3 | 60 | | 29 km/h | 11 km/h | + | primary | 15 | 3 | 60 | | 30 km/h | 7 km/h | | primary | 15 | | | 60 | 23 km/h | 59 km/h | - | primary | 15 | 3 | | 60 | 11 km/h | 29 km/h | + | primary | 15 | 3 | | 60 | 7 km/h | 30 km/h | | primary | 15 | | 30 | 60 | 34 km/h | 59 km/h | - | primary | 15 | 3 | 30 | 60 | 17 km/h | 29 km/h | + | primary | 15 | 3 | 30 | 60 | 15 km/h | 30 km/h | diff --git a/profiles/car.lua b/profiles/car.lua index 24fdc2925..a2b76388d 100644 --- a/profiles/car.lua +++ b/profiles/car.lua @@ -394,17 +394,21 @@ function way_function (way, result) -- scale speeds to get better avg driving times if result.forward_speed > 0 then - result.forward_speed = result.forward_speed*speed_reduction + 11; + local scaled_speed = result.forward_speed*speed_reduction + 11; + local penalized_speed = math.huge if width <= 3 then - result.forward_speed = result.forward_speed / 2; + penalized_speed = result.forward_speed / 2; end + result.forward_speed = math.min(penalized_speed, scaled_speed) end if result.backward_speed > 0 then - result.backward_speed = result.backward_speed*speed_reduction + 11; + local scaled_speed = result.backward_speed*speed_reduction + 11; + local penalized_speed = math.huge if width <= 3 then - result.backward_speed = result.backward_speed / 2; + penalized_speed = result.backward_speed / 2; end + result.backward_speed = math.min(penalized_speed, scaled_speed) end end