test maxspeed forward/backward

This commit is contained in:
Emil Tin 2013-01-19 13:04:58 +01:00 committed by DennisOSRM
parent 3595ac08f7
commit 4f9c422e2f
4 changed files with 110 additions and 34 deletions

View File

@ -32,26 +32,3 @@ Feature: Car - Max speed restrictions
| from | to | route | time |
| a | b | ab | 144s ~10% |
| b | c | bc | 144s ~10% |
@oppposite @todo
Scenario: Car - Forward/backward maxspeed
Given the node map
| a | b | c | d | e |
And the ways
| nodes | highway | maxspeed:forward | maxspeed:backward |
| ab | primary | | |
| bc | primart | 18 | 9 |
| cd | primart | | 9 |
| de | primart | 9 | |
When I route I should get
| from | to | route | time |
| a | b | ab | 10s |
| b | a | ab | 10s |
| b | c | bc | 20s |
| c | b | bc | 40s |
| c | d | cd | 10s |
| d | c | cd | 20s |
| d | e | de | 20s |
| e | d | de | 10s |

View File

@ -0,0 +1,70 @@
@routing @maxspeed @testbot
Feature: Car - Max speed restrictions
Background: Use specific speeds
Given the profile "testbot"
Scenario: Testbot - Respect maxspeeds when lower that way type speed
Given the node map
| a | b | c | d |
And the ways
| nodes | maxspeed |
| ab | |
| bc | 24 |
| cd | 18 |
When I route I should get
| from | to | route | time |
| a | b | ab | 10s +-1 |
| b | a | ab | 10s +-1 |
| b | c | bc | 15s +-1 |
| c | b | bc | 15s +-1 |
| c | d | cd | 20s +-1 |
| d | c | cd | 20s +-1 |
Scenario: Testbot - Ignore maxspeed when higher than way speed
Given the node map
| a | b | c |
And the ways
| nodes | maxspeed |
| ab | |
| bc | 200 |
When I route I should get
| from | to | route | time |
| a | b | ab | 20s +-1 |
| b | c | bc | 20s +-1 |
@opposite
Scenario: Testbot - Forward/backward maxspeed
Given the node map
| a | b | c | d | e | f | g | h |
And the ways
| nodes | maxspeed | maxspeed:forward | maxspeed:backward |
| ab | | | |
| bc | 18 | | |
| cd | | 18 | |
| de | | | 18 |
| ef | 9 | 18 | |
| fg | 9 | | 18 |
| gh | 9 | 24 | 18 |
When I route I should get
| from | to | route | time |
| a | b | ab | 10s +-1 |
| b | a | ab | 10s +-1 |
| b | c | bc | 20s +-1 |
| c | b | bc | 20s +-1 |
| c | d | cd | 20s +-1 |
| d | c | cd | 10s +-1 |
| d | e | de | 10s +-1 |
| e | d | de | 20s +-1 |
| e | f | ef | 20s +-1 |
| f | e | ef | 10s +-1 |
| f | g | fg | 10s +-1 |
| g | f | fg | 20s +-1 |
| g | h | gh | 15s +-1 |
| h | g | gh | 10s +-1 |

View File

@ -1,4 +1,4 @@
@routing @opposite
@routing @testbot @opposite
Feature: Separate settings for forward/backward direction
Background:

View File

@ -23,6 +23,18 @@ ignore_areas = true -- future feature
traffic_signal_penalty = 7 -- seconds
u_turn_penalty = 20
function limit_speed(speed, limits)
-- don't use ipairs(), since it stops at the first nil value
for i=1, #limits do
limit = limits[i]
if limit ~= nil and limit > 0 then
if limit < speed then
return limit -- stop at first speedlimit that's smaller than speed
end
end
end
return speed
end
function node_function (node)
local traffic_signal = node.tags:Find("highway")
@ -45,6 +57,15 @@ function way_function (way, numberOfNodesInWay)
local oneway = way.tags:Find("oneway")
local route = way.tags:Find("route")
local duration = way.tags:Find("duration")
local maxspeed = tonumber(way.tags:Find ( "maxspeed"))
local maxspeed_forward = tonumber(way.tags:Find( "maxspeed:forward"))
local maxspeed_backward = tonumber(way.tags:Find( "maxspeed:backward"))
print('---')
print(name)
print(tostring(maxspeed))
print(tostring(maxspeed_forward))
print(tostring(maxspeed_backward))
way.name = name
@ -54,12 +75,20 @@ function way_function (way, numberOfNodesInWay)
way.is_duration_set = true
else
way.speed = speed_profile[highway] or speed_profile['default']
end
if(highway == "river") then
if highway == "river" then
local temp_speed = way.speed;
way.speed = temp_speed*3/2
way.backward_speed = temp_speed*2/3
else
way.backward_speed = way.speed
end
way.speed = limit_speed( way.speed, {maxspeed_forward, maxspeed} )
way.backward_speed = limit_speed( way.backward_speed, {maxspeed_backward, maxspeed} )
-- print( 'limit forw: ' .. tostring(way.speed))
-- print( 'limit back: ' .. tostring(way.backward_speed))
end
if oneway == "no" or oneway == "0" or oneway == "false" then