support country in foot.lua and bicycle.lua
This commit is contained in:
parent
41fa6987ce
commit
f193b7cde0
89
features/bicycle/countrybikespeeds.feature
Normal file
89
features/bicycle/countrybikespeeds.feature
Normal file
@ -0,0 +1,89 @@
|
||||
@routing @bicycle @countrybikespeeds
|
||||
Feature: Testbot - Country Profile Selection
|
||||
|
||||
# Check that country data is being selected
|
||||
# CHE (a) does not support trunk on bike
|
||||
# FIN (c) does not support trunk on bike
|
||||
# GRC (m) and IRL (o) support bridleway
|
||||
# LIU (s) is not a country in list so looks like worldwide
|
||||
# so
|
||||
# GRC (m) and LIU (s) support trunk
|
||||
|
||||
Scenario: Profile Selection - highway chosen for country
|
||||
|
||||
Given the extract extra arguments "--location-dependent-data test/data/countrytest.geojson"
|
||||
And the partition extra arguments "--threads 1"
|
||||
And the customize extra arguments "--threads 1"
|
||||
|
||||
And the profile file "bicycle" initialized with
|
||||
"""
|
||||
profile.uselocationtags.countryspeeds = true
|
||||
"""
|
||||
|
||||
And the node locations
|
||||
| node | lat | lon |
|
||||
| a | 9.5 | 5.0 |
|
||||
| b | 9.5 | 10.0 |
|
||||
| c | 9.5 | 15.0 |
|
||||
| d | 9.0 | 5.0 |
|
||||
| e | 9.0 | 10.0 |
|
||||
| f | 9.0 | 15.0 |
|
||||
| g | 8.5 | 5.0 |
|
||||
| h | 8.5 | 10.0 |
|
||||
| i | 8.5 | 15.0 |
|
||||
| j | 8.0 | 5.0 |
|
||||
| k | 8.0 | 10.0 |
|
||||
| l | 8.0 | 15.0 |
|
||||
| m | 7.5 | 5.0 |
|
||||
| n | 7.5 | 10.0 |
|
||||
| o | 7.5 | 15.0 |
|
||||
| p | 7.0 | 5.0 |
|
||||
| q | 7.0 | 10.0 |
|
||||
| r | 7.0 | 15.0 |
|
||||
| s | 6.5 | 5.0 |
|
||||
| t | 6.5 | 10.0 |
|
||||
| u | 6.5 | 15.0 |
|
||||
|
||||
And the ways
|
||||
| nodes | highway | comment
|
||||
| ab | trunk | CHE - FIN no
|
||||
| bc | trunk |
|
||||
| cf | trunk | FIN - BEL no
|
||||
| fi | trunk |
|
||||
| fl | trunk |
|
||||
| or | trunk | IRL - world yes
|
||||
| ru | trunk |
|
||||
| mn | bridleway | GRC - IRL yes
|
||||
| no | bridleway |
|
||||
| mp | trunk | GRC - liu yes
|
||||
| ps | trunk |
|
||||
|
||||
And the partition extra arguments "--threads 1"
|
||||
And the customize extra arguments "--threads 1"
|
||||
|
||||
|
||||
When I route I should get
|
||||
| waypoints | route | status | message |
|
||||
| a,b,c | | 400 | Impossible route between points |
|
||||
| c,l | | 400 | Impossible route between points |
|
||||
| g,i | | 400 | Impossible route between points |
|
||||
| o,u | or,ru,ru | 200 | |
|
||||
| m,o | mn,no,no | 200 | |
|
||||
| m,s | mp,ps,ps | 200 | |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
39
features/bicycle/countrymotorroad.feature
Normal file
39
features/bicycle/countrymotorroad.feature
Normal file
@ -0,0 +1,39 @@
|
||||
@routing @bicycle @countrymotorroad
|
||||
Feature: Testbot - Country motorroad Selection
|
||||
|
||||
# Check that motorroad is avoided
|
||||
|
||||
Scenario: bicycle Profile Selection - motorroad avoided
|
||||
|
||||
Given the extract extra arguments "--threads 1"
|
||||
And the partition extra arguments "--threads 1"
|
||||
And the customize extra arguments "--threads 1"
|
||||
|
||||
And the profile file "bicycle" initialized with
|
||||
"""
|
||||
profile.uselocationtags.countryspeeds = true
|
||||
"""
|
||||
|
||||
And the node locations
|
||||
| node | lat | lon |
|
||||
| a | 9.5 | 5.0 |
|
||||
| b | 9.5 | 10.0 |
|
||||
| c | 9.5 | 15.0 |
|
||||
| d | 9.0 | 5.0 |
|
||||
| e | 9.0 | 10.0 |
|
||||
| f | 9.0 | 15.0 |
|
||||
|
||||
And the ways
|
||||
| nodes | highway | motorroad |
|
||||
| ab | trunk | yes |
|
||||
| bc | trunk | |
|
||||
| ad | trunk | |
|
||||
| de | trunk | |
|
||||
| ef | trunk | |
|
||||
| cf | trunk | |
|
||||
|
||||
When I route I should get
|
||||
| waypoints | route | status | message |
|
||||
| a,c | ad,de,ef,cf,cf | 200 | |
|
||||
| a,b | ad,de,ef,cf,bc,bc | 200 | |
|
||||
|
42
features/bicycle/countryway.feature
Normal file
42
features/bicycle/countryway.feature
Normal file
@ -0,0 +1,42 @@
|
||||
@routing @foot @countryway
|
||||
Feature: bicycle - Accessability of different way types with countryspeeds
|
||||
|
||||
Background:
|
||||
Given the profile file "bicycle" initialized with
|
||||
"""
|
||||
profile.uselocationtags.countryspeeds = true
|
||||
"""
|
||||
|
||||
Scenario: Countrybicycle - Basic access
|
||||
Then routability should be
|
||||
| highway | forw |
|
||||
| motorway | |
|
||||
| motorway_link | |
|
||||
| trunk | x |
|
||||
| trunk_link | x |
|
||||
| primary | x |
|
||||
| primary_link | x |
|
||||
| secondary | x |
|
||||
| secondary_link | x |
|
||||
| tertiary | x |
|
||||
| tertiary_link | x |
|
||||
| residential | x |
|
||||
| service | x |
|
||||
| unclassified | x |
|
||||
| living_street | x |
|
||||
| road | x |
|
||||
| track | x |
|
||||
| path | x |
|
||||
| footway | x |
|
||||
| pedestrian | x |
|
||||
| steps | x |
|
||||
| pier | x |
|
||||
| cycleway | x |
|
||||
| bridleway | |
|
||||
|
||||
Scenario: Country bicycle - Routability of man_made structures
|
||||
Then routability should be
|
||||
| highway | man_made | bothw |
|
||||
| (nil) | (nil) | |
|
||||
| (nil) | pier | x |
|
||||
|
55
features/foot/countrymotorroad.feature
Normal file
55
features/foot/countrymotorroad.feature
Normal file
@ -0,0 +1,55 @@
|
||||
@routing @foot @countrymotorroad
|
||||
Feature: Testbot - Country motorroad Selection
|
||||
|
||||
# Check that motorroad is avoided
|
||||
|
||||
Scenario: foot Profile Selection - motorroad avoided
|
||||
|
||||
Given the extract extra arguments "--threads 1"
|
||||
And the partition extra arguments "--threads 1"
|
||||
And the customize extra arguments "--threads 1"
|
||||
|
||||
And the profile file "foot" initialized with
|
||||
"""
|
||||
profile.uselocationtags.countryspeeds = true
|
||||
"""
|
||||
|
||||
And the node locations
|
||||
| node | lat | lon |
|
||||
| a | 9.5 | 5.0 |
|
||||
| b | 9.5 | 10.0 |
|
||||
| c | 9.5 | 15.0 |
|
||||
| d | 9.0 | 5.0 |
|
||||
| e | 9.0 | 10.0 |
|
||||
| f | 9.0 | 15.0 |
|
||||
|
||||
And the ways
|
||||
| nodes | highway | motorroad |
|
||||
| ab | trunk | yes |
|
||||
| bc | trunk | |
|
||||
| ad | trunk | |
|
||||
| de | trunk | |
|
||||
| ef | trunk | |
|
||||
| cf | trunk | |
|
||||
|
||||
When I route I should get
|
||||
| waypoints | route | status | message |
|
||||
| a,c | ad,de,ef,cf,cf | 200 | |
|
||||
| a,b | ad,de,ef,cf,bc,bc | 200 | |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
85
features/foot/countryspeeds.feature
Normal file
85
features/foot/countryspeeds.feature
Normal file
@ -0,0 +1,85 @@
|
||||
@routing @foot @countryspeeds
|
||||
Feature: Testbot - Country Profile Selection
|
||||
|
||||
# Check that country data is being selected
|
||||
# CHE (a) and FIN (c) support foot on cycleway
|
||||
# FRA (g) does not support foot on cycleway
|
||||
# BEL (i) and FIN (c) support foot on cycleway
|
||||
# BEL (i) and IRL (o) support Bridleway
|
||||
# GRC (m) and IRL (o) support trunk and bridleway
|
||||
# LIU (s) is not a country in list so looks like worldwide
|
||||
# so
|
||||
# GRC (m) and LIU (s) support trunk
|
||||
# LIU (s) does not support cycleway or bridleway
|
||||
# Worldwide (u) is an area without boundaries (so like s)
|
||||
|
||||
Scenario: foot Profile Selection - highway chosen for country
|
||||
|
||||
Given the extract extra arguments "--threads 1 --location-dependent-data test/data/countrytest.geojson"
|
||||
And the partition extra arguments "--threads 1"
|
||||
And the customize extra arguments "--threads 1"
|
||||
|
||||
And the profile file "foot" initialized with
|
||||
"""
|
||||
profile.uselocationtags.countryspeeds = true
|
||||
"""
|
||||
|
||||
And the node locations
|
||||
| node | lat | lon |
|
||||
| a | 9.5 | 5.0 |
|
||||
| b | 9.5 | 10.0 |
|
||||
| c | 9.5 | 15.0 |
|
||||
| d | 9.0 | 5.0 |
|
||||
| e | 9.0 | 10.0 |
|
||||
| f | 9.0 | 15.0 |
|
||||
| g | 8.5 | 5.0 |
|
||||
| h | 8.5 | 10.0 |
|
||||
| i | 8.5 | 15.0 |
|
||||
| j | 8.0 | 5.0 |
|
||||
| k | 8.0 | 10.0 |
|
||||
| l | 8.0 | 15.0 |
|
||||
| m | 7.5 | 5.0 |
|
||||
| n | 7.5 | 10.0 |
|
||||
| o | 7.5 | 15.0 |
|
||||
| p | 7.0 | 5.0 |
|
||||
| q | 7.0 | 10.0 |
|
||||
| r | 7.0 | 15.0 |
|
||||
| s | 6.5 | 5.0 |
|
||||
| t | 6.5 | 10.0 |
|
||||
| u | 6.5 | 15.0 |
|
||||
|
||||
And the ways
|
||||
| nodes | highway | comment
|
||||
| ab | cycleway | CHE - FIN yes
|
||||
| bc | cycleway |
|
||||
| ad | cycleway | CHE - FRA no
|
||||
| dg | cycleway |
|
||||
| gj | cycleway |
|
||||
| cf | bridleway | FIN - BEL no
|
||||
| fi | bridleway |
|
||||
| gh | trunk | FRA - BEL no
|
||||
| hi | trunk |
|
||||
| il | bridleway | BEL - IRL yes
|
||||
| lo | bridleway |
|
||||
| or | trunk | IRL - world yes
|
||||
| ru | trunk |
|
||||
| mn | trunk | GRC - IRL yes
|
||||
| no | trunk |
|
||||
| mp | trunk | GRC - liu yes
|
||||
| ps | trunk |
|
||||
|
||||
And the partition extra arguments "--threads 1"
|
||||
And the customize extra arguments "--threads 1"
|
||||
|
||||
|
||||
When I route I should get
|
||||
| waypoints | route | status | message |
|
||||
| a,c | ab,bc,bc | 200 | |
|
||||
| a,j | | 400 | Impossible route between points |
|
||||
| c,i | | 400 | Impossible route between points |
|
||||
| g,i | | 400 | Impossible route between points |
|
||||
| i,o | il,lo,lo | 200 | |
|
||||
| o,u | or,ru,ru | 200 | |
|
||||
| m,o | mn,no,no | 200 | |
|
||||
| m,s | mp,ps,ps | 200 | |
|
||||
|
41
features/foot/countryway.feature
Normal file
41
features/foot/countryway.feature
Normal file
@ -0,0 +1,41 @@
|
||||
@routing @foot @countryway
|
||||
Feature: foot - Accessability of different way types with countryspeeds
|
||||
|
||||
Background:
|
||||
Given the profile file "foot" initialized with
|
||||
"""
|
||||
profile.uselocationtags.countryspeeds = true
|
||||
"""
|
||||
|
||||
Scenario: Countryfoot - Basic access
|
||||
Then routability should be
|
||||
| highway | forw |
|
||||
| motorway | |
|
||||
| motorway_link | |
|
||||
| trunk | x |
|
||||
| trunk_link | x |
|
||||
| primary | x |
|
||||
| primary_link | x |
|
||||
| secondary | x |
|
||||
| secondary_link | x |
|
||||
| tertiary | x |
|
||||
| tertiary_link | x |
|
||||
| residential | x |
|
||||
| service | x |
|
||||
| unclassified | x |
|
||||
| living_street | x |
|
||||
| road | x |
|
||||
| track | x |
|
||||
| path | x |
|
||||
| footway | x |
|
||||
| pedestrian | x |
|
||||
| steps | x |
|
||||
| pier | x |
|
||||
| cycleway | |
|
||||
| bridleway | |
|
||||
|
||||
Scenario: Countryfoot - Basic access
|
||||
Then routability should be
|
||||
| highway | leisure | forw |
|
||||
| (nil) | track | x |
|
||||
|
@ -7,6 +7,7 @@ Sequence = require('lib/sequence')
|
||||
Handlers = require("lib/way_handlers")
|
||||
TrafficSignal = require("lib/traffic_signal")
|
||||
find_access_tag = require("lib/access").find_access_tag
|
||||
country_speeds = require("lib/country_speeds")
|
||||
limit = require("lib/maxspeed").limit
|
||||
Measure = require("lib/measure")
|
||||
|
||||
@ -27,6 +28,7 @@ function setup()
|
||||
mode_change_penalty = 30,
|
||||
},
|
||||
|
||||
profile = 'bicycle',
|
||||
default_mode = mode.cycling,
|
||||
default_speed = default_speed,
|
||||
walking_speed = walking_speed,
|
||||
@ -217,7 +219,13 @@ function setup()
|
||||
avoid = Set {
|
||||
'impassable',
|
||||
'construction',
|
||||
'proposed'
|
||||
'proposed',
|
||||
'motorroad'
|
||||
},
|
||||
|
||||
uselocationtags = Set
|
||||
{
|
||||
-- 'countryspeeds'
|
||||
}
|
||||
}
|
||||
end
|
||||
@ -315,11 +323,23 @@ function handle_bicycle_tags(profile,way,result,data)
|
||||
safety_handler(profile,way,result,data)
|
||||
end
|
||||
|
||||
|
||||
|
||||
function speed_handler(profile,way,result,data)
|
||||
|
||||
data.way_type_allows_pushing = false
|
||||
local extra_speeds
|
||||
local extraspeed = false
|
||||
|
||||
if profile.uselocationtags and profile.uselocationtags.countryspeeds then
|
||||
extra_speeds = country_speeds.getAccessProfile(data, profile.profile)
|
||||
if extra_speeds then
|
||||
if extra_speeds.highway[data.highway] then
|
||||
extraspeed = extra_speeds.highway[data.highway]
|
||||
if extraspeed == -1 then
|
||||
extraspeed = false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- speed
|
||||
local bridge_speed = profile.bridge_speeds[data.bridge]
|
||||
@ -362,6 +382,12 @@ function speed_handler(profile,way,result,data)
|
||||
result.forward_speed = profile.amenity_speeds[data.amenity]
|
||||
result.backward_speed = profile.amenity_speeds[data.amenity]
|
||||
data.way_type_allows_pushing = true
|
||||
elseif extraspeed then
|
||||
if extraspeed ~= -1 then
|
||||
result.forward_speed = extraspeed
|
||||
result.backward_speed = extraspeed
|
||||
data.way_type_allows_pushing = true
|
||||
end
|
||||
elseif profile.bicycle_speeds[data.highway] then
|
||||
-- regular ways
|
||||
result.forward_speed = profile.bicycle_speeds[data.highway]
|
||||
@ -606,6 +632,10 @@ function process_way(profile, way, result)
|
||||
implied_oneway = false
|
||||
}
|
||||
|
||||
if profile.uselocationtags and profile.uselocationtags.countryspeeds then
|
||||
data.location = country_speeds.getcountrytag(way)
|
||||
end
|
||||
|
||||
local handlers = Sequence {
|
||||
-- set the default mode for this profile. if can be changed later
|
||||
-- in case it turns we're e.g. on a ferry
|
||||
|
@ -6,6 +6,7 @@ Set = require('lib/set')
|
||||
Sequence = require('lib/sequence')
|
||||
Handlers = require("lib/way_handlers")
|
||||
find_access_tag = require("lib/access").find_access_tag
|
||||
country_speeds = require("lib/country_speeds")
|
||||
|
||||
function setup()
|
||||
local walking_speed = 5
|
||||
@ -20,6 +21,7 @@ function setup()
|
||||
use_turn_restrictions = false,
|
||||
},
|
||||
|
||||
profile = 'foot',
|
||||
default_mode = mode.walking,
|
||||
default_speed = walking_speed,
|
||||
oneway_handling = 'specific', -- respect 'oneway:foot' but not 'oneway'
|
||||
@ -70,10 +72,11 @@ function setup()
|
||||
|
||||
avoid = Set {
|
||||
'impassable',
|
||||
'proposed'
|
||||
'proposed',
|
||||
'motorroad'
|
||||
},
|
||||
|
||||
speeds = Sequence {
|
||||
hwyspeeds = Sequence {
|
||||
highway = {
|
||||
primary = walking_speed,
|
||||
primary_link = walking_speed,
|
||||
@ -94,6 +97,9 @@ function setup()
|
||||
footway = walking_speed,
|
||||
pier = walking_speed,
|
||||
},
|
||||
},
|
||||
|
||||
otherspeeds = Sequence {
|
||||
|
||||
railway = {
|
||||
platform = walking_speed
|
||||
@ -132,6 +138,11 @@ function setup()
|
||||
},
|
||||
|
||||
smoothness_speeds = {
|
||||
},
|
||||
|
||||
uselocationtags = Set
|
||||
{
|
||||
-- 'countryspeeds'
|
||||
}
|
||||
}
|
||||
end
|
||||
@ -198,6 +209,12 @@ function process_way(profile, way, result)
|
||||
if next(data) == nil then -- is the data table empty?
|
||||
return
|
||||
end
|
||||
local speedhandler = WayHandlers.speed
|
||||
|
||||
if profile.uselocationtags and profile.uselocationtags.countryspeeds then
|
||||
data.location = country_speeds.getcountrytag(way)
|
||||
speedhandler =country_speeds.wayspeed
|
||||
end
|
||||
|
||||
local handlers = Sequence {
|
||||
-- set the default mode for this profile. if can be changed later
|
||||
@ -224,7 +241,7 @@ function process_way(profile, way, result)
|
||||
WayHandlers.movables,
|
||||
|
||||
-- compute speed taking into account way type, maxspeed tags, etc.
|
||||
WayHandlers.speed,
|
||||
speedhandler,
|
||||
WayHandlers.surface,
|
||||
|
||||
-- handle turn lanes and road classification, used for guidance
|
||||
|
@ -274,8 +274,27 @@ function WayHandlers.speed(profile,way,result,data)
|
||||
return -- abort if already set, eg. by a route
|
||||
end
|
||||
|
||||
local key,value,speed = Tags.get_constant_by_key_value(way,profile.speeds)
|
||||
local wayspeeds
|
||||
if profile.speeds then
|
||||
wayspeeds = profile.speeds
|
||||
elseif profile.hwyspeeds then
|
||||
wayspeeds = profile.hwyspeeds
|
||||
else
|
||||
return false
|
||||
end
|
||||
|
||||
local key,value,speed = Tags.get_constant_by_key_value(way,wayspeeds)
|
||||
|
||||
if speed then
|
||||
-- set speed by way type
|
||||
result.forward_speed = speed
|
||||
result.backward_speed = speed
|
||||
else
|
||||
-- check for other speeds
|
||||
if profile.otherspeeds then
|
||||
key,value,speed = Tags.get_constant_by_key_value(way,profile.otherspeeds)
|
||||
end
|
||||
end
|
||||
if speed then
|
||||
-- set speed by way type
|
||||
result.forward_speed = speed
|
||||
|
Loading…
Reference in New Issue
Block a user