Add support for advisory speed limits
This adds support for the maxspeed:advisory class of speed tags.
This commit is contained in:
parent
6c35272fe2
commit
783d455bd7
67
features/car/advisory.feature
Normal file
67
features/car/advisory.feature
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
@routing @maxspeed @car
|
||||||
|
Feature: Car - Max speed restrictions
|
||||||
|
OSRM will use 4/5 of the projected free-flow speed.
|
||||||
|
|
||||||
|
Background: Use specific speeds
|
||||||
|
Given the profile "car"
|
||||||
|
Given a grid size of 1000 meters
|
||||||
|
|
||||||
|
Scenario: Car - Advisory speed overwrites maxspeed
|
||||||
|
Given the node map
|
||||||
|
| a | b | c |
|
||||||
|
|
||||||
|
And the ways
|
||||||
|
| nodes | highway | maxspeed | maxspeed:advisory |
|
||||||
|
| ab | residential | 90 | 45 |
|
||||||
|
| bc | residential | | 45 |
|
||||||
|
|
||||||
|
When I route I should get
|
||||||
|
| from | to | route | speed |
|
||||||
|
| a | b | ab | 47 km/h +- 1 |
|
||||||
|
| b | c | bc | 47 km/h +- 1 |
|
||||||
|
|
||||||
|
Scenario: Car - Advisory speed overwrites forward maxspeed
|
||||||
|
Given the node map
|
||||||
|
| a | b | c |
|
||||||
|
|
||||||
|
And the ways
|
||||||
|
| nodes | highway | maxspeed:forward | maxspeed:advisory:forward |
|
||||||
|
| ab | residential | 90 | 45 |
|
||||||
|
| bc | residential | | 45 |
|
||||||
|
|
||||||
|
When I route I should get
|
||||||
|
| from | to | route | speed |
|
||||||
|
| a | b | ab | 47 km/h +- 1 |
|
||||||
|
| b | c | bc | 47 km/h +- 1 |
|
||||||
|
|
||||||
|
Scenario: Car - Advisory speed overwrites backwards maxspeed
|
||||||
|
Given the node map
|
||||||
|
| a | b | c |
|
||||||
|
|
||||||
|
And the ways
|
||||||
|
| nodes | highway | maxspeed:backward | maxspeed:advisory:backward |
|
||||||
|
| ab | residential | 90 | 45 |
|
||||||
|
| bc | residential | | 45 |
|
||||||
|
|
||||||
|
When I route I should get
|
||||||
|
| from | to | route | speed |
|
||||||
|
| b | a | ab | 47 km/h +- 1 |
|
||||||
|
| c | b | bc | 47 km/h +- 1 |
|
||||||
|
|
||||||
|
Scenario: Car - Directional advisory speeds play nice with eachother
|
||||||
|
Given the node map
|
||||||
|
| a | b | c |
|
||||||
|
|
||||||
|
And the ways
|
||||||
|
| nodes | highway | maxspeed:advisory | maxspeed:advisory:forward | maxspeed:advisory:backward |
|
||||||
|
| ab | residential | 90 | 45 | 60 |
|
||||||
|
| bc | residential | 90 | 60 | 45 |
|
||||||
|
|
||||||
|
When I route I should get
|
||||||
|
| from | to | route | speed |
|
||||||
|
| a | b | ab | 47 km/h +- 1 |
|
||||||
|
| b | a | ab | 59 km/h +- 1 |
|
||||||
|
| b | c | bc | 59 km/h +- 1 |
|
||||||
|
| c | b | bc | 47 km/h +- 1 |
|
||||||
|
|
||||||
|
|
@ -391,6 +391,29 @@ function way_function (way, result)
|
|||||||
result.backward_speed = maxspeed_backward
|
result.backward_speed = maxspeed_backward
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Override speed settings if advisory forward/backward maxspeeds are given
|
||||||
|
local advisory_speed = parse_maxspeed(way:get_value_by_key("maxspeed:advisory"))
|
||||||
|
local advisory_forward = parse_maxspeed(way:get_value_by_key("maxspeed:advisory:forward"))
|
||||||
|
local advisory_backward = parse_maxspeed(way:get_value_by_key("maxspeed:advisory:backward"))
|
||||||
|
-- apply bi-directional advisory speed first
|
||||||
|
if advisory_speed and advisory_speed > 0 then
|
||||||
|
if 0 ~= result.forward_mode then
|
||||||
|
result.forward_speed = advisory_speed
|
||||||
|
end
|
||||||
|
if 0 ~= result.backward_mode then
|
||||||
|
result.backward_speed = advisory_speed
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if advisory_forward and advisory_forward > 0 then
|
||||||
|
if 0 ~= result.forward_mode and 0 ~= result.backward_mode then
|
||||||
|
result.backward_speed = result.forward_speed
|
||||||
|
end
|
||||||
|
result.forward_speed = advisory_forward
|
||||||
|
end
|
||||||
|
if advisory_backward and advisory_backward > 0 then
|
||||||
|
result.backward_speed = advisory_backward
|
||||||
|
end
|
||||||
|
|
||||||
local width = math.huge
|
local width = math.huge
|
||||||
local lanes = math.huge
|
local lanes = math.huge
|
||||||
if result.forward_speed > 0 or result.backward_speed > 0 then
|
if result.forward_speed > 0 or result.backward_speed > 0 then
|
||||||
|
Loading…
Reference in New Issue
Block a user