osrm-backend/features/car/multi_via_restrictions.feature

1034 lines
40 KiB
Gherkin
Raw Normal View History

@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 |