surface, tracktype, smoothness tags in car profile

This commit is contained in:
Emil Tin 2014-03-24 13:44:23 +01:00
parent 5653516b32
commit 0df81c49d5
2 changed files with 216 additions and 1 deletions

View File

@ -0,0 +1,141 @@
@routing @car @surface
Feature: Car - Surfaces
Background:
Given the profile "car"
Scenario: Car - Routeability of tracktype tags
Then routability should be
| highway | tracktype | bothw |
| trunk | grade1 | x |
| trunk | grade2 | x |
| trunk | grade3 | x |
| trunk | grade4 | x |
| trunk | grade5 | x |
| trunk | nonsense | x |
Scenario: Car - Routability of smoothness tags
Then routability should be
| highway | smoothness | bothw |
| trunk | excellent | x |
| trunk | good | x |
| trunk | intermediate | x |
| trunk | bad | x |
| trunk | very_bad | x |
| trunk | horrible | x |
| trunk | very_horrible | x |
| trunk | impassable | |
| trunk | nonsense | x |
Scenario: Car - Routabiliy of surface tags
Then routability should be
| highway | surface | bothw |
| trunk | asphalt | x |
| trunk | sett | x |
| trunk | gravel | x |
| trunk | nonsense | x |
Scenario: Car - Good surfaces should not grant access
Then routability should be
| highway | access | tracktype | smoothness | surface | forw | backw |
| motorway | | | | | x | |
| motorway | no | grade1 | excellent | asphalt | | |
| motorway | private | grade1 | excellent | asphalt | | |
| motorway | agricultural | grade1 | excellent | asphalt | | |
| motorway | forestry | grade1 | excellent | asphalt | | |
| motorway | emergency | grade1 | excellent | asphalt | | |
| primary | | | | | x | x |
| primary | no | grade1 | excellent | asphalt | | |
| primary | private | grade1 | excellent | asphalt | | |
| primary | agricultural | grade1 | excellent | asphalt | | |
| primary | forestry | grade1 | excellent | asphalt | | |
| primary | emergency | grade1 | excellent | asphalt | | |
Scenario: Car - Impassable surfaces should deny access
Then routability should be
| highway | access | smoothness | forw | backw |
| motorway | | impassable | | |
| motorway | yes | | x | |
| motorway | yes | impassable | | |
| primary | | impassable | | |
| primary | yes | | x | x |
| primary | yes | impassable | | |
Scenario: Car - Surface should reduce speed
Then routability should be
| highway | oneway | surface | forw | backw |
| motorway | no | | 72 km/h +-1 | 72 km/h +-1 |
| motorway | no | asphalt | 72 km/h +-1 | 72 km/h +-1 |
| motorway | no | concrete | 72 km/h +-1 | 72 km/h +-1 |
| motorway | no | concrete:plates | 72 km/h +-1 | 72 km/h +-1 |
| motorway | no | concrete:lanes | 72 km/h +-1 | 72 km/h +-1 |
| motorway | no | paved | 72 km/h +-1 | 72 km/h +-1 |
| motorway | no | cement | 65 km/h +-1 | 65 km/h +-1 |
| motorway | no | compacted | 65 km/h +-1 | 65 km/h +-1 |
| motorway | no | fine_gravel | 65 km/h +-1 | 65 km/h +-1 |
| motorway | no | paving_stones | 48 km/h +-1 | 48 km/h +-1 |
| motorway | no | metal | 48 km/h +-1 | 48 km/h +-1 |
| motorway | no | bricks | 48 km/h +-1 | 48 km/h +-1 |
| motorway | no | grass | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | wood | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | sett | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | grass_paver | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | gravel | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | unpaved | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | ground | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | dirt | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | pebblestone | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | tartan | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | cobblestone | 24 km/h +-1 | 24 km/h +-1 |
| motorway | no | clay | 24 km/h +-1 | 24 km/h +-1 |
| motorway | no | earth | 16 km/h +-1 | 16 km/h +-1 |
| motorway | no | stone | 16 km/h +-1 | 16 km/h +-1 |
| motorway | no | rocky | 16 km/h +-1 | 16 km/h +-1 |
| motorway | no | sand | 16 km/h +-1 | 16 km/h +-1 |
Scenario: Car - Tracktypes should reduce speed
Then routability should be
| highway | oneway | tracktype | forw | backw |
| motorway | no | | 72 km/h +-1 | 72 km/h +-1 |
| motorway | no | grade1 | 48 km/h +-1 | 48 km/h +-1 |
| motorway | no | grade2 | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | grade3 | 24 km/h +-1 | 24 km/h +-1 |
| motorway | no | grade4 | 20 km/h +-1 | 20 km/h +-1 |
| motorway | no | grade5 | 16 km/h +-1 | 16 km/h +-1 |
Scenario: Car - Smoothness should reduce speed
Then routability should be
| highway | oneway | smoothness | forw | backw |
| motorway | no | | 72 km/h +-1 | 72 km/h +-1 |
| motorway | no | intermediate | 65 km/h +-1 | 65 km/h +-1 |
| motorway | no | bad | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | very_bad | 16 km/h +-1 | 16 km/h +-1 |
| motorway | no | horrible | 8 km/h +-1 | 8 km/h +-1 |
| motorway | no | very_horrible | 4 km/h +-1 | 4 km/h +-1 |
Scenario: Car - Combination of surface tags should use lowest speed
Then routability should be
| highway | oneway | tracktype | surface | smoothness | backw | forw |
| motorway | no | | | | 72 km/h | 72 km/h |
| service | no | grade1 | asphalt | excellent | 12 km/h | 12 km/h |
| motorway | no | grade5 | asphalt | excellent | 16 km/h | 16 km/h |
| motorway | no | grade1 | mud | excellent | 8 km/h | 8 km/h |
| motorway | no | grade1 | asphalt | very_horrible | 4 km/h | 4 km/h |
| service | no | grade5 | mud | very_horrible | 4 km/h | 4 km/h |
Scenario: Car - Surfaces should not affect oneway direction
Then routability should be
| highway | oneway | tracktype | smoothness | surface | forw | backw |
| primary | | grade1 | excellent | asphalt | x | x |
| primary | | grade5 | very_bad | mud | x | x |
| primary | | nonsense | nonsense | nonsense | x | x |
| primary | no | grade1 | excellent | asphalt | x | x |
| primary | no | grade5 | very_bad | mud | x | x |
| primary | no | nonsense | nonsense | nonsense | x | x |
| primary | yes | grade1 | excellent | asphalt | x | |
| primary | yes | grade5 | very_bad | mud | x | |
| primary | yes | nonsense | nonsense | nonsense | x | |
| primary | -1 | grade1 | excellent | asphalt | | x |
| primary | -1 | grade5 | very_bad | mud | | x |
| primary | -1 | nonsense | nonsense | nonsense | | x |

