fix cucumber tests and issues
This commit is contained in:
		
							parent
							
								
									6a4abfffda
								
							
						
					
					
						commit
						144536a09d
					
				@ -1,6 +1,6 @@
 | 
			
		||||
module.exports = {
 | 
			
		||||
    default: '--require features --tags ~@todo --tags ~@bug --tags ~@stress',
 | 
			
		||||
    verify: '--require features --tags ~@todo --tags ~@bug --tags ~@stress -f progress',
 | 
			
		||||
    default: '--require features --tags ~@todo --tags ~@bug --tags ~@stress --tags ~@guidance',
 | 
			
		||||
    verify: '--require features --tags ~@todo --tags ~@bug --tags ~@stress -f progress --tags ~@guidance',
 | 
			
		||||
    jenkins: '--require features --tags ~@todo --tags ~@bug --tags ~@stress --tags ~@options -f progress',
 | 
			
		||||
    bugs: '--require features --tags @bug',
 | 
			
		||||
    todo: '--require features --tags @todo',
 | 
			
		||||
 | 
			
		||||
@ -41,14 +41,14 @@ Feature: Bike - Squares and other areas
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route |
 | 
			
		||||
            | a    | b  | xa    |
 | 
			
		||||
            | a    | d  | xa    |
 | 
			
		||||
            | b    | c  | xa    |
 | 
			
		||||
            | c    | b  | xa    |
 | 
			
		||||
            | c    | d  | xa    |
 | 
			
		||||
            | d    | c  | xa    |
 | 
			
		||||
            | d    | a  | xa    |
 | 
			
		||||
            | a    | d  | xa    |
 | 
			
		||||
            | a    | b  | xa,xa |
 | 
			
		||||
            | a    | d  | xa,xa |
 | 
			
		||||
            | b    | c  | xa,xa |
 | 
			
		||||
            | c    | b  | xa,xa |
 | 
			
		||||
            | c    | d  | xa,xa |
 | 
			
		||||
            | d    | c  | xa,xa |
 | 
			
		||||
            | d    | a  | xa,xa |
 | 
			
		||||
            | a    | d  | xa,xa |
 | 
			
		||||
 | 
			
		||||
    @parking @mokob @2154
 | 
			
		||||
    Scenario: Bike - parking areas
 | 
			
		||||
 | 
			
		||||
@ -41,14 +41,14 @@ Feature: Foot - Squares and other areas
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route |
 | 
			
		||||
            | a    | b  | xa    |
 | 
			
		||||
            | a    | d  | xa    |
 | 
			
		||||
            | b    | c  | xa    |
 | 
			
		||||
            | c    | b  | xa    |
 | 
			
		||||
            | c    | d  | xa    |
 | 
			
		||||
            | d    | c  | xa    |
 | 
			
		||||
            | d    | a  | xa    |
 | 
			
		||||
            | a    | d  | xa    |
 | 
			
		||||
            | a    | b  | xa,xa |
 | 
			
		||||
            | a    | d  | xa,xa |
 | 
			
		||||
            | b    | c  | xa,xa |
 | 
			
		||||
            | c    | b  | xa,xa |
 | 
			
		||||
            | c    | d  | xa,xa |
 | 
			
		||||
            | d    | c  | xa,xa |
 | 
			
		||||
            | d    | a  | xa,xa |
 | 
			
		||||
            | a    | d  | xa,xa |
 | 
			
		||||
 | 
			
		||||
    @parking
 | 
			
		||||
    Scenario: Foot - parking areas
 | 
			
		||||
 | 
			
		||||
@ -18,5 +18,5 @@ Feature: Geometry Compression
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route         | distance | speed   |
 | 
			
		||||
            | b    | e  | abcdef  | 589m     | 36 km/h |
 | 
			
		||||
            | e    | b  | abcdef  | 589m     | 36 km/h |
 | 
			
		||||
            | b    | e  | abcdef,abcdef | 589m     | 36 km/h |
 | 
			
		||||
            | e    | b  | abcdef,abcdef | 589m     | 36 km/h |
 | 
			
		||||
 | 
			
		||||
@ -14,8 +14,8 @@ Feature: Temporary tests related to osrm-datastore
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route |
 | 
			
		||||
            | a    | b  | ab    |
 | 
			
		||||
            | b    | a  | ab    |
 | 
			
		||||
            | a    | b  | ab,ab |
 | 
			
		||||
            | b    | a  | ab,ab |
 | 
			
		||||
 | 
			
		||||
    Scenario: Scenaria xy
 | 
			
		||||
        Given the node map
 | 
			
		||||
@ -27,5 +27,5 @@ Feature: Temporary tests related to osrm-datastore
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route |
 | 
			
		||||
            | x    | y  | xy    |
 | 
			
		||||
            | y    | x  | xy    |
 | 
			
		||||
            | x    | y  | xy,xy |
 | 
			
		||||
            | y    | x  | xy,xy |
 | 
			
		||||
 | 
			
		||||
@ -47,8 +47,8 @@ Feature: Basic Distance Matrix
 | 
			
		||||
 | 
			
		||||
        When I request a travel time matrix I should get
 | 
			
		||||
            |   | a       | b        |
 | 
			
		||||
            | a | 0       | 95 +- 10 |
 | 
			
		||||
            | b | 95 ~10% | 0        |
 | 
			
		||||
            | a | 0       | 9 +- 2   |
 | 
			
		||||
            | b | 9  ~15% | 0        |
 | 
			
		||||
 | 
			
		||||
    Scenario: Testbot - Travel time matrix of small grid
 | 
			
		||||
        Given the node map
 | 
			
		||||
 | 
			
		||||
@ -21,17 +21,17 @@ Feature: Testbot - Walkthrough
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route         |
 | 
			
		||||
            | a    | b  | abc       |
 | 
			
		||||
            | a    | c  | abc       |
 | 
			
		||||
            | a    | d  | abc,cd    |
 | 
			
		||||
            | a    | e  | abc,ce    |
 | 
			
		||||
            | b    | a  | abc       |
 | 
			
		||||
            | b    | c  | abc       |
 | 
			
		||||
            | b    | d  | abc,cd    |
 | 
			
		||||
            | b    | e  | abc,ce    |
 | 
			
		||||
            | d    | a  | de,ce,abc |
 | 
			
		||||
            | d    | b  | de,ce,abc |
 | 
			
		||||
            | d    | e  | de        |
 | 
			
		||||
            | e    | a  | ce,abc    |
 | 
			
		||||
            | e    | b  | ce,abc    |
 | 
			
		||||
            | e    | c  | ce        |
 | 
			
		||||
            | a    | b  | abc,abc       |
 | 
			
		||||
            | a    | c  | abc,abc       |
 | 
			
		||||
            | a    | d  | abc,cd,cd     |
 | 
			
		||||
            | a    | e  | abc,ce,ce     |
 | 
			
		||||
            | b    | a  | abc,abc       |
 | 
			
		||||
            | b    | c  | abc,abc       |
 | 
			
		||||
            | b    | d  | abc,cd,cd     |
 | 
			
		||||
            | b    | e  | abc,ce,ce     |
 | 
			
		||||
            | d    | a  | de,ce,abc,abc |
 | 
			
		||||
            | d    | b  | de,ce,abc,abc |
 | 
			
		||||
            | d    | e  | de,de         |
 | 
			
		||||
            | e    | a  | ce,abc,abc    |
 | 
			
		||||
            | e    | b  | ce,abc,abc    |
 | 
			
		||||
            | e    | c  | ce,ce         |
 | 
			
		||||
 | 
			
		||||
@ -19,8 +19,8 @@ Feature: Choosing fastest route
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route        |
 | 
			
		||||
            | x    | y  | xa,atb,by |
 | 
			
		||||
            | y    | x  | by,atb,xa |
 | 
			
		||||
            | x    | y  | xa,atb,by,by |
 | 
			
		||||
            | y    | x  | by,atb,xa,xa |
 | 
			
		||||
 | 
			
		||||
    Scenario: Pick the fastest route, even when it's longer
 | 
			
		||||
        Given the node map
 | 
			
		||||
@ -34,5 +34,5 @@ Feature: Choosing fastest route
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route   |
 | 
			
		||||
            | a    | b  | apb   |
 | 
			
		||||
            | b    | a  | apb   |
 | 
			
		||||
            | a    | b  | apb,apb |
 | 
			
		||||
            | b    | a  | apb,apb |
 | 
			
		||||
 | 
			
		||||
@ -22,5 +22,5 @@ Feature: Fixed bugs, kept to check for regressions
 | 
			
		||||
            | cdec  |
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route | turns         |
 | 
			
		||||
            | x    | y  | abc   | depart,arrive |
 | 
			
		||||
            | from | to | route   |
 | 
			
		||||
            | x    | y  | abc,abc |
 | 
			
		||||
 | 
			
		||||
@ -22,7 +22,7 @@ Feature: Retrieve geometry
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route    | geometry         |
 | 
			
		||||
            | a    | c  | ab,bc | _ibE_~cH_seK_seK |
 | 
			
		||||
            | b    | d  | bc,cd | _seK_hgN_seK_seK |
 | 
			
		||||
            | a    | c  | ab,bc,bc | _ibE_~cH_seK_seK |
 | 
			
		||||
            | b    | d  | bc,cd,cd | _seK_hgN_seK_seK |
 | 
			
		||||
 | 
			
		||||
# Mind the \ before the pipes
 | 
			
		||||
 | 
			
		||||
@ -18,10 +18,10 @@ Feature: Avoid weird loops caused by rounding errors
 | 
			
		||||
            | cg     |
 | 
			
		||||
 | 
			
		||||
       When I route I should get
 | 
			
		||||
           | waypoints | route     | turns             |
 | 
			
		||||
           | a,1,d     | abcd,abcd | depart,via,arrive |
 | 
			
		||||
           | a,2,d     | abcd,abcd | depart,via,arrive |
 | 
			
		||||
           | a,3,d     | abcd,abcd | depart,via,arrive |
 | 
			
		||||
           | waypoints | route               |
 | 
			
		||||
           | a,1,d     | abcd,abcd,abcd,abcd |
 | 
			
		||||
           | a,2,d     | abcd,abcd,abcd,abcd |
 | 
			
		||||
           | a,3,d     | abcd,abcd,abcd,abcd |
 | 
			
		||||
 | 
			
		||||
    Scenario: Avoid weird loops 1
 | 
			
		||||
        Given the node locations
 | 
			
		||||
@ -47,8 +47,8 @@ Feature: Avoid weird loops caused by rounding errors
 | 
			
		||||
            | ie    |
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route | turns         |
 | 
			
		||||
            | x    | y  | hfgd  | depart,arrive |
 | 
			
		||||
            | from | to | route     |
 | 
			
		||||
            | x    | y  | hfgd,hfgd |
 | 
			
		||||
 | 
			
		||||
    Scenario: Avoid weird loops 2
 | 
			
		||||
        Given the node locations
 | 
			
		||||
@ -67,8 +67,8 @@ Feature: Avoid weird loops caused by rounding errors
 | 
			
		||||
            | cdec  |
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route | turns         |
 | 
			
		||||
            | x    | y  | abc   | depart,arrive |
 | 
			
		||||
            | from | to | route   |
 | 
			
		||||
            | x    | y  | abc,abc |
 | 
			
		||||
 | 
			
		||||
    @412
 | 
			
		||||
    Scenario: Avoid weird loops 3
 | 
			
		||||
@ -92,6 +92,6 @@ Feature: Avoid weird loops caused by rounding errors
 | 
			
		||||
            | cf    | primary     |
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | waypoints | route             | turns                                         |
 | 
			
		||||
            | a,2,d     | ab,be,ef,ef,cf,cd | depart,left,straight,via,straight,left,arrive |
 | 
			
		||||
            | a,1,d     | ab,be,ef,ef,cf,cd | depart,left,straight,via,straight,left,arrive |
 | 
			
		||||
            | waypoints | route                   |
 | 
			
		||||
            | a,2,d     | ab,be,ef,ef,ef,cf,cd,cd |
 | 
			
		||||
            | a,1,d     | ab,be,ef,ef,ef,cf,cd,cd |
 | 
			
		||||
 | 
			
		||||
@ -1,105 +0,0 @@
 | 
			
		||||
@routing @turns @testbot
 | 
			
		||||
Feature: Turn directions/codes
 | 
			
		||||
 | 
			
		||||
    Background:
 | 
			
		||||
        Given the profile "testbot"
 | 
			
		||||
 | 
			
		||||
    Scenario: Turn directions
 | 
			
		||||
        Given the query options
 | 
			
		||||
            | instructions | true |
 | 
			
		||||
        Given the node map
 | 
			
		||||
            | o | p | a | b | c |
 | 
			
		||||
            | n |   |   |   | d |
 | 
			
		||||
            | m |   | x |   | e |
 | 
			
		||||
            | l |   |   |   | f |
 | 
			
		||||
            | k | j | i | h | g |
 | 
			
		||||
 | 
			
		||||
        And the ways
 | 
			
		||||
            | nodes |
 | 
			
		||||
            | xa    |
 | 
			
		||||
            | xc    |
 | 
			
		||||
            | xe    |
 | 
			
		||||
            | xg    |
 | 
			
		||||
            | xi    |
 | 
			
		||||
            | xk    |
 | 
			
		||||
            | xm    |
 | 
			
		||||
            | xo    |
 | 
			
		||||
 | 
			
		||||
        When I match I should get
 | 
			
		||||
            | trace | route    | turns                      | matchings |
 | 
			
		||||
            | im    | xi,xm,xm | depart,left,arrive         | im        |
 | 
			
		||||
            | io    | xi,xo,xo | depart,slight_left,arrive  | io        |
 | 
			
		||||
            | ia    | xi,xa,xa | depart,straight,arrive     | ia        |
 | 
			
		||||
            | ic    | xi,xc,xc | depart,slight_right,arrive | ic        |
 | 
			
		||||
            | ie    | xi,xe,xe | depart,right,arrive        | ie        |
 | 
			
		||||
 | 
			
		||||
            | ko    | xk,xo,xo | depart,left,arrive         | ko        |
 | 
			
		||||
            | ka    | xk,xa,xa | depart,slight_left,arrive  | ka        |
 | 
			
		||||
            | kc    | xk,xc,xc | depart,straight,arrive     | kc        |
 | 
			
		||||
            | ke    | xk,xe,xe | depart,slight_right,arrive | ke        |
 | 
			
		||||
            | kg    | xk,xg,xg | depart,right,arrive        | kg        |
 | 
			
		||||
 | 
			
		||||
            | ma    | xm,xa,xa | depart,left,arrive         | ma        |
 | 
			
		||||
            | mc    | xm,xc,xc | depart,slight_left,arrive  | mc        |
 | 
			
		||||
            | me    | xm,xe,xe | depart,straight,arrive     | me        |
 | 
			
		||||
            | mg    | xm,xg,xg | depart,slight_right,arrive | mg        |
 | 
			
		||||
            | mi    | xm,xi,xi | depart,right,arrive        | mi        |
 | 
			
		||||
 | 
			
		||||
            | oc    | xo,xc,xc | depart,left,arrive         | oc        |
 | 
			
		||||
            | oe    | xo,xe,xe | depart,slight_left,arrive  | oe        |
 | 
			
		||||
            | og    | xo,xg,xg | depart,straight,arrive     | og        |
 | 
			
		||||
            | oi    | xo,xi,xi | depart,slight_right,arrive | oi        |
 | 
			
		||||
            | ok    | xo,xk,xk | depart,right,arrive        | ok        |
 | 
			
		||||
 | 
			
		||||
            | ae    | xa,xe,xe | depart,left,arrive         | ae        |
 | 
			
		||||
            | ag    | xa,xg,xg | depart,slight_left,arrive  | ag        |
 | 
			
		||||
            | ai    | xa,xi,xi | depart,straight,arrive     | ai        |
 | 
			
		||||
            | ak    | xa,xk,xk | depart,slight_right,arrive | ak        |
 | 
			
		||||
            | am    | xa,xm,xm | depart,right,arrive        | am        |
 | 
			
		||||
 | 
			
		||||
            | cg    | xc,xg,xg | depart,left,arrive         | cg        |
 | 
			
		||||
            | ci    | xc,xi,xi | depart,slight_left,arrive  | ci        |
 | 
			
		||||
            | ck    | xc,xk,xk | depart,straight,arrive     | ck        |
 | 
			
		||||
            | cm    | xc,xm,xm | depart,slight_right,arrive | cm        |
 | 
			
		||||
            | co    | xc,xo,xo | depart,right,arrive        | co        |
 | 
			
		||||
 | 
			
		||||
            | ei    | xe,xi,xi | depart,left,arrive         | ei        |
 | 
			
		||||
            | ek    | xe,xk,xk | depart,slight_left,arrive  | ek        |
 | 
			
		||||
            | em    | xe,xm,xm | depart,straight,arrive     | em        |
 | 
			
		||||
            | eo    | xe,xo,xo | depart,slight_right,arrive | eo        |
 | 
			
		||||
            | ea    | xe,xa,xa | depart,right,arrive        | ea        |
 | 
			
		||||
 | 
			
		||||
            | gk    | xg,xk,xk | depart,left,arrive         | gk        |
 | 
			
		||||
            | gm    | xg,xm,xm | depart,slight_left,arrive  | gm        |
 | 
			
		||||
            | go    | xg,xo,xo | depart,straight,arrive     | go        |
 | 
			
		||||
            | ga    | xg,xa,xa | depart,slight_right,arrive | ga        |
 | 
			
		||||
            | gc    | xg,xc,xc | depart,right,arrive        | gc        |
 | 
			
		||||
 | 
			
		||||
    Scenario: Turn directions
 | 
			
		||||
        Given the query options
 | 
			
		||||
            | instructions | true |
 | 
			
		||||
        Given the node map
 | 
			
		||||
            | o | p | a | b | c |
 | 
			
		||||
            | n |   |   |   | d |
 | 
			
		||||
            | m |   | x |   | e |
 | 
			
		||||
            | l |   |   |   | f |
 | 
			
		||||
            | k | j | i | h | g |
 | 
			
		||||
 | 
			
		||||
        And the ways
 | 
			
		||||
            | nodes |
 | 
			
		||||
            | xa    |
 | 
			
		||||
            | xc    |
 | 
			
		||||
            | xe    |
 | 
			
		||||
            | xg    |
 | 
			
		||||
            | xi    |
 | 
			
		||||
            | xk    |
 | 
			
		||||
            | xm    |
 | 
			
		||||
            | xo    |
 | 
			
		||||
 | 
			
		||||
        When I match I should get
 | 
			
		||||
            | trace | route    | turns                      | matchings | duration |
 | 
			
		||||
            | im    | xi,xm,xm | depart,left,arrive         | im        | 80       |
 | 
			
		||||
            | io    | xi,xo,xo | depart,slight_left,arrive  | io        | 88       |
 | 
			
		||||
            | ia    | xi,xa,xa | depart,straight,arrive     | ia        | 80       |
 | 
			
		||||
            | ic    | xi,xc,xc | depart,slight_right,arrive | ic        | 88       |
 | 
			
		||||
            | ie    | xi,xe,xe | depart,right,arrive        | ie        | 60       |
 | 
			
		||||
@ -40,9 +40,9 @@ Feature: Testbot - Travel mode
 | 
			
		||||
            | efg   | residential | solid  |
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route                    | modes                                    | turns                           |
 | 
			
		||||
            | a    | g  | road,liquid,solid,solid  | driving,river downstream,driving,driving | depart,straight,straight,arrive |
 | 
			
		||||
            | c    | g  | liquid,solid,solid       | river downstream,driving,driving         | depart,straight,arrive          |
 | 
			
		||||
            | from | to | route                    | modes                                    |
 | 
			
		||||
            | a    | g  | road,liquid,solid,solid  | driving,river downstream,driving,driving |
 | 
			
		||||
            | c    | g  | liquid,solid,solid       | river downstream,driving,driving         |
 | 
			
		||||
 | 
			
		||||
    @mokob @2166
 | 
			
		||||
    Scenario: Testbot - Modes in each direction, different forward/backward speeds
 | 
			
		||||
@ -145,9 +145,9 @@ Feature: Testbot - Travel mode
 | 
			
		||||
            | ab    | river   |
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | waypoints | routes   | modes                                              | turns             |
 | 
			
		||||
            | a,1,b     | ab,ab,ab | river downstream,river downstream,river downstream | depart,via,arrive |
 | 
			
		||||
            | b,1,a     | ab,ab,ab | river upstream,river upstream,river upstream       | depart,via,arrive |
 | 
			
		||||
            | waypoints | route       | modes                                                               |
 | 
			
		||||
            | a,1,b     | ab,ab,ab,ab | river downstream,river downstream,river downstream,river downstream |
 | 
			
		||||
            | b,1,a     | ab,ab,ab,ab | river upstream,river upstream,river upstream,river upstream         |
 | 
			
		||||
 | 
			
		||||
    @mokob @2166
 | 
			
		||||
    Scenario: Testbot - Starting at a tricky node
 | 
			
		||||
@ -175,11 +175,11 @@ Feature: Testbot - Travel mode
 | 
			
		||||
            | bc    | river   | Avenue |
 | 
			
		||||
 | 
			
		||||
       When I route I should get
 | 
			
		||||
            | from | to | route                | modes                                     | turns                  |
 | 
			
		||||
            | a    | c  | Avenue,Avenue,Avenue | driving,river downstream,river downstream | depart,straight,arrive |
 | 
			
		||||
            | c    | a  | Avenue,Avenue,Avenue | river upstream,driving,driving            | depart,straight,arrive |
 | 
			
		||||
            | 1    | 2  | Avenue,Avenue,Avenue | driving,river downstream,river downstream | depart,straight,arrive |
 | 
			
		||||
            | 2    | 1  | Avenue,Avenue,Avenue | river upstream,driving,driving            | depart,straight,arrive |
 | 
			
		||||
            | from | to | route                | modes                                     |
 | 
			
		||||
            | a    | c  | Avenue,Avenue,Avenue | driving,river downstream,river downstream |
 | 
			
		||||
            | c    | a  | Avenue,Avenue,Avenue | river upstream,driving,driving            |
 | 
			
		||||
            | 1    | 2  | Avenue,Avenue,Avenue | driving,river downstream,river downstream |
 | 
			
		||||
            | 2    | 1  | Avenue,Avenue,Avenue | river upstream,driving,driving            |
 | 
			
		||||
 | 
			
		||||
    Scenario: Testbot - Mode for routes
 | 
			
		||||
       Given the node map
 | 
			
		||||
@ -195,14 +195,14 @@ Feature: Testbot - Travel mode
 | 
			
		||||
            | ef    | primary |       |          |
 | 
			
		||||
 | 
			
		||||
       When I route I should get
 | 
			
		||||
            | from | to | route             | turns                                              | modes                                         |
 | 
			
		||||
            | a    | d  | ab,bc,cd,cd       | depart,right,left,arrive                           | driving,route,driving,driving                 |
 | 
			
		||||
            | d    | a  | cd,bc,ab,ab       | depart,right,left,arrive                           | driving,route,driving,driving                 |
 | 
			
		||||
            | c    | a  | bc,ab,ab          | depart,left,arrive                                 | route,driving,driving                         |
 | 
			
		||||
            | d    | b  | cd,bc,bc          | depart,right,arrive                                | driving,route,route                           |
 | 
			
		||||
            | a    | c  | ab,bc,bc          | depart,right,arrive                                | driving,route,route                           |
 | 
			
		||||
            | b    | d  | bc,cd,cd          | depart,left,arrive                                 | route,driving,driving                         |
 | 
			
		||||
            | a    | f  | ab,bc,cd,de,ef,ef | depart,right,left,straight,straight,arrive         | driving,route,driving,driving,driving,driving |
 | 
			
		||||
            | from | to | route             | modes                                         |
 | 
			
		||||
            | a    | d  | ab,bc,cd,cd       | driving,route,driving,driving                 |
 | 
			
		||||
            | d    | a  | cd,bc,ab,ab       | driving,route,driving,driving                 |
 | 
			
		||||
            | c    | a  | bc,ab,ab          | route,driving,driving                         |
 | 
			
		||||
            | d    | b  | cd,bc,bc          | driving,route,route                           |
 | 
			
		||||
            | a    | c  | ab,bc,bc          | driving,route,route                           |
 | 
			
		||||
            | b    | d  | bc,cd,cd          | route,driving,driving                         |
 | 
			
		||||
            | a    | f  | ab,bc,cd,de,ef,ef | driving,route,driving,driving,driving,driving |
 | 
			
		||||
 | 
			
		||||
    @mokob @2166
 | 
			
		||||
    Scenario: Testbot - Modes, triangle map
 | 
			
		||||
 | 
			
		||||
@ -24,15 +24,15 @@ Feature: Projection to nearest point on road
 | 
			
		||||
    Scenario: Projection onto way at high latitudes, 1km distance
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route   | bearing   | distance   |
 | 
			
		||||
            | b    | a  | abc,abc | 225,0     | 1000m -7 |
 | 
			
		||||
            | b    | c  | abc,abc | 45,0      | 1000m -7 |
 | 
			
		||||
            | a    | d  | abc,abc | 45,0      | 1000m -7 |
 | 
			
		||||
            | d    | a  | abc,abc | 225,0     | 1000m -7 |
 | 
			
		||||
            | c    | d  | abc,abc | 225,0     | 1000m -8 |
 | 
			
		||||
            | d    | c  | abc,abc | 45  -5 | 1000m -8 |
 | 
			
		||||
            | b    | a  | abc,abc | 225,0 +-1 | 1000m +- 7 |
 | 
			
		||||
            | b    | c  | abc,abc | 45,0  +-1 | 1000m +- 7 |
 | 
			
		||||
            | a    | d  | abc,abc | 45,0  +-1 | 1000m +- 7 |
 | 
			
		||||
            | d    | a  | abc,abc | 225,0 +-1 | 1000m +- 7 |
 | 
			
		||||
            | c    | d  | abc,abc | 225,0 +-1 | 1000m +- 8 |
 | 
			
		||||
            | d    | c  | abc,abc | 45 +-1    | 1000m +- 8 |
 | 
			
		||||
 | 
			
		||||
    Scenario: Projection onto way at high latitudes, no distance
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route     | distance |
 | 
			
		||||
            | d    | b  | abc   | 0m  +-5  |
 | 
			
		||||
            | b    | d  | abc   | 0m  +-5  |
 | 
			
		||||
            | d    | b  | abc,abc   | 0m  +-5  |
 | 
			
		||||
            | b    | d  | abc,abc   | 0m  +-5  |
 | 
			
		||||
 | 
			
		||||
@ -22,18 +22,18 @@ Feature: Roundabout Instructions
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route    | turns                            |
 | 
			
		||||
            | s    | t  | sa,tb | depart,roundabout-exit-1,arrive |
 | 
			
		||||
            | s    | u  | sa,uc | depart,roundabout-exit-2,arrive |
 | 
			
		||||
            | s    | v  | sa,vd | depart,roundabout-exit-3,arrive |
 | 
			
		||||
            | t    | u  | tb,uc | depart,roundabout-exit-1,arrive |
 | 
			
		||||
            | t    | v  | tb,vd | depart,roundabout-exit-2,arrive |
 | 
			
		||||
            | t    | s  | tb,sa | depart,roundabout-exit-3,arrive |
 | 
			
		||||
            | u    | v  | uc,vd | depart,roundabout-exit-1,arrive |
 | 
			
		||||
            | u    | s  | uc,sa | depart,roundabout-exit-2,arrive |
 | 
			
		||||
            | u    | t  | uc,tb | depart,roundabout-exit-3,arrive |
 | 
			
		||||
            | v    | s  | vd,sa | depart,roundabout-exit-1,arrive |
 | 
			
		||||
            | v    | t  | vd,tb | depart,roundabout-exit-2,arrive |
 | 
			
		||||
            | v    | u  | vd,uc | depart,roundabout-exit-3,arrive |
 | 
			
		||||
            | s    | t  | sa,tb,tb | depart,roundabout-exit-1,arrive |
 | 
			
		||||
            | s    | u  | sa,uc,uc | depart,roundabout-exit-2,arrive |
 | 
			
		||||
            | s    | v  | sa,vd,vd | depart,roundabout-exit-3,arrive |
 | 
			
		||||
            | t    | u  | tb,uc,uc | depart,roundabout-exit-1,arrive |
 | 
			
		||||
            | t    | v  | tb,vd,vd | depart,roundabout-exit-2,arrive |
 | 
			
		||||
            | t    | s  | tb,sa,sa | depart,roundabout-exit-3,arrive |
 | 
			
		||||
            | u    | v  | uc,vd,vd | depart,roundabout-exit-1,arrive |
 | 
			
		||||
            | u    | s  | uc,sa,sa | depart,roundabout-exit-2,arrive |
 | 
			
		||||
            | u    | t  | uc,tb,tb | depart,roundabout-exit-3,arrive |
 | 
			
		||||
            | v    | s  | vd,sa,sa | depart,roundabout-exit-1,arrive |
 | 
			
		||||
            | v    | t  | vd,tb,tb | depart,roundabout-exit-2,arrive |
 | 
			
		||||
            | v    | u  | vd,uc,uc | depart,roundabout-exit-3,arrive |
 | 
			
		||||
 | 
			
		||||
    Scenario: Testbot - Roundabout with oneway links
 | 
			
		||||
        Given the node map
 | 
			
		||||
@ -58,19 +58,19 @@ Feature: Roundabout Instructions
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route    | turns                            |
 | 
			
		||||
            | j    | k  | jb,ck | depart,roundabout-exit-1,arrive |
 | 
			
		||||
            | j    | m  | jb,em | depart,roundabout-exit-2,arrive |
 | 
			
		||||
            | j    | o  | jb,go | depart,roundabout-exit-3,arrive |
 | 
			
		||||
            | j    | i  | jb,ai | depart,roundabout-exit-4,arrive |
 | 
			
		||||
            | l    | m  | ld,em | depart,roundabout-exit-1,arrive |
 | 
			
		||||
            | l    | o  | ld,go | depart,roundabout-exit-2,arrive |
 | 
			
		||||
            | l    | i  | ld,ai | depart,roundabout-exit-3,arrive |
 | 
			
		||||
            | l    | k  | ld,ck | depart,roundabout-exit-4,arrive |
 | 
			
		||||
            | n    | o  | nf,go | depart,roundabout-exit-1,arrive |
 | 
			
		||||
            | n    | i  | nf,ai | depart,roundabout-exit-2,arrive |
 | 
			
		||||
            | n    | k  | nf,ck | depart,roundabout-exit-3,arrive |
 | 
			
		||||
            | n    | m  | nf,em | depart,roundabout-exit-4,arrive |
 | 
			
		||||
            | p    | i  | ph,ai | depart,roundabout-exit-1,arrive |
 | 
			
		||||
            | p    | k  | ph,ck | depart,roundabout-exit-2,arrive |
 | 
			
		||||
            | p    | m  | ph,em | depart,roundabout-exit-3,arrive |
 | 
			
		||||
            | p    | o  | ph,go | depart,roundabout-exit-4,arrive |
 | 
			
		||||
            | j    | k  | jb,ck,ck | depart,roundabout-exit-1,arrive |
 | 
			
		||||
            | j    | m  | jb,em,em | depart,roundabout-exit-2,arrive |
 | 
			
		||||
            | j    | o  | jb,go,go | depart,roundabout-exit-3,arrive |
 | 
			
		||||
            | j    | i  | jb,ai,ai | depart,roundabout-exit-4,arrive |
 | 
			
		||||
            | l    | m  | ld,em,em | depart,roundabout-exit-1,arrive |
 | 
			
		||||
            | l    | o  | ld,go,go | depart,roundabout-exit-2,arrive |
 | 
			
		||||
            | l    | i  | ld,ai,ai | depart,roundabout-exit-3,arrive |
 | 
			
		||||
            | l    | k  | ld,ck,ck | depart,roundabout-exit-4,arrive |
 | 
			
		||||
            | n    | o  | nf,go,go | depart,roundabout-exit-1,arrive |
 | 
			
		||||
            | n    | i  | nf,ai,ai | depart,roundabout-exit-2,arrive |
 | 
			
		||||
            | n    | k  | nf,ck,ck | depart,roundabout-exit-3,arrive |
 | 
			
		||||
            | n    | m  | nf,em,em | depart,roundabout-exit-4,arrive |
 | 
			
		||||
            | p    | i  | ph,ai,ai | depart,roundabout-exit-1,arrive |
 | 
			
		||||
            | p    | k  | ph,ck,ck | depart,roundabout-exit-2,arrive |
 | 
			
		||||
            | p    | m  | ph,em,em | depart,roundabout-exit-3,arrive |
 | 
			
		||||
            | p    | o  | ph,go,go | depart,roundabout-exit-4,arrive |
 | 
			
		||||
 | 
			
		||||
@ -27,5 +27,5 @@ Feature: Testbot - speeds
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route | speed        | time    | distance  |
 | 
			
		||||
            | a    | b  | ab,ab | 36 km/h      | 10s  | 100m     |
 | 
			
		||||
            | b    | a  | ab,ab | 16 km/h +- 1 | 23s  | 100m     |
 | 
			
		||||
            | a    | b  | ab,ab | 36 km/h      | 10s +-1 | 100m +- 1 |
 | 
			
		||||
            | b    | a  | ab,ab | 16 km/h +- 1 | 23s +-1 | 100m +- 1 |
 | 
			
		||||
 | 
			
		||||
@ -37,7 +37,7 @@ Feature: Via points
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route               | distance  | turns                      |
 | 
			
		||||
            | a    | k  | abcdefg,ehijk,ehijk |  34m +-1  | depart,slight_right,arrive |
 | 
			
		||||
            | a    | k  | abcdefg,ehijk,ehijk |  35m +-1  | depart,slight right,arrive |
 | 
			
		||||
 | 
			
		||||
    Scenario: Nearly Slight Turn
 | 
			
		||||
        Given the node map
 | 
			
		||||
 | 
			
		||||
@ -109,7 +109,7 @@ Feature: Turn directions/codes
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | from | to | route    | turns               |
 | 
			
		||||
            | a    | c  | ab,bc,bc | depart,straight,arrive |
 | 
			
		||||
            | c    | a  | bc,ab,ab | depart,straight,arrive |
 | 
			
		||||
            | x    | z  | xy,yz,yz | depart,straight,arrive |
 | 
			
		||||
            | z    | x  | yz,xy,xy | depart,straight,arrive |
 | 
			
		||||
            | a    | c  | ab,bc,bc | depart,left,arrive  |
 | 
			
		||||
            | c    | a  | bc,ab,ab | depart,right,arrive |
 | 
			
		||||
            | x    | z  | xy,yz,yz | depart,right,arrive |
 | 
			
		||||
            | z    | x  | yz,xy,xy | depart,left,arrive  |
 | 
			
		||||
 | 
			
		||||
@ -43,8 +43,8 @@ Feature: Via points
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | waypoints | route                |
 | 
			
		||||
            | a,d,c     | abc,bd,bd,bd,bd,abc,abc |
 | 
			
		||||
            | c,d,a     | abc,bd,bd,bd,bd,abc,abc |
 | 
			
		||||
            | a,d,c     | abc,bd,bd,bd,abc,abc |
 | 
			
		||||
            | c,d,a     | abc,bd,bd,bd,abc,abc |
 | 
			
		||||
 | 
			
		||||
    @mokob
 | 
			
		||||
    Scenario: Multiple via points
 | 
			
		||||
@ -80,8 +80,8 @@ Feature: Via points
 | 
			
		||||
            | ab    |
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | waypoints | route | turns             |
 | 
			
		||||
            | 1,1,4     | ab,ab | depart,via,arrive |
 | 
			
		||||
            | waypoints | route       |
 | 
			
		||||
            | 1,1,4     | ab,ab,ab,ab |
 | 
			
		||||
 | 
			
		||||
    Scenario: Via points on ring of oneways
 | 
			
		||||
    # xa it to avoid only having a single ring, which cna trigger edge cases
 | 
			
		||||
@ -101,12 +101,12 @@ Feature: Via points
 | 
			
		||||
            | fa    | yes    |
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | waypoints | route                               | distance  | turns                                                                                                 |
 | 
			
		||||
            | 1,3       | ab,bc,cd                            |  400m +-1 | depart,straight,straight,arrive                                                                       |
 | 
			
		||||
            | 3,1       | cd,de,ef,fa,ab                      | 1000m +-1 | depart,straight,straight,straight,right,arrive                                                        |
 | 
			
		||||
            | 1,2,3     | ab,bc,bc,cd                         |  400m +-1 | depart,straight,via,straight,arrive                                                                   |
 | 
			
		||||
            | 1,3,2     | ab,bc,cd,cd,de,ef,fa,ab,bc          | 1600m +-1 | depart,straight,straight,via,straight,straight,straight,right,straight,arrive                         |
 | 
			
		||||
            | 3,2,1     | cd,de,ef,fa,ab,bc,bc,cd,de,ef,fa,ab | 2400m +-1 | depart,straight,straight,straight,right,straight,via,straight,straight,straight,straight,right,arrive |
 | 
			
		||||
            | waypoints | route                                     | distance  |
 | 
			
		||||
            | 1,3       | ab,bc,cd,cd                               |  400m +-1 |
 | 
			
		||||
            | 3,1       | cd,de,ef,fa,ab,ab                         | 1000m +-1 |
 | 
			
		||||
            | 1,2,3     | ab,bc,bc,bc,cd,cd                         |  400m +-1 |
 | 
			
		||||
            | 1,3,2     | ab,bc,cd,cd,cd,de,ef,fa,ab,bc,bc          | 1600m +-1 |
 | 
			
		||||
            | 3,2,1     | cd,de,ef,fa,ab,bc,bc,bc,cd,de,ef,fa,ab,ab | 2400m +-1 |
 | 
			
		||||
 | 
			
		||||
    Scenario: Via points on ring on the same oneway
 | 
			
		||||
    # xa it to avoid only having a single ring, which cna trigger edge cases
 | 
			
		||||
@ -124,12 +124,12 @@ Feature: Via points
 | 
			
		||||
            | da    | yes    |
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | waypoints | route                         | distance  | turns                                                                               |
 | 
			
		||||
            | 1,3       | ab                            | 200m +-1  | depart,arrive                                                                       |
 | 
			
		||||
            | 3,1       | ab,bc,cd,da,ab                | 800m +-1  | depart,straight,straight,straight,right,arrive                                      |
 | 
			
		||||
            | 1,2,3     | ab,ab                         | 200m +-1  | depart,via,arrive                                                                   |
 | 
			
		||||
            | 1,3,2     | ab,ab,bc,cd,da,ab             | 1100m +-1 | depart,via,straight,straight,straight,right,arrive                                  |
 | 
			
		||||
            | 3,2,1     | ab,bc,cd,da,ab,ab,bc,cd,da,ab | 1800m     | depart,straight,straight,straight,right,via,straight,straight,straight,right,arrive |
 | 
			
		||||
            | waypoints | route                               | distance  |
 | 
			
		||||
            | 1,3       | ab,ab                               | 200m +-1  |
 | 
			
		||||
            | 3,1       | ab,bc,cd,da,ab,ab                   | 800m +-1  |
 | 
			
		||||
            | 1,2,3     | ab,ab,ab,ab                         | 200m +-1  |
 | 
			
		||||
            | 1,3,2     | ab,ab,ab,bc,cd,da,ab,ab             | 1100m +-1 |
 | 
			
		||||
            | 3,2,1     | ab,bc,cd,da,ab,ab,ab,bc,cd,da,ab,ab | 1800m +-1 |
 | 
			
		||||
 | 
			
		||||
    # See issue #1896
 | 
			
		||||
    Scenario: Via point at a dead end with oneway
 | 
			
		||||
@ -146,8 +146,8 @@ Feature: Via points
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | waypoints | route                |
 | 
			
		||||
            | a,d,c     | abc,bd,bd,bd,abc |
 | 
			
		||||
            | c,d,a     | abc,bd,bd,bd,abc |
 | 
			
		||||
            | a,d,c     | abc,bd,bd,bd,abc,abc |
 | 
			
		||||
            | c,d,a     | abc,bd,bd,bd,abc,abc |
 | 
			
		||||
 | 
			
		||||
    # See issue #1896
 | 
			
		||||
    Scenario: Via point at a dead end with barrier
 | 
			
		||||
@ -172,8 +172,8 @@ Feature: Via points
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | waypoints | route                   |
 | 
			
		||||
            | a,1,c     | abc,bd,bd,bd,abc |
 | 
			
		||||
            | c,1,a     | abc,bd,bd,bd,abc |
 | 
			
		||||
            | a,1,c     | abc,bd,bd,bd,bd,abc,abc |
 | 
			
		||||
            | c,1,a     | abc,bd,bd,bd,bd,abc,abc |
 | 
			
		||||
 | 
			
		||||
    Scenario: Via points on ring on the same oneway, forces one of the vertices to be top node
 | 
			
		||||
        Given the node map
 | 
			
		||||
@ -190,11 +190,11 @@ Feature: Via points
 | 
			
		||||
            | da    | yes    |
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | waypoints | route                      | distance   | turns                                                                     |
 | 
			
		||||
            | 2,1       | ab,bc,cd,da,ab             | 1100m +-1  | depart,straight,straight,straight,straight,arrive                         |
 | 
			
		||||
            | 4,3       | bc,cd,da,ab,bc             | 1100m +-1  | depart,straight,straight,straight,straight,arrive                         |
 | 
			
		||||
            | 6,5       | cd,da,ab,bc,cd             | 1100m +-1  | depart,straight,straight,straight,straight,arrive                         |
 | 
			
		||||
            | 8,7       | da,ab,bc,cd,da             | 1100m +-1  | depart,straight,straight,straight,straight,arrive                         |
 | 
			
		||||
            | waypoints | route                      | distance   |
 | 
			
		||||
            | 2,1       | ab,bc,cd,da,ab,ab          | 1100m +-1  |
 | 
			
		||||
            | 4,3       | bc,cd,da,ab,bc,bc          | 1100m +-1  |
 | 
			
		||||
            | 6,5       | cd,da,ab,bc,cd,cd          | 1100m +-1  |
 | 
			
		||||
            | 8,7       | da,ab,bc,cd,da,da          | 1100m +-1  |
 | 
			
		||||
 | 
			
		||||
    Scenario: Multiple Via points on ring on the same oneway, forces one of the vertices to be top node
 | 
			
		||||
        Given the node map
 | 
			
		||||
@ -212,7 +212,7 @@ Feature: Via points
 | 
			
		||||
            | da    | yes    |
 | 
			
		||||
 | 
			
		||||
        When I route I should get
 | 
			
		||||
            | waypoints | route                         | distance     | turns                                                                                     |
 | 
			
		||||
            | 3,2,1     | ab,bc,cd,da,ab,ab,bc,cd,da,ab | 3000m +-1    | depart,straight,straight,straight,straight,via,straight,straight,straight,straight,arrive |
 | 
			
		||||
            | 6,5,4     | bc,cd,da,ab,bc,bc,cd,da,ab,bc | 3000m +-1    | depart,straight,straight,straight,straight,via,straight,straight,straight,straight,arrive |
 | 
			
		||||
            | 9,8,7     | cd,da,ab,bc,cd,cd,da,ab,bc,cd | 3000m +-1    | depart,straight,straight,straight,straight,via,straight,straight,straight,straight,arrive |
 | 
			
		||||
            | waypoints | route                               | distance     |
 | 
			
		||||
            | 3,2,1     | ab,bc,cd,da,ab,ab,ab,bc,cd,da,ab,ab | 3000m +-1    |
 | 
			
		||||
            | 6,5,4     | bc,cd,da,ab,bc,bc,bc,cd,da,ab,bc,bc | 3000m +-1    |
 | 
			
		||||
            | 9,8,7     | cd,da,ab,bc,cd,cd,cd,da,ab,bc,cd,cd | 3000m +-1    |
 | 
			
		||||
 | 
			
		||||
@ -328,62 +328,42 @@ template <class DataFacadeT, class Derived> class BasicRoutingInterface
 | 
			
		||||
                BOOST_ASSERT(unpacked_path.size() > 0);
 | 
			
		||||
                unpacked_path.back().turn_instruction = turn_instruction;
 | 
			
		||||
                unpacked_path.back().duration_until_turn += (ed.distance - total_weight);
 | 
			
		||||
 | 
			
		||||
                if (is_first_segment)
 | 
			
		||||
                {
 | 
			
		||||
                    auto source_weight = start_traversed_in_reverse
 | 
			
		||||
                                             ? phantom_node_pair.source_phantom.reverse_weight
 | 
			
		||||
                                             : phantom_node_pair.source_phantom.forward_weight;
 | 
			
		||||
                    // Given this geometry:
 | 
			
		||||
                    // U---v---w---x---Z
 | 
			
		||||
                    //       s
 | 
			
		||||
                    // The above code will create segments for (v, w), (w,x) and (x, Z).
 | 
			
		||||
                    // However the first segment duration needs to be adjusted to the fact that the
 | 
			
		||||
                    // source phantom is in the middle of the segment.
 | 
			
		||||
                    // We do this by subtracting v--s from the duration.
 | 
			
		||||
 | 
			
		||||
                    BOOST_ASSERT(unpacked_path.front().duration_until_turn >= source_weight);
 | 
			
		||||
                    unpacked_path.front().duration_until_turn -= source_weight;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        std::size_t start_index = 0, end_index = 0;
 | 
			
		||||
        std::vector<unsigned> id_vector;
 | 
			
		||||
        facade->GetUncompressedGeometry(phantom_node_pair.target_phantom.forward_packed_geometry_id,
 | 
			
		||||
                                        id_vector);
 | 
			
		||||
        std::vector<EdgeWeight> weight_vector;
 | 
			
		||||
        facade->GetUncompressedWeights(phantom_node_pair.target_phantom.forward_packed_geometry_id,
 | 
			
		||||
                                       weight_vector);
 | 
			
		||||
        const bool is_local_path = (phantom_node_pair.source_phantom.forward_packed_geometry_id ==
 | 
			
		||||
                                    phantom_node_pair.target_phantom.forward_packed_geometry_id) &&
 | 
			
		||||
                                   unpacked_path.empty();
 | 
			
		||||
 | 
			
		||||
        std::size_t start_index = 0;
 | 
			
		||||
        if (is_local_path)
 | 
			
		||||
        {
 | 
			
		||||
        if (target_traversed_in_reverse)
 | 
			
		||||
        {
 | 
			
		||||
            facade->GetUncompressedGeometry(
 | 
			
		||||
                phantom_node_pair.target_phantom.reverse_packed_geometry_id, id_vector);
 | 
			
		||||
 | 
			
		||||
            facade->GetUncompressedWeights(
 | 
			
		||||
                phantom_node_pair.target_phantom.reverse_packed_geometry_id, weight_vector);
 | 
			
		||||
 | 
			
		||||
            if (is_local_path)
 | 
			
		||||
            {
 | 
			
		||||
                start_index =
 | 
			
		||||
                    id_vector.size() - phantom_node_pair.source_phantom.fwd_segment_position - 1;
 | 
			
		||||
            }
 | 
			
		||||
            end_index = id_vector.size() - phantom_node_pair.target_phantom.fwd_segment_position - 1;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            if (is_local_path)
 | 
			
		||||
            {
 | 
			
		||||
                start_index = phantom_node_pair.source_phantom.fwd_segment_position;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
            end_index = phantom_node_pair.target_phantom.fwd_segment_position;
 | 
			
		||||
            facade->GetUncompressedGeometry(
 | 
			
		||||
                phantom_node_pair.target_phantom.forward_packed_geometry_id, id_vector);
 | 
			
		||||
 | 
			
		||||
        std::size_t end_index = phantom_node_pair.target_phantom.fwd_segment_position;
 | 
			
		||||
        const std::size_t delta = target_traversed_in_reverse ? 1 : 0;
 | 
			
		||||
        if (target_traversed_in_reverse)
 | 
			
		||||
        {
 | 
			
		||||
            start_index += 1;
 | 
			
		||||
            std::reverse(id_vector.begin(), id_vector.end());
 | 
			
		||||
            std::reverse(weight_vector.begin(), weight_vector.end());
 | 
			
		||||
            end_index = id_vector.size() - phantom_node_pair.target_phantom.fwd_segment_position;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (start_index > end_index)
 | 
			
		||||
        {
 | 
			
		||||
            start_index = std::min(start_index, id_vector.size() - 1);
 | 
			
		||||
            facade->GetUncompressedWeights(
 | 
			
		||||
                phantom_node_pair.target_phantom.forward_packed_geometry_id, weight_vector);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Given the following compressed geometry:
 | 
			
		||||
@ -393,21 +373,22 @@ template <class DataFacadeT, class Derived> class BasicRoutingInterface
 | 
			
		||||
        // t: fwd_segment 3
 | 
			
		||||
        // -> (U, v), (v, w), (w, x)
 | 
			
		||||
        // note that (x, t) is _not_ included but needs to be added later.
 | 
			
		||||
        for (std::size_t i = start_index; i != end_index; (start_index < end_index ? ++i : --i))
 | 
			
		||||
        BOOST_ASSERT(start_index <= end_index);
 | 
			
		||||
        for (std::size_t i = start_index; i != end_index; ++i)
 | 
			
		||||
        {
 | 
			
		||||
            BOOST_ASSERT(i < id_vector.size());
 | 
			
		||||
            BOOST_ASSERT(phantom_node_pair.target_phantom.forward_travel_mode > 0);
 | 
			
		||||
            unpacked_path.push_back(
 | 
			
		||||
                PathData{id_vector[i],
 | 
			
		||||
                         phantom_node_pair.target_phantom.name_id,
 | 
			
		||||
                         weight_vector[i - delta],
 | 
			
		||||
                         weight_vector[i],
 | 
			
		||||
                         extractor::guidance::TurnInstruction::NO_TURN(),
 | 
			
		||||
                         target_traversed_in_reverse
 | 
			
		||||
                             ? phantom_node_pair.target_phantom.backward_travel_mode
 | 
			
		||||
                             : phantom_node_pair.target_phantom.forward_travel_mode});
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (is_local_path && unpacked_path.size() > 0)
 | 
			
		||||
        if (unpacked_path.size() > 0)
 | 
			
		||||
        {
 | 
			
		||||
            const auto source_weight = start_traversed_in_reverse
 | 
			
		||||
                                           ? phantom_node_pair.source_phantom.reverse_weight
 | 
			
		||||
 | 
			
		||||
@ -347,7 +347,7 @@ function way_function (way, result)
 | 
			
		||||
    if impliedOneway then
 | 
			
		||||
      result.forward_mode = mode.cycling
 | 
			
		||||
      result.backward_speed = bicycle_speeds["cycleway"]
 | 
			
		||||
      result.backward_mode = mode.cycling
 | 
			
		||||
      result.backward_mode = mode.inaccessible
 | 
			
		||||
    end
 | 
			
		||||
  elseif oneway == "-1" then
 | 
			
		||||
    result.forward_mode = mode.inaccessible
 | 
			
		||||
 | 
			
		||||
@ -70,13 +70,13 @@ function way_function (way, result)
 | 
			
		||||
 | 
			
		||||
    if highway == "river" then
 | 
			
		||||
      local temp_speed = speed_forw
 | 
			
		||||
      result.forward_mode = mode.river_up
 | 
			
		||||
      result.backward_mode = mode.river_down
 | 
			
		||||
      result.forward_mode = mode.river_down
 | 
			
		||||
      result.backward_mode = mode.river_up
 | 
			
		||||
      speed_forw = temp_speed*1.5
 | 
			
		||||
      speed_back = temp_speed/1.5
 | 
			
		||||
    elseif highway == "steps" then
 | 
			
		||||
      result.forward_mode = mode.steps_up
 | 
			
		||||
      result.backward_mode = mode.steps_down
 | 
			
		||||
      result.forward_mode = mode.steps_down
 | 
			
		||||
      result.backward_mode = mode.steps_up
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    if maxspeed_forward ~= nil and maxspeed_forward > 0 then
 | 
			
		||||
 | 
			
		||||
@ -301,7 +301,7 @@ void trimShortSegments(std::vector<RouteStep> &steps, LegGeometry &geometry)
 | 
			
		||||
    // few seconds of inaccuracy at both ends. This is acceptable, however, since the turn should
 | 
			
		||||
    // usually not be as relevant.
 | 
			
		||||
 | 
			
		||||
    if (steps.size() < 2)
 | 
			
		||||
    if (steps.size() < 2 || geometry.locations.size() <= 2)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    // if phantom node is located at the connection of two segments, either one can be selected as
 | 
			
		||||
@ -320,7 +320,8 @@ void trimShortSegments(std::vector<RouteStep> &steps, LegGeometry &geometry)
 | 
			
		||||
    BOOST_ASSERT(geometry.locations.size() >= steps.size());
 | 
			
		||||
    // Look for distances under 1m
 | 
			
		||||
    const bool zero_length_step = steps.front().distance <= 1;
 | 
			
		||||
    const bool duplicated_coordinate = geometry.locations[0] == geometry.locations[1];
 | 
			
		||||
    const bool duplicated_coordinate = util::coordinate_calculation::haversineDistance(
 | 
			
		||||
                                           geometry.locations[0], geometry.locations[1]) <= 1;
 | 
			
		||||
    if (zero_length_step || duplicated_coordinate)
 | 
			
		||||
    {
 | 
			
		||||
        // fixup the coordinate
 | 
			
		||||
@ -381,7 +382,7 @@ void trimShortSegments(std::vector<RouteStep> &steps, LegGeometry &geometry)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // make sure we still have enough segments
 | 
			
		||||
    if (steps.size() < 2)
 | 
			
		||||
    if (steps.size() < 2 || geometry.locations.size() == 2)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    BOOST_ASSERT(geometry.locations.size() >= steps.size());
 | 
			
		||||
@ -410,8 +411,9 @@ void trimShortSegments(std::vector<RouteStep> &steps, LegGeometry &geometry)
 | 
			
		||||
        next_to_last_step.mode = new_next_to_last.mode;
 | 
			
		||||
        // the geometry indices of the last step are already correct;
 | 
			
		||||
    }
 | 
			
		||||
    else if (geometry.locations[geometry.locations.size() - 2] ==
 | 
			
		||||
             geometry.locations[geometry.locations.size() - 1])
 | 
			
		||||
    else if (util::coordinate_calculation::haversineDistance(
 | 
			
		||||
                 geometry.locations[geometry.locations.size() - 2],
 | 
			
		||||
                 geometry.locations[geometry.locations.size() - 1]) <= 1)
 | 
			
		||||
    {
 | 
			
		||||
        // correct steps but duplicated coordinate in the end.
 | 
			
		||||
        // This can happen if the last coordinate snaps to a node in the unpacked geometry
 | 
			
		||||
 | 
			
		||||
@ -749,6 +749,9 @@ TurnInstruction TurnAnalysis::getInstructionForObvious(const std::size_t num_roa
 | 
			
		||||
                                                       const ConnectedRoad &road) const
 | 
			
		||||
{
 | 
			
		||||
    const auto type = findBasicTurnType(via_edge, road);
 | 
			
		||||
    // handle travel modes:
 | 
			
		||||
    const auto in_mode = node_based_graph.GetEdgeData(via_edge).travel_mode;
 | 
			
		||||
    const auto out_mode = node_based_graph.GetEdgeData(road.turn.eid).travel_mode;
 | 
			
		||||
    if (type == TurnType::Ramp)
 | 
			
		||||
    {
 | 
			
		||||
        return {TurnType::Ramp, getTurnDirection(road.turn.angle)};
 | 
			
		||||
@ -767,9 +770,18 @@ TurnInstruction TurnAnalysis::getInstructionForObvious(const std::size_t num_roa
 | 
			
		||||
                                  name_table.GetNameForID(out_data.name_id)))
 | 
			
		||||
            return {TurnType::NewName, getTurnDirection(road.turn.angle)};
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            if (in_mode == out_mode)
 | 
			
		||||
                return {TurnType::Suppressed, getTurnDirection(road.turn.angle)};
 | 
			
		||||
            else
 | 
			
		||||
                return {TurnType::Notification, getTurnDirection(road.turn.angle)};
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    BOOST_ASSERT(type == TurnType::Continue);
 | 
			
		||||
    if (in_mode != out_mode)
 | 
			
		||||
    {
 | 
			
		||||
        return {TurnType::Notification, getTurnDirection(road.turn.angle)};
 | 
			
		||||
    }
 | 
			
		||||
    if (num_roads > 2)
 | 
			
		||||
    {
 | 
			
		||||
        return {TurnType::Suppressed, getTurnDirection(road.turn.angle)};
 | 
			
		||||
@ -984,17 +996,9 @@ TurnAnalysis::handleThreeWayTurn(const EdgeID via_edge,
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        const unsigned in_name_id = node_based_graph.GetEdgeData(via_edge).name_id;
 | 
			
		||||
        const unsigned out_names[2] = {
 | 
			
		||||
            node_based_graph.GetEdgeData(intersection[1].turn.eid).name_id,
 | 
			
		||||
            node_based_graph.GetEdgeData(intersection[2].turn.eid).name_id};
 | 
			
		||||
        if (isObviousOfTwo(intersection[1], intersection[2]))
 | 
			
		||||
        {
 | 
			
		||||
            intersection[1].turn.instruction = {
 | 
			
		||||
                (in_name_id != INVALID_NAME_ID || out_names[0] != INVALID_NAME_ID)
 | 
			
		||||
                    ? TurnType::NewName
 | 
			
		||||
                    : TurnType::NoTurn,
 | 
			
		||||
                getTurnDirection(intersection[1].turn.angle)};
 | 
			
		||||
            intersection[1].turn.instruction = getInstructionForObvious(3,via_edge,intersection[1]);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
@ -1004,11 +1008,7 @@ TurnAnalysis::handleThreeWayTurn(const EdgeID via_edge,
 | 
			
		||||
 | 
			
		||||
        if (isObviousOfTwo(intersection[2], intersection[1]))
 | 
			
		||||
        {
 | 
			
		||||
            intersection[2].turn.instruction = {
 | 
			
		||||
                (in_name_id != INVALID_NAME_ID || out_names[1] != INVALID_NAME_ID)
 | 
			
		||||
                    ? TurnType::NewName
 | 
			
		||||
                    : TurnType::NoTurn,
 | 
			
		||||
                getTurnDirection(intersection[2].turn.angle)};
 | 
			
		||||
            intersection[2].turn.instruction = getInstructionForObvious(3,via_edge,intersection[2]);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user