implement scaling for narrow roads as an alternative expected speed and take the minimum. Follows @emiltin's idea.

This commit is contained in:
Dennis Luxen 2015-02-20 10:28:49 +01:00
parent a85fe2cb08
commit b89c7580e6
2 changed files with 15 additions and 11 deletions

View File

@ -79,17 +79,17 @@ OSRM will use 4/5 of the projected free-flow speed.
| highway | maxspeed | width | maxspeed:forward | maxspeed:backward | forw | backw | | highway | maxspeed | width | maxspeed:forward | maxspeed:backward | forw | backw |
| primary | | | | | 63 km/h | 63 km/h | | 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 | | | | 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 | | | 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 | | | | 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 | | 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 | | | 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 | | 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 |

View File

@ -394,17 +394,21 @@ function way_function (way, result)
-- scale speeds to get better avg driving times -- scale speeds to get better avg driving times
if result.forward_speed > 0 then 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 if width <= 3 then
result.forward_speed = result.forward_speed / 2; penalized_speed = result.forward_speed / 2;
end end
result.forward_speed = math.min(penalized_speed, scaled_speed)
end end
if result.backward_speed > 0 then 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 if width <= 3 then
result.backward_speed = result.backward_speed / 2; penalized_speed = result.backward_speed / 2;
end end
result.backward_speed = math.min(penalized_speed, scaled_speed)
end end
end end