View File

@ -32,6 +32,63 @@ speed_profile = {
["default"] = 10
}
-- surface/trackype/smoothness speeds was estimated from
-- looking the the photos at the relevant wiki pages
surface_speeds = {
["asphalt"] = 400,
["concrete"] = 200,
["concrete:plates"] = 200,
["concrete:lanes"] = 200,
["paved"] = 200,
["cement"] = 80,
["compacted"] = 80,
["fine_gravel"] = 80,
["paving_stones"] = 60,
["metal"] = 60,
["bricks"] = 60,
["grass"] = 40,
["wood"] = 40,
["sett"] = 40,
["grass_paver"] = 40,
["gravel"] = 40,
["unpaved"] = 40,
["ground"] = 40,
["dirt"] = 40,
["pebblestone"] = 40,
["tartan"] = 40,
["cobblestone"] = 30,
["clay"] = 30,
["earth"] = 20,
["stone"] = 20,
["rocky"] = 20,
["sand"] = 20,
["mud"] = 10
}
tracktype_speeds = {
["grade1"] = 60,
["grade2"] = 40,
["grade3"] = 30,
["grade4"] = 25,
["grade5"] = 20
}
smoothness_speeds = {
["intermediate"] = 80,
["bad"] = 40,
["very_bad"] = 20,
["horrible"] = 10,
["very_horrible"] = 5,
["impassable"] = 0
}
-- http://wiki.openstreetmap.org/wiki/Speed_limits
maxspeed_table_default = {
["urban"] = 50,
@ -64,7 +121,6 @@ maxspeed_table = {
traffic_signal_penalty = 2
-- End of globals
local take_minimum_of_speeds = false
local obey_oneway = true
local obey_bollards = true
@ -256,6 +312,24 @@ function way_function (way)
return
end
-- reduce speed on bad surfaces
local surface = way.tags:Find("surface")
local tracktype = way.tags:Find("tracktype")
local smoothness = way.tags:Find("smoothness")
if surface and surface_speeds[surface] then
way.forward_speed = math.min(surface_speeds[surface], way.forward_speed)
way.backward_speed = math.min(surface_speeds[surface], way.backward_speed)
end
if tracktype and tracktype_speeds[tracktype] then
way.forward_speed = math.min(tracktype_speeds[tracktype], way.forward_speed)
way.backward_speed = math.min(tracktype_speeds[tracktype], way.backward_speed)
end
if smoothness and smoothness_speeds[smoothness] then
way.forward_speed = math.min(smoothness_speeds[smoothness], way.forward_speed)
way.backward_speed = math.min(smoothness_speeds[smoothness], way.backward_speed)
end
-- parse the remaining tags
local name = way.tags:Find("name")
local ref = way.tags:Find("ref")