1034 lines
40 KiB
Gherkin
1034 lines
40 KiB
Gherkin
|
@routing @car @restrictions
|
||
|
|
||
|
Feature: Car - Multiple Via Turn restrictions
|
||
|
|
||
|
Background: Use car routing
|
||
|
Given the profile "car"
|
||
|
Given a grid size of 200 meters
|
||
|
|
||
|
|
||
|
@restriction-way @no_turning @overlap
|
||
|
Scenario: Car - Node restriction inside multiple via restriction
|
||
|
Given the node map
|
||
|
"""
|
||
|
1 2 3 4 5
|
||
|
a---b---c---d---e---------f---------g
|
||
|
| | |
|
||
|
|7 |8 |9
|
||
|
| | |
|
||
|
x---h---------i---------j
|
||
|
"""
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway | name |
|
||
|
| ab | yes | forward |
|
||
|
| bc | yes | forward |
|
||
|
| cd | yes | forward |
|
||
|
| de | yes | forward |
|
||
|
| ef | yes | forward |
|
||
|
| fg | yes | forward |
|
||
|
| eh | yes | first |
|
||
|
| fi | yes | second |
|
||
|
| gj | yes | third |
|
||
|
| ih | yes | back |
|
||
|
| ji | yes | back |
|
||
|
| hx | yes | back |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction |
|
||
|
| restriction | ab | bc,cd,de,ef | fi | no_right_turn |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | node:via | way:to | restriction |
|
||
|
| restriction | de | e | eh | no_right_turn |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route |
|
||
|
| 1 | x | forward,third,back,back |
|
||
|
| 2 | x | forward,second,back,back |
|
||
|
| 3 | x | forward,second,back,back |
|
||
|
| 4 | x | forward,second,back,back |
|
||
|
| 5 | x | forward,third,back,back |
|
||
|
| 7 | x | first,back,back |
|
||
|
| 8 | x | second,back,back |
|
||
|
| 9 | x | third,back,back |
|
||
|
|
||
|
|
||
|
@restriction-way @no_turning @overlap @conditionals
|
||
|
Scenario: Car - Conditional node restriction inside conditional multiple via restriction
|
||
|
Given the origin -9.2972,10.3811
|
||
|
# coordinate in Guinée, a country that observes GMT year round
|
||
|
Given the extract extra arguments "--parse-conditional-restrictions"
|
||
|
# time stamp for 10am on Tues, 02 May 2017 GMT
|
||
|
Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
|
||
|
Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
|
||
|
Given the node map
|
||
|
"""
|
||
|
1 2 3 4 5
|
||
|
a---b---c---d---e---------f---------g
|
||
|
| | |
|
||
|
|7 |8 |9
|
||
|
| | |
|
||
|
x---h---------i---------j
|
||
|
"""
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway | name |
|
||
|
| ab | yes | forward |
|
||
|
| bc | yes | forward |
|
||
|
| cd | yes | forward |
|
||
|
| de | yes | forward |
|
||
|
| ef | yes | forward |
|
||
|
| fg | yes | forward |
|
||
|
| eh | yes | first |
|
||
|
| fi | yes | second |
|
||
|
| gj | yes | third |
|
||
|
| ih | yes | back |
|
||
|
| ji | yes | back |
|
||
|
| hx | yes | back |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction:conditional |
|
||
|
| restriction | ab | bc,cd,de,ef | fi | no_right_turn @ (Mo-Fr 07:00-10:30) |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | node:via | way:to | restriction:conditional |
|
||
|
| restriction | de | e | eh | no_right_turn @ (Mo-Fr 07:00-10:30) |
|
||
|
| restriction | de | e | eh | only_right_turn @ (Sa-Su 07:00-10:30) |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route |
|
||
|
| 1 | x | forward,third,back,back |
|
||
|
| 2 | x | forward,second,back,back |
|
||
|
| 3 | x | forward,second,back,back |
|
||
|
| 4 | x | forward,second,back,back |
|
||
|
| 5 | x | forward,third,back,back |
|
||
|
| 7 | x | first,back,back |
|
||
|
| 8 | x | second,back,back |
|
||
|
| 9 | x | third,back,back |
|
||
|
|
||
|
|
||
|
@restriction-way @no_turning @overlap
|
||
|
Scenario: Car - Multiple via restriction inside multiple via restriction
|
||
|
Given the node map
|
||
|
"""
|
||
|
1 2 3 4 5
|
||
|
a---b---c---d---e---------f---------g
|
||
|
| | |
|
||
|
|7 |8 |9
|
||
|
| | |
|
||
|
x---h---------i---------j
|
||
|
"""
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway | name |
|
||
|
| ab | yes | forward |
|
||
|
| bc | yes | forward |
|
||
|
| cd | yes | forward |
|
||
|
| de | yes | forward |
|
||
|
| ef | yes | forward |
|
||
|
| fg | yes | forward |
|
||
|
| eh | yes | first |
|
||
|
| fi | yes | second |
|
||
|
| gj | yes | third |
|
||
|
| ih | yes | back |
|
||
|
| ji | yes | back |
|
||
|
| hx | yes | back |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction |
|
||
|
| restriction | ab | bc,cd,de,ef | fi | no_right_turn |
|
||
|
| restriction | bc | cd,de | eh | no_right_turn |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route |
|
||
|
| 1 | x | forward,third,back,back |
|
||
|
| 2 | x | forward,second,back,back |
|
||
|
| 3 | x | forward,first,back,back |
|
||
|
| 4 | x | forward,second,back,back |
|
||
|
| 5 | x | forward,third,back,back |
|
||
|
| 7 | x | first,back,back |
|
||
|
| 8 | x | second,back,back |
|
||
|
| 9 | x | third,back,back |
|
||
|
|
||
|
|
||
|
@restriction-way @no_turning @overlap @conditionals
|
||
|
Scenario: Car - Conditional multiple via restriction inside conditional multiple via restriction
|
||
|
|
||
|
Given a grid size of 200 meters
|
||
|
Given the origin -9.2972,10.3811
|
||
|
# coordinate in Guinée, a country that observes GMT year round
|
||
|
Given the extract extra arguments "--parse-conditional-restrictions"
|
||
|
# time stamp for 10am on Tues, 02 May 2017 GMT
|
||
|
Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
|
||
|
Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
|
||
|
Given the node map
|
||
|
|
||
|
"""
|
||
|
1 2 3 4 5
|
||
|
a---b---c---d---e---------f---------g
|
||
|
| | |
|
||
|
|7 |8 |9
|
||
|
| | |
|
||
|
x---h---------i---------j
|
||
|
"""
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway | name |
|
||
|
| ab | yes | forward |
|
||
|
| bc | yes | forward |
|
||
|
| cd | yes | forward |
|
||
|
| de | yes | forward |
|
||
|
| ef | yes | forward |
|
||
|
| fg | yes | forward |
|
||
|
| eh | yes | first |
|
||
|
| fi | yes | second |
|
||
|
| gj | yes | third |
|
||
|
| ih | yes | back |
|
||
|
| ji | yes | back |
|
||
|
| hx | yes | back |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction:conditional |
|
||
|
| restriction | ab | bc,cd,de,ef | fi | no_right_turn @ (Mo-Fr 07:00-10:30) |
|
||
|
| restriction | bc | cd,de | eh | no_right_turn @ (Mo-Fr 07:00-10:30) |
|
||
|
| restriction | bc | cd,de | eh | only_right_turn @ (Sa-Su 07:00-10:30) |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route |
|
||
|
| 1 | x | forward,third,back,back |
|
||
|
| 2 | x | forward,second,back,back |
|
||
|
| 3 | x | forward,first,back,back |
|
||
|
| 4 | x | forward,second,back,back |
|
||
|
| 5 | x | forward,third,back,back |
|
||
|
| 7 | x | first,back,back |
|
||
|
| 8 | x | second,back,back |
|
||
|
| 9 | x | third,back,back |
|
||
|
|
||
|
|
||
|
@restriction-way @only_turning @overlap
|
||
|
Scenario: Car - Overlapping multiple via restrictions
|
||
|
Given the node map
|
||
|
"""
|
||
|
a f j
|
||
|
| | |
|
||
|
b---d---e---i---k----m
|
||
|
| | |
|
||
|
c g l
|
||
|
"""
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway | name |
|
||
|
| ab | yes | down |
|
||
|
| cb | yes | up |
|
||
|
| bd | yes | right |
|
||
|
| de | yes | right |
|
||
|
| ef | yes | up |
|
||
|
| eg | yes | down |
|
||
|
| ei | yes | right |
|
||
|
| ik | yes | right |
|
||
|
| kj | yes | up |
|
||
|
| kl | yes | down |
|
||
|
| km | yes | right |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction |
|
||
|
| restriction | ab | bd,de | ei | only_straight_on |
|
||
|
| restriction | de | ei,ik | km | only_straight_on |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route |
|
||
|
| a | f | |
|
||
|
| a | g | |
|
||
|
| a | j | |
|
||
|
| a | l | |
|
||
|
| a | m | down,right,right |
|
||
|
| c | f | up,right,up,up |
|
||
|
| c | g | up,right,down,down |
|
||
|
| c | j | |
|
||
|
| c | l | |
|
||
|
| c | m | up,right,right |
|
||
|
| i | j | right,up,up |
|
||
|
| i | l | right,down,down |
|
||
|
| i | m | right,right |
|
||
|
|
||
|
|
||
|
@restriction-way @only_turning @overlap @conditionals
|
||
|
Scenario: Car - Overlapping conditional multiple via restrictions
|
||
|
Given a grid size of 200 meters
|
||
|
Given the origin -9.2972,10.3811
|
||
|
# coordinate in Guinée, a country that observes GMT year round
|
||
|
Given the extract extra arguments "--parse-conditional-restrictions"
|
||
|
# time stamp for 10am on Tues, 02 May 2017 GMT
|
||
|
Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
|
||
|
Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200"
|
||
|
Given the node map
|
||
|
"""
|
||
|
a f j
|
||
|
| | |
|
||
|
b---d---e---i---k----m
|
||
|
| | |
|
||
|
c g l
|
||
|
"""
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway | name |
|
||
|
| ab | yes | down |
|
||
|
| cb | yes | up |
|
||
|
| bd | yes | right |
|
||
|
| db | yes | left |
|
||
|
| de | yes | right |
|
||
|
| ed | yes | left |
|
||
|
| ef | yes | up |
|
||
|
| eg | yes | down |
|
||
|
| ei | yes | right |
|
||
|
| ie | yes | left |
|
||
|
| ik | yes | right |
|
||
|
| ki | yes | left |
|
||
|
| kj | yes | up |
|
||
|
| kl | yes | down |
|
||
|
| km | no | end |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction:conditional |
|
||
|
| restriction | ab | bd,de | ei | only_straight_on @ (Mo-Fr 07:00-10:30) |
|
||
|
| restriction | ab | bd,de | ef | only_left_turn @ (Sa-Su 07:00-10:30) |
|
||
|
| restriction | de | ei,ik | km | only_straight_on @ (Mo-Fr 07:00-10:30) |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route |
|
||
|
| a | f | down,right,end,end,left,up,up |
|
||
|
| a | g | down,right,end,end,left,down,down |
|
||
|
| a | j | down,right,end,end,up,up |
|
||
|
| a | l | down,right,end,end,down,down |
|
||
|
| a | m | down,right,end,end |
|
||
|
| c | f | up,right,up,up |
|
||
|
| c | g | up,right,down,down |
|
||
|
| c | j | up,right,end,end,up,up |
|
||
|
| c | l | up,right,end,end,down,down |
|
||
|
| c | m | up,right,end,end |
|
||
|
| i | j | right,up,up |
|
||
|
| i | l | right,down,down |
|
||
|
| i | m | right,end,end |
|
||
|
|
||
|
|
||
|
|
||
|
@restriction-way @only_turning @geometry
|
||
|
Scenario: Car - Multiple via restriction with non-compressable via geometry
|
||
|
Given the node map
|
||
|
"""
|
||
|
a---b---c---d---e---f---g---h
|
||
|
| | |
|
||
|
i j k
|
||
|
"""
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway | name |
|
||
|
| ab | yes | right |
|
||
|
| bcd | yes | right |
|
||
|
| defg | yes | right |
|
||
|
| ci | yes | down |
|
||
|
| ej | yes | down |
|
||
|
| gh | yes | end |
|
||
|
| gk | yes | down |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction |
|
||
|
| restriction | ab | bcd,defg | gh | only_straight_on |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route |
|
||
|
| a | h | right,end,end |
|
||
|
| a | k | |
|
||
|
|
||
|
@restriction-way @only_turning @geometry
|
||
|
Scenario: Car - Multiple via restriction with non-compressable from/to nodes
|
||
|
Given the node map
|
||
|
"""
|
||
|
a---b---c---d---e---f---g---h---i---j---k---l
|
||
|
| | | | |
|
||
|
m n o p q
|
||
|
"""
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway | name |
|
||
|
| abcdefg | yes | right |
|
||
|
| ghi | yes | right |
|
||
|
| ijkl | yes | end |
|
||
|
| cm | yes | down |
|
||
|
| en | yes | down |
|
||
|
| go | yes | down |
|
||
|
| ip | yes | down |
|
||
|
| kq | yes | down |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction |
|
||
|
| restriction | abcdefg | ghi | ijkl | only_straight_on |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route |
|
||
|
| a | l | right,end,end |
|
||
|
| a | p | |
|
||
|
|
||
|
@restriction-way @no_turning
|
||
|
Scenario: Car - Long unrestricted route and short restricted route
|
||
|
Given the node map
|
||
|
"""
|
||
|
a------------------------------------b
|
||
|
| |
|
||
|
c--d--e--f---------------------------
|
||
|
"""
|
||
|
|
||
|
And the ways
|
||
|
| nodes |
|
||
|
| ac |
|
||
|
| ab |
|
||
|
| bf |
|
||
|
| cd |
|
||
|
| de |
|
||
|
| ef |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction |
|
||
|
| restriction | ac | cd | de | no_straight_on |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route |
|
||
|
| a | f | ab,bf,bf |
|
||
|
|
||
|
|
||
|
@restriction-way @overlap @no_turning
|
||
|
Scenario: Car - Junction with multiple via u-turn restrictions
|
||
|
# Example: https://www.openstreetmap.org/#map=19/52.07399/5.09724
|
||
|
Given the node map
|
||
|
"""
|
||
|
a b
|
||
|
| |
|
||
|
c---d---e---f
|
||
|
| |
|
||
|
g---h---i---j
|
||
|
| |
|
||
|
k l
|
||
|
"""
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway | name |
|
||
|
| ad | yes | down |
|
||
|
| eb | yes | up |
|
||
|
| fe | yes | left |
|
||
|
| ij | yes | right |
|
||
|
| li | yes | up |
|
||
|
| hk | yes | down |
|
||
|
| gh | yes | right |
|
||
|
| dc | yes | left |
|
||
|
| dh | yes | down |
|
||
|
| hi | yes | right |
|
||
|
| ie | yes | up |
|
||
|
| ed | yes | left |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction |
|
||
|
| restriction | ad | dh,hi | ie | no_u_turn |
|
||
|
| restriction | li | ie,ed | dh | no_u_turn |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route |
|
||
|
| a | b | |
|
||
|
| a | c | down,left,left |
|
||
|
| a | k | down,down |
|
||
|
| a | j | down,right,right |
|
||
|
| f | b | left,up,up |
|
||
|
| f | c | left,left |
|
||
|
| f | k | left,down,down |
|
||
|
| f | j | left,down,right,right |
|
||
|
| l | b | up,up |
|
||
|
| l | c | up,left,left |
|
||
|
| l | k | |
|
||
|
| l | j | up,right,right |
|
||
|
| g | b | right,up,up |
|
||
|
| g | c | right,up,left,left |
|
||
|
| g | k | right,down,down |
|
||
|
| g | j | right,right |
|
||
|
|
||
|
|
||
|
@restriction-way @overlap @no_turning
|
||
|
Scenario: Car - Junction with multiple via u-turn restrictions, service roads
|
||
|
# Example: https://www.openstreetmap.org/#map=19/48.38566/10.88068
|
||
|
Given the node map
|
||
|
"""
|
||
|
a b
|
||
|
| |
|
||
|
c---d--e--f---g
|
||
|
| _/|
|
||
|
h__/ |
|
||
|
|\ \ |
|
||
|
i---j-k-l-m---n
|
||
|
| |
|
||
|
o p
|
||
|
"""
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway | name |
|
||
|
| ad | yes | down |
|
||
|
| fb | yes | up |
|
||
|
| gf | yes | left |
|
||
|
| mn | yes | right |
|
||
|
| pm | yes | up |
|
||
|
| jo | yes | down |
|
||
|
| ij | yes | right |
|
||
|
| dc | yes | left |
|
||
|
| dh | yes | down |
|
||
|
| hj | yes | down |
|
||
|
| jkl | yes | right |
|
||
|
| lm | yes | right |
|
||
|
| mf | yes | up |
|
||
|
| fe | yes | left |
|
||
|
| ed | yes | left |
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway | name | highway | access | psv |
|
||
|
| kh | yes | service | service | no | yes |
|
||
|
| lh | no | service | service | no | yes |
|
||
|
| fh | yes | service | service | no | yes |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction |
|
||
|
| restriction | hj | jkl,lm | mf | no_u_turn |
|
||
|
| restriction | lm | mf | fe | no_u_turn |
|
||
|
| restriction | mf | fe,ed | dh | no_u_turn |
|
||
|
| restriction | ed | dh,hj | jkl | no_u_turn |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route |
|
||
|
| a | b | |
|
||
|
| a | c | down,left,left |
|
||
|
| a | o | down,down |
|
||
|
| a | n | down,right,right |
|
||
|
| i | b | right,up,up |
|
||
|
| i | c | |
|
||
|
| i | o | right,down,down |
|
||
|
| i | n | right,right |
|
||
|
| p | b | up,up |
|
||
|
| p | c | up,left,left |
|
||
|
| p | o | |
|
||
|
| p | n | up,right,right |
|
||
|
| g | b | left,up,up |
|
||
|
| g | c | left,left |
|
||
|
| g | o | left,down,down |
|
||
|
| g | n | |
|
||
|
|
||
|
|
||
|
@restriction-way @overlap @no_turning
|
||
|
Scenario: Car - Junction with overlapping and duplicate multiple via restrictions
|
||
|
# Example: https://www.openstreetmap.org/#map=19/34.66291/33.01711
|
||
|
Given the profile file "car" initialized with
|
||
|
"""
|
||
|
profile.properties.left_hand_driving = true
|
||
|
"""
|
||
|
|
||
|
And the node map
|
||
|
"""
|
||
|
a b
|
||
|
| |
|
||
|
c---d---e---f
|
||
|
| |
|
||
|
g---h---i---j
|
||
|
| |
|
||
|
k l
|
||
|
"""
|
||
|
|
||
|
And the nodes
|
||
|
| node | highway |
|
||
|
| d | traffic_signals |
|
||
|
| e | traffic_signals |
|
||
|
| h | traffic_signals |
|
||
|
| i | traffic_signals |
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway | name |
|
||
|
| da | yes | up |
|
||
|
| be | yes | down |
|
||
|
| ef | yes | right |
|
||
|
| ji | yes | left |
|
||
|
| il | yes | down |
|
||
|
| kh | yes | up |
|
||
|
| hg | yes | left |
|
||
|
| cd | yes | right |
|
||
|
| hd | yes | up |
|
||
|
| ih | yes | left |
|
||
|
| ei | yes | down |
|
||
|
| de | yes | right |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction |
|
||
|
| restriction | be | ei,ih | hd | no_u_turn |
|
||
|
| restriction | ji | ih,hd | de | no_u_turn |
|
||
|
| restriction | kh | hd,de | ei | no_u_turn |
|
||
|
| restriction | cd | de,ei | ih | no_u_turn |
|
||
|
| restriction | hd | de | ei | no_u_turn |
|
||
|
| restriction | de | ei | ih | no_u_turn |
|
||
|
| restriction | ei | ih | hd | no_u_turn |
|
||
|
| restriction | ei | ih,hd | de | no_u_turn |
|
||
|
| restriction | ih | hd | de | no_u_turn |
|
||
|
| restriction | ih | hd,de | ei | no_u_turn |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route |
|
||
|
| b | a | |
|
||
|
| b | g | down,left,left |
|
||
|
| b | l | down,down |
|
||
|
| b | f | down,right,right |
|
||
|
| j | a | left,up,up |
|
||
|
| j | g | left,left |
|
||
|
| j | l | left,down,down |
|
||
|
| j | f | |
|
||
|
| k | a | up,up |
|
||
|
| k | g | up,left,left |
|
||
|
| k | l | |
|
||
|
| k | f | up,right,right |
|
||
|
| c | a | right,up,up |
|
||
|
| c | g | |
|
||
|
| c | l | right,down,down |
|
||
|
| c | f | right,right |
|
||
|
|
||
|
|
||
|
@restriction-way @no_turning
|
||
|
Scenario: Car - Junction with multiple via restriction to side road, traffic lights
|
||
|
# Example: https://www.openstreetmap.org/#map=19/48.23662/16.42545
|
||
|
Given the node map
|
||
|
"""
|
||
|
e---d
|
||
|
|
|
||
|
f---c---g
|
||
|
|
|
||
|
h---b---i
|
||
|
|
|
||
|
a
|
||
|
"""
|
||
|
|
||
|
And the nodes
|
||
|
| node | highway |
|
||
|
| c | traffic_signals |
|
||
|
| b | traffic_signals |
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway | name |
|
||
|
| ab | no | up |
|
||
|
| bc | no | up |
|
||
|
| cd | no | up |
|
||
|
| de | no | left |
|
||
|
| hb | yes | right |
|
||
|
| bi | yes | right |
|
||
|
| gc | yes | left |
|
||
|
| cf | yes | left |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction |
|
||
|
| restriction | ab | bc,cd | de | no_left_turn |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route |
|
||
|
| a | e | |
|
||
|
| a | f | up,left,left |
|
||
|
| a | g | |
|
||
|
| a | h | |
|
||
|
| a | i | up,right,right |
|
||
|
|
||
|
|
||
|
@restriction-way @overlap @no_turning
|
||
|
Scenario: Car - Many overlapping multiple via restrictions, traffic signals
|
||
|
# Example: https://www.openstreetmap.org/#map=19/48.76987/11.43410
|
||
|
Given the node map
|
||
|
"""
|
||
|
8 5
|
||
|
p______a_______n________o__x
|
||
|
1| | |
|
||
|
| \ /
|
||
|
r___q____b____ m
|
||
|
| \ \___ _/ 7
|
||
|
\ c _l____k__w
|
||
|
s \ _/ _/
|
||
|
\ _d/ __j
|
||
|
\ _/ \ _/
|
||
|
| ___g e_____i
|
||
|
v__t__/ _/ \ 4
|
||
|
6 2/ 3\
|
||
|
f h
|
||
|
"""
|
||
|
|
||
|
And the nodes
|
||
|
| node | highway |
|
||
|
| n | traffic_signals |
|
||
|
| m | traffic_signals |
|
||
|
| q | traffic_signals |
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway |
|
||
|
| on | yes |
|
||
|
| na | yes |
|
||
|
| ap | yes |
|
||
|
| pr | yes |
|
||
|
| rqb | yes |
|
||
|
| bl | yes |
|
||
|
| oml | yes |
|
||
|
| ld | yes |
|
||
|
| lk | yes |
|
||
|
| ba | yes |
|
||
|
| bcd | no |
|
||
|
| de | no |
|
||
|
| eh | no |
|
||
|
| ei | no |
|
||
|
| ejk | yes |
|
||
|
| rst | yes |
|
||
|
| dgt | yes |
|
||
|
| fe | yes |
|
||
|
| xo | yes |
|
||
|
| tv | yes |
|
||
|
| kw | yes |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction |
|
||
|
| restriction | pr | rqb,bcd | dgt | no_right_turn |
|
||
|
| restriction | rqb | bcd,de | ejk | no_left_turn |
|
||
|
| restriction | rqb | bcd | dgt | no_right_turn |
|
||
|
| restriction | fe | ed | dgt | no_u_turn |
|
||
|
| restriction | fe | ed,dcb | bl | no_right_turn |
|
||
|
| restriction | he | ed,dcb | bl | no_right_turn |
|
||
|
| restriction | oml | ld,de | ejk | no_u_turn |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | node:via | way:to | restriction |
|
||
|
| restriction | ap | p | pr | no_u_turn |
|
||
|
| restriction | rqb | b | ba | no_left_turn |
|
||
|
| restriction | ld | d | dcb | no_right_turn |
|
||
|
| restriction | oml | l | lk | no_left_turn |
|
||
|
| restriction | na | a | ab | no_left_turn |
|
||
|
| restriction | dcb | b | bl | no_right_turn |
|
||
|
| restriction | dcb | b | bcd | no_u_turn |
|
||
|
| restriction | bcd | d | dcb | no_u_turn |
|
||
|
| restriction | bl | l | ld | no_right_turn |
|
||
|
|
||
|
# Additional relations to prevent u-turns on small roads polluting the results
|
||
|
And the relations
|
||
|
| type | way:from | node:via | way:to | restriction |
|
||
|
| restriction | eh | h | he | no_u_turn |
|
||
|
| restriction | ei | i | ie | no_u_turn |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route | locations |
|
||
|
| 1 | 6 | pr,rst,tv,tv | _,r,t,_ |
|
||
|
| 1 | 3 | pr,rqb,bcd,de,eh,eh | _,r,b,d,e,_ |
|
||
|
| 1 | 4 | pr,rqb,bcd,de,ei,ei | _,r,b,d,e,_ |
|
||
|
| 1 | 7 | pr,rqb,bl,lk,kw,kw | _,r,b,l,k,_ |
|
||
|
| 1 | 8 | | |
|
||
|
| 2 | 6 | | |
|
||
|
| 2 | 3 | fe,eh,eh | _,e,_ |
|
||
|
| 2 | 4 | fe,ei,ei | _,e,_ |
|
||
|
| 2 | 7 | fe,ejk,kw,kw | _,e,k,_ |
|
||
|
| 2 | 8 | fe,de,bcd,ba,ap,ap | _,e,d,b,a,_ |
|
||
|
| 3 | 6 | eh,de,dgt,tv,tv | _,e,d,t,_ |
|
||
|
| 3 | 4 | eh,ei,ei | _,e,_ |
|
||
|
| 3 | 7 | eh,ejk,kw,kw | _,e,k,_ |
|
||
|
| 3 | 8 | eh,de,bcd,ba,ap,ap | _,e,d,b,a,_ |
|
||
|
| 4 | 6 | ei,de,dgt,tv,tv | _,e,d,t,_ |
|
||
|
| 4 | 3 | ei,eh,eh | _,e,_ |
|
||
|
| 4 | 7 | ei,ejk,kw,kw | _,e,k,_ |
|
||
|
| 4 | 8 | ei,de,bcd,ba,ap,ap | _,e,d,b,a,_ |
|
||
|
| 5 | 6 | xo,oml,ld,dgt,tv,tv | _,o,l,d,t,_ |
|
||
|
| 5 | 3 | xo,oml,ld,de,eh,eh | _,o,l,d,e,_ |
|
||
|
| 5 | 4 | xo,oml,ld,de,ei,ei | _,o,l,d,e,_ |
|
||
|
| 5 | 7 | | |
|
||
|
| 5 | 8 | xo,on,na,ap,ap | _,o,n,a,_ |
|
||
|
|
||
|
|
||
|
|
||
|
@restriction-way @overlap @no_turning
|
||
|
Scenario: Car - Multiple via restriction with start and end on same node
|
||
|
# Example: https://www.openstreetmap.org/#map=19/52.41988/16.96088
|
||
|
Given the node map
|
||
|
"""
|
||
|
|--g---f---e
|
||
|
a | |
|
||
|
|--b---c---d
|
||
|
|
||
|
"""
|
||
|
|
||
|
And the nodes
|
||
|
| node | highway |
|
||
|
| b | traffic_signals |
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway | name |
|
||
|
| abc | yes | enter |
|
||
|
| cd | yes | right |
|
||
|
| de | yes | up |
|
||
|
| ef | yes | left |
|
||
|
| fga | yes | exit |
|
||
|
| fc | yes | down |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction |
|
||
|
| restriction | abc | cd,de,ef | fga | no_u_turn |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route | locations |
|
||
|
| a | g | enter,right,up,left,down,right,up,left,exit,exit | a,c,d,e,f,c,d,e,f,g |
|
||
|
| b | a | enter,right,up,left,down,right,up,left,exit,exit | b,c,d,e,f,c,d,e,f,a |
|
||
|
# This is a correct but not within the spirit of the restriction.
|
||
|
# Does this indicate the restriction is not strong enough?
|
||
|
|
||
|
|
||
|
@restriction-way @no_turning
|
||
|
Scenario: Car - Multiple via restriction preventing bypassing main road
|
||
|
# Example: https://www.openstreetmap.org/#map=19/48.72429/21.25912
|
||
|
Given the node map
|
||
|
"""
|
||
|
a--b--c--d--e--f
|
||
|
\ |
|
||
|
--g--h--i--j
|
||
|
|
|
||
|
k
|
||
|
"""
|
||
|
|
||
|
And the nodes
|
||
|
| node | highway |
|
||
|
| d | traffic_signals |
|
||
|
| e | traffic_signals |
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway | name |
|
||
|
| ab | yes | main |
|
||
|
| bc | yes | main |
|
||
|
| cd | yes | main |
|
||
|
| de | yes | main |
|
||
|
| ef | yes | main |
|
||
|
| bg | yes | side |
|
||
|
| gh | yes | side |
|
||
|
| hi | yes | side |
|
||
|
| ij | yes | side |
|
||
|
| fj | yes | turn |
|
||
|
| jk | yes | turn |
|
||
|
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction |
|
||
|
| restriction | ab | bg,gh,hi,ij | jk | no_right_turn |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route |
|
||
|
| a | k | main,turn,turn |
|
||
|
|
||
|
|
||
|
@restriction-way @overlap @no_turning @only_turning
|
||
|
Scenario: Car - Multiple via restriction with to,via,from sharing same node
|
||
|
# Example: https://www.openstreetmap.org/relation/3972923
|
||
|
Given the node map
|
||
|
"""
|
||
|
e---d
|
||
|
| |
|
||
|
a---b---c
|
||
|
|
|
||
|
f
|
||
|
"""
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway |
|
||
|
| ab | yes |
|
||
|
| bc | yes |
|
||
|
| cd | yes |
|
||
|
| deb | yes |
|
||
|
| bf | yes |
|
||
|
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction |
|
||
|
| restriction | ab | bc,cd,deb | bf | no_u_turn |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | node:via | way:to | restriction |
|
||
|
| restriction | ab | b | bc | only_straight_on |
|
||
|
| restriction | deb | b | bc | no_left_turn |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route |
|
||
|
| a | f | |
|
||
|
# The last restriction is missing from OSM. Without it,
|
||
|
# it produces the route: ab,bc,cd,deb,bc,cd,deb,bf,bf
|
||
|
|
||
|
|
||
|
@restriction-way @except
|
||
|
Scenario: Car - Multiple via restriction, exception applies
|
||
|
# Example: https://www.openstreetmap.org/#map=19/50.04920/19.93251
|
||
|
Given the node map
|
||
|
"""
|
||
|
a---b---c---d--e
|
||
|
"""
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway |
|
||
|
| ab | yes |
|
||
|
| bc | yes |
|
||
|
| cd | yes |
|
||
|
| de | yes |
|
||
|
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction | except |
|
||
|
| restriction | ab | bc,cd | de | no_straight_on | motorcar |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route |
|
||
|
| a | e | ab,bc,cd,de,de |
|
||
|
|
||
|
|
||
|
@restriction-way @except @no_turning
|
||
|
Scenario: Car - Multiple via restriction, exception n/a
|
||
|
# Example: https://www.openstreetmap.org/#map=19/50.04920/19.93251
|
||
|
Given the node map
|
||
|
"""
|
||
|
a---b---c---d--e
|
||
|
"""
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway |
|
||
|
| ab | yes |
|
||
|
| bc | yes |
|
||
|
| cd | yes |
|
||
|
| de | yes |
|
||
|
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction | except |
|
||
|
| restriction | ab | bc,cd | de | no_straight_on | psv;emergency |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route |
|
||
|
| a | e | |
|
||
|
|
||
|
|
||
|
@restriction-way @overlap @only_turning
|
||
|
Scenario: Car - Multiple via restriction overlapping single via restriction
|
||
|
Given the node map
|
||
|
"""
|
||
|
e
|
||
|
|
|
||
|
a---b---c---d
|
||
|
|
|
||
|
f - g
|
||
|
|
|
||
|
h
|
||
|
"""
|
||
|
|
||
|
And the ways
|
||
|
| nodes | name |
|
||
|
| ab | abcd |
|
||
|
| bc | abcd |
|
||
|
| cd | abcd |
|
||
|
| hf | hfb |
|
||
|
| fb | hfb |
|
||
|
| gf | gf |
|
||
|
| ce | ce |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction |
|
||
|
| restriction | ab | bc | ce | only_left_turn |
|
||
|
| restriction | gf | fb,bc | cd | only_u_turn |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route | turns | locations |
|
||
|
| a | d | abcd,ce,ce,abcd,abcd | depart,turn left,continue uturn,turn left,arrive | a,c,e,c,d |
|
||
|
| a | e | abcd,ce,ce | depart,turn left,arrive | a,c,e |
|
||
|
| a | f | abcd,hfb,hfb | depart,turn right,arrive | a,b,f |
|
||
|
| g | e | gf,hfb,abcd,abcd,ce,ce | depart,turn right,turn right,continue uturn,turn right,arrive | g,f,b,d,c,e |
|
||
|
| g | d | gf,hfb,abcd,abcd | depart,turn right,turn right,arrive | g,f,b,d |
|
||
|
| h | e | hfb,abcd,ce,ce | depart,end of road right,turn left,arrive | h,b,c,e |
|
||
|
| h | d | hfb,abcd,abcd | depart,end of road right,arrive | h,b,d |
|
||
|
|
||
|
|
||
|
@restriction-way
|
||
|
Scenario: Ambiguous from/to ways
|
||
|
Given the node map
|
||
|
"""
|
||
|
a
|
||
|
|
|
||
|
b---d---e
|
||
|
| |
|
||
|
c f
|
||
|
"""
|
||
|
|
||
|
And the ways
|
||
|
| nodes |
|
||
|
| abc |
|
||
|
| bd |
|
||
|
| de |
|
||
|
| ef |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction |
|
||
|
| restriction | abc | bd,de | ef | no_right_turn |
|
||
|
| restriction | ef | de,bd | abc | no_right_turn |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route | locations |
|
||
|
| a | f | abc,bd,de,ef,ef | a,b,d,e,f |
|
||
|
| f | a | ef,de,bd,abc,abc | f,e,d,b,a |
|
||
|
| c | f | abc,bd,de,ef,ef | c,b,d,e,f |
|
||
|
| f | c | ef,de,bd,abc,abc | f,e,d,b,c |
|
||
|
|
||
|
|
||
|
@restriction-way
|
||
|
Scenario: Ambiguous via ways
|
||
|
Given the node map
|
||
|
"""
|
||
|
a
|
||
|
|
|
||
|
b---d---e---c
|
||
|
|
|
||
|
f
|
||
|
"""
|
||
|
|
||
|
And the ways
|
||
|
| nodes |
|
||
|
| ab |
|
||
|
| bd |
|
||
|
| dec |
|
||
|
| ef |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction |
|
||
|
| restriction | ab | bd,dec | ef | no_right_turn |
|
||
|
| restriction | ef | dec,bd | ab | no_right_turn |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route | locations |
|
||
|
| a | f | ab,bd,dec,ef,ef | a,b,d,e,f |
|
||
|
| f | a | ef,dec,bd,ab,ab | f,e,d,b,a |
|
||
|
|
||
|
|
||
|
@restriction-way @invalid
|
||
|
Scenario: Badly tagged restrictions
|
||
|
Given the node map
|
||
|
"""
|
||
|
a--b--c--d--e--f
|
||
|
"""
|
||
|
|
||
|
And the ways
|
||
|
| nodes | oneway |
|
||
|
| ab | yes |
|
||
|
| bc | yes |
|
||
|
| cd | yes |
|
||
|
| de | yes |
|
||
|
| ef | yes |
|
||
|
|
||
|
And the relations
|
||
|
| type | way:from | way:via | way:to | restriction |
|
||
|
| restriction | ab | cd,de | ef | no_straight_on |
|
||
|
| restriction | ab | bc,de | ef | no_straight_on |
|
||
|
| restriction | ab | bc,cd | ef | no_straight_on |
|
||
|
| restriction | ef | de,cd | bc | no_straight_on |
|
||
|
|
||
|
When I route I should get
|
||
|
| from | to | route | locations |
|
||
|
| a | f | ab,bc,cd,de,ef,ef | a,b,c,d,e,f |
|
||
|
|