Before we only worked on subsequent quick turns, as in: `right, right` keeps the user on the rightmost lanes. This changeset modifies the logic to work on any subsequent steps that are "quick" and have lane information we can constrain later. Because we do not have a from-lane => to-lanes mapping we take the lanes left and right of the turn lanes into account when heuristically assigning the leftmost / rightmost lanes. There are some edge cases where this still does not give us the optimal solution but it gets close to what is actually possible at the moment without having a lane mapping in post-processing. References: - https://github.com/Project-OSRM/osrm-backend/issues/2625 fix rebase
718 lines
46 KiB
Gherkin
718 lines
46 KiB
Gherkin
@routing @guidance @turn-lanes
|
|
Feature: Turn Lane Guidance
|
|
|
|
Background:
|
|
Given the profile "car"
|
|
Given a grid size of 20 meters
|
|
|
|
@anticipate
|
|
Scenario: Anticipate Lane Change for subsequent multi-lane intersections
|
|
Given the node map
|
|
| a | | b | | x | | |
|
|
| | | | | | | |
|
|
| | | c | | d | | z |
|
|
| | | | | | | |
|
|
| | | y | | e | | |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward |
|
|
| ab | through\|right\|right\|right |
|
|
| bx | |
|
|
| bc | left\|left\|through |
|
|
| cd | through\|right |
|
|
| cy | |
|
|
| dz | |
|
|
| de | |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes | # |
|
|
| a,d | ab,bc,cd,cd | depart,turn right,turn left,arrive | ,straight:false right:true right:true right:false,left:true left:true straight:false, | 2 hops |
|
|
| a,e | ab,bc,cd,de,de | depart,turn right,turn left,turn right,arrive | ,straight:false right:false right:true right:false,left:false left:true straight:false,straight:false right:true, | 3 hops |
|
|
|
|
@anticipate
|
|
Scenario: Anticipate Lane Change for quick same direction turns, staying on the same street
|
|
Given the node map
|
|
| a | | b | x |
|
|
| | | | |
|
|
| | | c | |
|
|
| | | | |
|
|
| e | | d | y |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | turn:lanes:backward | name |
|
|
| ab | through\|right\|right | | MySt |
|
|
| bx | | | XSt |
|
|
| bc | | left\|right | MySt |
|
|
| cd | left\|right | through\|through | MySt |
|
|
| de | | left\|left\|through | MySt |
|
|
| dy | | | YSt |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,e | MySt,MySt,MySt,MySt | depart,continue right,turn right,arrive | ,straight:false right:false right:true,left:false right:true, |
|
|
| e,a | MySt,MySt,MySt,MySt | depart,continue left,turn left,arrive | ,left:true left:false straight:false,left:true right:false, |
|
|
|
|
@anticipate
|
|
Scenario: Anticipate Lane Change for quick same direction turns, changing between streets
|
|
Given the node map
|
|
| a | | b | x |
|
|
| | | | |
|
|
| | | c | |
|
|
| | | | |
|
|
| e | | d | y |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | turn:lanes:backward | name |
|
|
| ab | through\|right\|right | | AXSt |
|
|
| bx | | | AXSt |
|
|
| bc | | left\|right | BDSt |
|
|
| cd | left\|right | through\|through | BDSt |
|
|
| de | | left\|left\|through | EYSt |
|
|
| dy | | | EYSt |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,e | AXSt,BDSt,EYSt,EYSt | depart,turn right,turn right,arrive | ,straight:false right:false right:true,left:false right:true, |
|
|
| e,a | EYSt,BDSt,AXSt,AXSt | depart,turn left,turn left,arrive | ,left:true left:false straight:false,left:true right:false, |
|
|
|
|
|
|
@anticipate
|
|
Scenario: Anticipate Lane Change for quick turns during a merge
|
|
Given the node map
|
|
| a | | | | |
|
|
| x | b | | c | y |
|
|
| | | | | d |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | name | highway | oneway |
|
|
| ab | slight_left\|slight_left | On | motorway_link | yes |
|
|
| xb | | Hwy | motorway | |
|
|
| bc | through\|slight_right | Hwy | motorway | |
|
|
| cd | | Off | motorway_link | yes |
|
|
| cy | | Hwy | motorway | |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,d | On,Hwy,Off,Off | depart,merge slight right,off ramp right,arrive | ,slight left:false slight left:true,straight:false slight right:true, |
|
|
|
|
|
|
@anticipate
|
|
Scenario: Schoenefelder Kreuz
|
|
# https://www.openstreetmap.org/way/264306388#map=16/52.3202/13.5568
|
|
Given the node map
|
|
| a | b | x | | | i |
|
|
| | | c | d | | |
|
|
| | | | | | j |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | lanes | highway | oneway | name |
|
|
| ab | none\|none\|none\|slight_right\|slight_right | 5 | motorway | | abx |
|
|
| bx | | 3 | motorway | | abx |
|
|
| bc | | 2 | motorway_link | yes | bcd |
|
|
| cd | slight_left\|slight_left;slight_right\|slight_right | 3 | motorway_link | yes | bcd |
|
|
| di | slight_left\|slight_right | 2 | motorway_link | yes | di |
|
|
| dj | | 2 | motorway_link | yes | dj |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,i | abx,bcd,di,di | depart,off ramp right,fork slight left,arrive | ,none:false none:false none:false slight right:true slight right:true,slight left:true slight left;slight right:true slight right:false, |
|
|
| a,j | abx,bcd,dj,dj | depart,off ramp right,fork slight right,arrive | ,none:false none:false none:false slight right:true slight right:true,slight left:false slight left;slight right:true slight right:true, |
|
|
|
|
|
|
@anticipate
|
|
Scenario: Kreuz Oranienburg
|
|
# https://www.openstreetmap.org/way/4484007#map=18/52.70439/13.20269
|
|
Given the node map
|
|
| i | | | | | a |
|
|
| j | | c | b | | x |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | lanes | highway | oneway | name |
|
|
| ab | | 1 | motorway_link | yes | ab |
|
|
| xb | | 1 | motorway_link | yes | xbcj |
|
|
| bc | none\|slight_right | 2 | motorway_link | yes | xbcj |
|
|
| ci | | 1 | motorway_link | yes | ci |
|
|
| cj | | 1 | motorway_link | yes | xbcj |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,i | ab,ci,ci | depart,turn slight right,arrive | ,none:false slight right:true, |
|
|
| a,j | ab,xbcj | depart,arrive | , |
|
|
|
|
|
|
@anticipate
|
|
Scenario: Lane anticipation for fan-in
|
|
Given the node map
|
|
| a | | b | | x | | |
|
|
| | | | | | | |
|
|
| | | c | | d | | z |
|
|
| | | | | | | |
|
|
| | | y | | e | | |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | name |
|
|
| ab | through\|right\|right\|right | abx |
|
|
| bx | | abx |
|
|
| bc | left\|left\|through | bcy |
|
|
| cy | | bcy |
|
|
| cd | through\|right | cdz |
|
|
| dz | | cdz |
|
|
| de | | de |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,e | abx,bcy,cdz,de,de | depart,turn right,turn left,turn right,arrive | ,straight:false right:false right:true right:false,left:false left:true straight:false,straight:false right:true, |
|
|
|
|
@anticipate
|
|
Scenario: Lane anticipation for fan-out
|
|
Given the node map
|
|
| a | | b | | x | | |
|
|
| | | | | | | |
|
|
| | | c | | d | | z |
|
|
| | | | | | | |
|
|
| | | y | | e | | |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | name |
|
|
| ab | through\|right | abx |
|
|
| bx | | abx |
|
|
| bc | left\|left\|through | bcy |
|
|
| cy | | bcy |
|
|
| cd | through\|right\|right\|right | cdz |
|
|
| dz | | cdz |
|
|
| de | | de |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,e | abx,bcy,cdz,de,de | depart,turn right,turn left,turn right,arrive | ,straight:false right:true,left:true left:true straight:false,straight:false right:true right:true right:true, |
|
|
|
|
@anticipate
|
|
Scenario: Lane anticipation for fan-in followed by fan-out
|
|
Given the node map
|
|
| a | | b | | x | | |
|
|
| | | | | | | |
|
|
| | | c | | d | | z |
|
|
| | | | | | | |
|
|
| | | y | | e | | |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | name |
|
|
| ab | through\|right\|right\|right | abx |
|
|
| bx | | abx |
|
|
| bc | left\|left\|through | bcy |
|
|
| cy | | bcy |
|
|
| cd | through\|right\|right\|right | cdz |
|
|
| dz | | cdz |
|
|
| de | | de |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,e | abx,bcy,cdz,de,de | depart,turn right,turn left,turn right,arrive | ,straight:false right:true right:true right:false,left:true left:true straight:false,straight:false right:true right:true right:true, |
|
|
|
|
@anticipate
|
|
Scenario: Lane anticipation for fan-out followed by fan-in
|
|
Given the node map
|
|
| a | | b | | x | | |
|
|
| | | | | | | |
|
|
| | | c | | d | | z |
|
|
| | | | | | | |
|
|
| | | y | | e | | |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | name |
|
|
| ab | through\|right | abx |
|
|
| bx | | abx |
|
|
| bc | left\|left\|through | bcy |
|
|
| cy | | bcy |
|
|
| cd | through\|right | cdz |
|
|
| dz | | cdz |
|
|
| de | | de |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,e | abx,bcy,cdz,de,de | depart,turn right,turn left,turn right,arrive | ,straight:false right:true,left:false left:true straight:false,straight:false right:true, |
|
|
|
|
@anticipate
|
|
Scenario: Lane anticipation for multiple hops with same number of lanes
|
|
Given the node map
|
|
| a | | b | | x | | |
|
|
| | | | | | | |
|
|
| | | c | | d | | z |
|
|
| | | | | | | |
|
|
| | | y | | e | | f |
|
|
| | | | | | | |
|
|
| | | | | w | | |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | name |
|
|
| ab | through\|right\|right\|right | abx |
|
|
| bx | | abx |
|
|
| bc | left\|left\|through | bcy |
|
|
| cy | | bcy |
|
|
| cd | through\|right\|right | cdz |
|
|
| dz | | cdz |
|
|
| de | left\|through | dew |
|
|
| ew | | dew |
|
|
| ef | | ef |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,f | abx,bcy,cdz,dew,ef,ef | depart,turn right,turn left,turn right,turn left,arrive | ,straight:false right:true right:false right:false,left:true left:false straight:false,straight:false right:true right:false,left:true straight:false, |
|
|
|
|
@anticipate
|
|
Scenario: Anticipate Lanes for through, through with lanes
|
|
Given the node map
|
|
| | | | f | g | |
|
|
| | | | | | |
|
|
| a | b | c | d | | e |
|
|
| | | | | | |
|
|
| | | | h | i | |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | name |
|
|
| ab | | main |
|
|
| bc | left\|through\|through\|through\|right | main |
|
|
| cd | left\|through\|right | main |
|
|
| de | | main |
|
|
| cf | | off |
|
|
| ch | | off |
|
|
| dg | | off |
|
|
| di | | off |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,e | main,main,main,main | depart,use lane straight,use lane straight,arrive | ,left:false straight:false straight:true straight:false right:false,left:false straight:true right:false, |
|
|
|
|
@anticipate
|
|
Scenario: Anticipate Lanes for through and collapse multiple use lanes
|
|
Given the node map
|
|
| | | e | f | g |
|
|
| | | | | |
|
|
| a | b | c | d | |
|
|
| | | | | |
|
|
| | | h | i | j |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | name |
|
|
| ab | left\|through\|through\|right | main |
|
|
| bc | left\|through\|through\|right | main |
|
|
| cd | left\|through\|through\|through\|right | main |
|
|
| be | | off |
|
|
| bh | | off |
|
|
| cf | | off |
|
|
| ci | | off |
|
|
| dg | | off |
|
|
| dj | | off |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,c | main,main,main | depart,use lane straight,arrive | ,left:false straight:true straight:true right:false, |
|
|
| a,d | main,main,main | depart,use lane straight,arrive | ,left:false straight:true straight:true right:false, |
|
|
|
|
@anticipate
|
|
Scenario: Anticipate Lanes for through followed by left/right
|
|
Given the node map
|
|
| | | f | g | |
|
|
| | | | | d |
|
|
| a | b | c | x | |
|
|
| | | | | e |
|
|
| | | h | i | |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | name |
|
|
| ab | left\|through\|through\|through\|through\|right | main |
|
|
| bc | left\|through\|through\|right | main |
|
|
| cx | left\|right | main |
|
|
| xd | | left |
|
|
| xe | | right |
|
|
| bf | | off |
|
|
| bh | | off |
|
|
| cg | | off |
|
|
| ci | | off |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,d | main,main,main,left,left | depart,use lane straight,use lane straight,turn left,arrive | ,left:false straight:false straight:true straight:false straight:false right:false,left:false straight:true straight:false right:false,left:true right:false, |
|
|
| a,e | main,main,main,right,right | depart,use lane straight,use lane straight,turn right,arrive | ,left:false straight:false straight:false straight:true straight:false right:false,left:false straight:false straight:true right:false,left:false right:true, |
|
|
|
|
@anticipate
|
|
Scenario: Anticipate Lanes for through with turn before / after
|
|
Given the node map
|
|
| a | b | c |
|
|
| | d | |
|
|
| f | e | g |
|
|
| | h | |
|
|
| j | i | l |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | name | oneway |
|
|
| ab | right\|right\|right\|right | ab | yes |
|
|
| cb | left\|left\|left\|left | cb | yes |
|
|
| bd | | bdehi | |
|
|
| de | left\|left\|through\|through\|through\|through\|right\|right | bdehi | |
|
|
| ef | | ef | |
|
|
| eg | | eg | |
|
|
| eh | | bdehi | |
|
|
| hi | left\|left\|right\|right | bdehi | |
|
|
| ij | | ij | |
|
|
| il | | il | |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes | # |
|
|
| a,f | ab,bdehi,ef,ef | depart,turn right,turn right,arrive | ,right:false right:false right:true right:true,left:false left:false straight:false straight:false straight:false straight:false right:true right:true, | |
|
|
| a,g | ab,bdehi,eg,eg | depart,turn right,turn left,arrive | ,right:true right:true right:false right:false,left:true left:true straight:false straight:false straight:false straight:false right:false right:false, | |
|
|
| a,j | ab,bdehi,bdehi,ij,ij | depart,turn right,use lane straight,turn right,arrive | ,right:true right:true right:false right:false,left:false left:false straight:false straight:false straight:true straight:true right:false right:false,left:false left:false right:true right:true, | |
|
|
| a,l | ab,bdehi,bdehi,il,il | depart,turn right,use lane straight,turn left,arrive | ,right:false right:false right:true right:true,left:false left:false straight:true straight:true straight:false straight:false right:false right:false,left:true left:true right:false right:false, | not perfect |
|
|
| c,g | cb,bdehi,eg,eg | depart,turn left,turn left,arrive | ,left:true left:true left:false left:false,left:true left:true straight:false straight:false straight:false straight:false right:false right:false, | |
|
|
| c,f | cb,bdehi,ef,ef | depart,turn left,turn right,arrive | ,left:false left:false left:true left:true,left:false left:false straight:false straight:false straight:false straight:false right:true right:true, | |
|
|
| c,l | cb,bdehi,bdehi,il,il | depart,turn left,use lane straight,turn left,arrive | ,left:false left:false left:true left:true,left:false left:false straight:true straight:true straight:false straight:false right:false right:false,left:true left:true right:false right:false, | |
|
|
| c,j | cb,bdehi,bdehi,ij,ij | depart,turn left,use lane straight,turn right,arrive | ,left:true left:true left:false left:false,left:false left:false straight:false straight:false straight:true straight:true right:false right:false,left:false left:false right:true right:true, | not perfect |
|
|
|
|
@anticipate
|
|
Scenario: Anticipate Lanes for turns with through before and after
|
|
Given the node map
|
|
| a | b | q | | s | h | i |
|
|
| | | e | f | g | | |
|
|
| c | d | r | | t | j | k |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | name |
|
|
| ab | through\|right\|right\|right | top |
|
|
| be | | top |
|
|
| bq | | off |
|
|
| ef | left\|through\|through\|through\|through\|right | main |
|
|
| fg | left\|left\|right\|right | main |
|
|
| fs | | off |
|
|
| ft | | off |
|
|
| gh | | top |
|
|
| hi | | top |
|
|
| cd | left\|left\|left\|through | bot |
|
|
| de | | bot |
|
|
| dr | | off |
|
|
| gj | | bot |
|
|
| jk | | bot |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,i | top,main,main,top,top | depart,turn right,use lane straight,turn left,arrive | ,straight:false right:false right:true right:true,left:false straight:true straight:true straight:false straight:false right:false,left:true left:true right:false right:false, |
|
|
| a,k | top,main,main,bot,bot | depart,turn right,use lane straight,turn right,arrive | ,straight:false right:true right:true right:false,left:false straight:false straight:false straight:true straight:true right:false,left:false left:false right:true right:true, |
|
|
| c,i | bot,main,main,top,top | depart,turn left,use lane straight,turn left,arrive | ,left:false left:true left:true straight:false,left:false straight:true straight:true straight:false straight:false right:false,left:true left:true right:false right:false, |
|
|
| c,k | bot,main,main,bot,bot | depart,turn left,use lane straight,turn right,arrive | ,left:true left:true left:false straight:false,left:false straight:false straight:false straight:true straight:true right:false,left:false left:false right:true right:true, |
|
|
|
|
@anticipate
|
|
Scenario: Anticipate Lanes for turn between throughs
|
|
Given the node map
|
|
| | q | | |
|
|
| a | b | c | s |
|
|
| | r | d | t |
|
|
| | | e | |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | name |
|
|
| ab | left\|through\|through\|through\|through\|through\|right | main |
|
|
| bq | | off |
|
|
| br | | off |
|
|
| bc | through\|through\|right\|right\|right | main |
|
|
| cs | | off |
|
|
| cd | left\|through\|through | main |
|
|
| de | | main |
|
|
| dt | | off |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,e | main,main,main,main,main | depart,use lane straight,continue right,use lane straight,arrive | ,left:false straight:false straight:false straight:false straight:true straight:true right:false,straight:false straight:false right:false right:true right:true,left:false straight:true straight:true, |
|
|
|
|
@anticipate @todo @bug @2661
|
|
Scenario: Anticipate with lanes in roundabout: roundabouts as the unit of anticipation
|
|
Given the node map
|
|
| | | e | | |
|
|
| a | b | | d | f |
|
|
| | | c | | |
|
|
| | | | | |
|
|
| | | g | | |
|
|
| k | h | | j | l |
|
|
| | | i | | |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | highway | junction | # |
|
|
| ab | slight_right\|slight_right\|slight_right | primary | | |
|
|
| bc | slight_left\|slight_right\|slight_right | primary | roundabout | top |
|
|
| cd | | primary | roundabout | top |
|
|
| de | | primary | roundabout | top |
|
|
| eb | | primary | roundabout | top |
|
|
| df | | primary | | |
|
|
| cg | slight_right\|slight_right | primary | | |
|
|
| gh | slight_left\|slight_right | primary | roundabout | bot |
|
|
| hi | | primary | roundabout | bot |
|
|
| ij | slight_left\|slight_right | primary | roundabout | bot |
|
|
| jg | | primary | roundabout | bot |
|
|
| hk | | primary | | |
|
|
| jl | | primary | | |
|
|
|
|
When I route I should get
|
|
| # | waypoints | route | turns | lanes |
|
|
| right-right | a,k | ab,cg,hk,hk | depart,roundabout-exit-1,roundabout-exit-1,arrive | ,slight right:false slight right:false slight right:true,slight right:false slight right:true, |
|
|
| right-left | a,l | ab,cg,jl,jl | depart,roundabout-exit-1,roundabout-exit-2,arrive | ,slight right:false slight right:false slight right:true,slight right:false slight right:true, |
|
|
| todo exits | a,f | ab,df,df | depart,roundabout-exit-2,arrive | ,slight right:false slight right:false slight right:true, |
|
|
| todo exits | a,e | ab,bc,eb | depart,roundabout-exit-undefined,arrive | ,slight right:true slight right:true slight right:true, |
|
|
|
|
@anticipate @todo
|
|
Scenario: Roundabout with lanes only tagged on exit
|
|
Given the node map
|
|
| | | e | | |
|
|
| a | b | | d | f |
|
|
| | | c | | |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | highway | junction |
|
|
| ab | | primary | |
|
|
| bc | | primary | roundabout |
|
|
| cd | slight_left\|slight_left\|slight_right | primary | roundabout |
|
|
| de | | primary | roundabout |
|
|
| eb | | primary | roundabout |
|
|
| df | | primary | |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,f | ab,df,df | depart,roundabout-exit-1,use lane slight right,arrive | ,,slight left:false slight left:false slight right:true, |
|
|
|
|
@anticipate
|
|
Scenario: No Lanes for Roundabouts, see #2626
|
|
Given the node map
|
|
| | | a | | |
|
|
| | | b | | |
|
|
| | c | | g | h |
|
|
| | | | | |
|
|
| | d | | f | |
|
|
| | | e | | |
|
|
| x | | | | y |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | highway | junction |
|
|
| ab | slight_right\|slight_right | primary | |
|
|
| bc | | primary | roundabout |
|
|
| cd | | primary | roundabout |
|
|
| de | | primary | roundabout |
|
|
| ef | | primary | roundabout |
|
|
| fg | through\|slight_right | primary | roundabout |
|
|
| gb | | primary | roundabout |
|
|
| gh | | primary | |
|
|
| cx | | primary | |
|
|
| dx | | primary | |
|
|
| ey | | primary | |
|
|
| fy | | primary | |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,h | ab,gh,gh | depart,roundabout-exit-5,arrive | ,, |
|
|
|
|
@anticipate
|
|
Scenario: No Lanes for Roundabouts, see #2626
|
|
Given the node map
|
|
| | | a | | |
|
|
| x | b | | d | y |
|
|
| | | c | | |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | highway | junction | name |
|
|
| xb | slight_right\|slight_right | primary | | xb |
|
|
| dy | | primary | | dy |
|
|
| ab | | primary | roundabout | roundabout |
|
|
| bc | | primary | roundabout | roundabout |
|
|
| cd | left\|slight_right | primary | roundabout | roundabout |
|
|
| da | | primary | roundabout | roundabout |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| x,y | xb,dy,dy | depart,roundabout-exit-1,arrive | ,, |
|
|
| x,c | xb,roundabout,roundabout | depart,roundabout-exit-undefined,arrive | ,, |
|
|
| x,a | xb,roundabout,roundabout | depart,roundabout-exit-undefined,arrive | ,, |
|
|
|
|
@anticipate
|
|
Scenario: No Lanes for Roundabouts, see #2626
|
|
Given the profile "lhs"
|
|
And the node map
|
|
| | | a | | |
|
|
| | | b | | |
|
|
| h | c | | g | |
|
|
| | | | | |
|
|
| | d | | f | |
|
|
| | | e | | |
|
|
| x | | | | y |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | highway | junction |
|
|
| ab | slight_left\|slight_left | primary | |
|
|
| bg | | primary | roundabout |
|
|
| gf | | primary | roundabout |
|
|
| fe | | primary | roundabout |
|
|
| ed | | primary | roundabout |
|
|
| dc | slight_left | primary | roundabout |
|
|
| cb | | primary | roundabout |
|
|
| ch | | primary | |
|
|
| ex | | primary | |
|
|
| dx | | primary | |
|
|
| gy | | primary | |
|
|
| fy | | primary | |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,h | ab,ch,ch | depart,roundabout-exit-5,arrive | ,, |
|
|
|
|
@anticipate
|
|
Scenario: No Lanes for Roundabouts, see #2626
|
|
Given the node map
|
|
| | | a | | |
|
|
| x | b | | d | y |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | | | |
|
|
| | | c | | |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | highway | junction | name |
|
|
| xb | slight_right\|slight_right | primary | | xb |
|
|
| dy | | primary | | dy |
|
|
| ab | | primary | roundabout | roundabout |
|
|
| bc | | primary | roundabout | roundabout |
|
|
| cd | left\|slight_right | primary | roundabout | roundabout |
|
|
| da | | primary | roundabout | roundabout |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| x,y | xb,dy,dy | depart,roundabout-exit-1,arrive | ,, |
|
|
| x,c | xb,roundabout,roundabout | depart,roundabout-exit-undefined,arrive | ,, |
|
|
| x,a | xb,roundabout,roundabout | depart,roundabout-exit-undefined,arrive | ,, |
|
|
|
|
@anticipate
|
|
Scenario: No Lanes for Roundabouts, see #2626
|
|
Given the node map
|
|
| a | b | | | x |
|
|
| | c | | | |
|
|
| d | | f | g | z |
|
|
| | e | | h | |
|
|
| | | | | |
|
|
| | y | | | |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | highway | junction | name |
|
|
| ab | through\|right\|right\|right\|right | primary | | abx |
|
|
| bx | | primary | | abx |
|
|
| bc | right\|right\|right\|right | primary | | bc |
|
|
| cd | | primary | roundabout | cdefc |
|
|
| de | slight_left\|slight_left\|slight_left\|slight_right | primary | roundabout | cdefc |
|
|
| ef | left\|slight_right\|slight_right | primary | roundabout | cdefc |
|
|
| fc | | primary | roundabout | cdefc |
|
|
| ey | | primary | | ey |
|
|
| fg | through\|right | primary | | fg |
|
|
| gz | | primary | | gz |
|
|
| gh | | primary | | gh |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,h | abx,bc,fg,gh,gh | depart,turn right,cdefc-exit-2,turn right,arrive | ,straight:false right:false right:false right:false right:true,,straight:false right:true, |
|
|
|
|
@anticipate
|
|
Scenario: Anticipate none tags
|
|
Given the node map
|
|
| a | b | c |
|
|
| | d | |
|
|
| f | e | g |
|
|
| | h | |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | highway | name |
|
|
| ab | none\|none\|right\|right | primary | abc |
|
|
| bc | | primary | abc |
|
|
| bd | | primary | bdeh |
|
|
| de | left\|none\|none\|right | primary | bdeh |
|
|
| eh | | primary | bdeh |
|
|
| ef | | primary | feg |
|
|
| eg | | primary | feg |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,g | abc,bdeh,feg,feg | depart,turn right,turn left,arrive | ,none:false none:false right:true right:false,left:true none:false none:false right:false, |
|
|
| a,f | abc,bdeh,feg,feg | depart,turn right,turn right,arrive | ,none:false none:false right:false right:true,left:false none:false none:false right:true, |
|
|
|
|
@anticipate
|
|
Scenario: Tripple Right keeping Left
|
|
Given the node map
|
|
| a | | | | b | | i |
|
|
| | | | | | | |
|
|
| | | | | | | |
|
|
| f | | e | | | | g |
|
|
| | | | | | | |
|
|
| | | | | | | |
|
|
| | j | d | | c | | |
|
|
| | | | | h | | |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | highway | name |
|
|
| abi | \|\|right\|right | primary | start |
|
|
| bch | \|\|right\|right | primary | first |
|
|
| cdj | \|\|right\|right | primary | second |
|
|
| de | left\|right\|right | secondary | third |
|
|
| feg | | tertiary | fourth |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,f | start,first,second,third,fourth,fourth | depart,turn right,turn right,turn right,turn left,arrive | ,none:false none:false right:true right:false,none:false none:false right:true right:false,none:false none:false right:true right:false,left:true right:false right:false, |
|
|
| a,g | start,first,second,third,fourth,fourth | depart,turn right,turn right,turn right,turn right,arrive | ,none:false none:false right:true right:true,none:false none:false right:true right:true,none:false none:false right:true right:true,left:false right:true right:true, |
|
|
|
|
@anticipate
|
|
Scenario: Tripple Left keeping Right
|
|
Given the node map
|
|
| i | | b | | | | a |
|
|
| | | | | | | |
|
|
| | | | | | | |
|
|
| g | | | | e | | f |
|
|
| | | | | | | |
|
|
| | | | | | | |
|
|
| | | c | | d | j | |
|
|
| | | h | | | | |
|
|
|
|
And the ways
|
|
| nodes | turn:lanes:forward | highway | name |
|
|
| abi | left\|left\|\| | primary | start |
|
|
| bch | left\|left\|\| | primary | first |
|
|
| cdj | left\|left\|\| | primary | second |
|
|
| de | left\|left\|right | secondary | third |
|
|
| feg | | tertiary | fourth |
|
|
|
|
When I route I should get
|
|
| waypoints | route | turns | lanes |
|
|
| a,f | start,first,second,third,fourth,fourth | depart,turn left,turn left,turn left,turn right,arrive | ,left:false left:true none:false none:false,left:false left:true none:false none:false,left:false left:true none:false none:false,left:false left:false right:true, |
|
|
| a,g | start,first,second,third,fourth,fourth | depart,turn left,turn left,turn left,turn left,arrive | ,left:true left:true none:false none:false,left:true left:true none:false none:false,left:true left:true none:false none:false,left:true left:true right:false, |
|