Correctly handle compressed traffic signals (#6724)
Unidirectional traffic signal segments are currently not compressed. This means traffic signals which are not on turns can be missed and not applied the correct penalty. This commit changes this behaviour to correctly handle the graph compression. Additional tests are added to ensure there is no regression for other cases (turns, restrictions). Co-authored-by: Michael Bell <michael@mjjbell.com>
This commit is contained in:
@@ -32,14 +32,14 @@ Feature: Car - Handle traffic lights
|
||||
| l | traffic_signals |
|
||||
|
||||
When I route I should get
|
||||
| from | to | time | # |
|
||||
| from | to | time | # |
|
||||
| 1 | 2 | 11.1s | no turn with no traffic light |
|
||||
| 3 | 4 | 13.1s | no turn with traffic light |
|
||||
| g | j | 18.7s | turn with no traffic light |
|
||||
| k | n | 20.7s | turn with traffic light |
|
||||
|
||||
|
||||
Scenario: Car - Traffic signal direction
|
||||
Scenario: Car - Traffic signal direction straight
|
||||
Given the node map
|
||||
"""
|
||||
a-1-b-2-c
|
||||
@@ -112,14 +112,14 @@ Feature: Car - Handle traffic lights
|
||||
|
||||
|
||||
|
||||
Scenario: Car - Encounters a traffic light
|
||||
Scenario: Car - Encounters a traffic light direction
|
||||
Given the node map
|
||||
"""
|
||||
a f k
|
||||
| | |
|
||||
b-c-d h-g-i l-m-n
|
||||
| | |
|
||||
e j o
|
||||
a f k p
|
||||
| | | |
|
||||
b-c-d h-g-i l-m-n q-r-s
|
||||
| | | |
|
||||
e j o t
|
||||
|
||||
"""
|
||||
|
||||
@@ -131,53 +131,70 @@ Feature: Car - Handle traffic lights
|
||||
| fgj | primary |
|
||||
| lmn | primary |
|
||||
| kmo | primary |
|
||||
| qrs | primary |
|
||||
| prt | primary |
|
||||
|
||||
And the nodes
|
||||
| node | highway | traffic_signals:direction |
|
||||
| g | traffic_signals | forward |
|
||||
| m | traffic_signals | backward |
|
||||
| g | traffic_signals | |
|
||||
| m | traffic_signals | forward |
|
||||
| r | traffic_signals | backward |
|
||||
|
||||
|
||||
When I route I should get
|
||||
# Base case
|
||||
| from | to | time | # |
|
||||
| a | d | 21.9s | no turn with no traffic light |
|
||||
| a | e | 22.2s | no turn with traffic light |
|
||||
| a | b | 18.7s | turn with no traffic light |
|
||||
| e | b | 21.9s | no turn with no traffic light |
|
||||
| e | a | 22.2s | no turn with traffic light |
|
||||
| a | e | 22.2s | no turn with no traffic light |
|
||||
| a | d | 21.9s | turn with no traffic light |
|
||||
| e | b | 21.9s | turn with no traffic light |
|
||||
| e | a | 22.2s | no turn with no traffic light |
|
||||
| e | d | 18.7s | turn with no traffic light |
|
||||
| d | e | 21.9s | no turn with no traffic light |
|
||||
| d | b | 11s | no turn with traffic light |
|
||||
| d | e | 21.9s | turn with no traffic light |
|
||||
| d | b | 11s | no turn with no traffic light |
|
||||
| d | a | 18.7s | turn with no traffic light |
|
||||
| b | a | 21.9s | no turn with no traffic light |
|
||||
| b | d | 11s | no turn with traffic light |
|
||||
| b | a | 21.9s | turn with no traffic light |
|
||||
| b | d | 11s | no turn with no traffic light |
|
||||
| b | e | 18.7s | turn with no traffic light |
|
||||
|
||||
| f | i | 23.9s | no turn with no traffic light |
|
||||
# All have traffic lights - 2s penalty
|
||||
| f | h | 20.7s | turn with traffic light |
|
||||
| f | j | 24.2s | no turn with traffic light |
|
||||
| f | h | 20.7s | turn with no traffic light |
|
||||
| j | h | 21.9s | no turn with no traffic light |
|
||||
| j | f | 22.2s | no turn with traffic light |
|
||||
| j | i | 18.7s | turn with no traffic light |
|
||||
| i | j | 21.9s | no turn with no traffic light |
|
||||
| i | h | 11s | no turn with traffic light |
|
||||
| i | f | 18.7s | turn with no traffic light |
|
||||
| h | f | 23.9s | no turn with no traffic light |
|
||||
| f | i | 23.9s | turn with traffic light |
|
||||
| j | h | 23.9s | turn with traffic light |
|
||||
| j | f | 24.2s | no turn with traffic light |
|
||||
| j | i | 20.7s | turn with traffic light |
|
||||
| i | j | 23.9s | turn with traffic light |
|
||||
| i | h | 13s | no turn with traffic light |
|
||||
| i | f | 20.7s | turn with traffic light |
|
||||
| h | f | 23.9s | turn with traffic light |
|
||||
| h | i | 13s | no turn with traffic light |
|
||||
| h | j | 20.7s | turn with no traffic light |
|
||||
|
||||
| k | n | 21.9s | no turn with no traffic light |
|
||||
| k | o | 22.2s | no turn with traffic light |
|
||||
| k | l | 18.7s | turn with no traffic light |
|
||||
| o | l | 23.9s | no turn with no traffic light |
|
||||
| o | k | 24.2s | no turn with traffic light |
|
||||
| o | n | 20.7s | turn with no traffic light |
|
||||
| n | o | 23.9s | no turn with no traffic light |
|
||||
| n | l | 13s | no turn with traffic light |
|
||||
| n | k | 20.7s | turn with no traffic light |
|
||||
| l | k | 21.9s | no turn with no traffic light |
|
||||
| l | n | 11s | no turn with traffic light |
|
||||
| l | o | 18.7s | turn with no traffic light |
|
||||
| h | j | 20.7s | turn with traffic light |
|
||||
# Front direction have traffic lights - 2s penalty
|
||||
| k | l | 20.7s | turn with traffic light |
|
||||
| k | o | 24.2s | no turn with traffic light |
|
||||
| k | n | 23.9s | turn with traffic light |
|
||||
| o | l | 21.9s | turn with no traffic light |
|
||||
| o | k | 22.2s | no turn with no traffic light |
|
||||
| o | n | 18.7s | turn with no traffic light |
|
||||
| n | o | 21.9s | turn with no traffic light |
|
||||
| n | l | 11s | no turn with no traffic light |
|
||||
| n | k | 18.7s | turn with no traffic light |
|
||||
| l | k | 23.9s | turn with traffic light |
|
||||
| l | n | 13s | no turn with traffic light |
|
||||
| l | o | 20.7s | turn with traffic light |
|
||||
# Reverse direction have traffic lights - 2s penalty
|
||||
| p | q | 18.7s | turn with no traffic light |
|
||||
| p | t | 22.2s | no turn with no traffic light |
|
||||
| p | s | 21.9s | turn with no traffic light |
|
||||
| t | q | 23.9s | turn with traffic light |
|
||||
| t | p | 24.2s | no turn with traffic light |
|
||||
| t | s | 20.7s | turn with traffic light |
|
||||
| s | t | 23.9s | turn with traffic light |
|
||||
| s | q | 13s | no turn with traffic light |
|
||||
| s | p | 20.7s | turn with traffic light |
|
||||
| q | p | 21.9s | turn with no traffic light |
|
||||
| q | s | 11s | no turn with no traffic light |
|
||||
| q | t | 18.7s | turn with no traffic light |
|
||||
|
||||
|
||||
Scenario: Traffic Signal Geometry
|
||||
@@ -343,3 +360,106 @@ Feature: Car - Handle traffic lights
|
||||
| from | to | route | speed | weights | time | distances | a:datasources | a:nodes | a:speed | a:duration | a:weight |
|
||||
| a | c | abc,abc | 65 km/h | 22.2,0 | 22.2s | 400m,0m | 1:0 | 1:2:3 | 18:18 | 11.1:11.1 | 11.1:11.1 |
|
||||
| c | a | abc,abc | 60 km/h | 24.2,0 | 24.2s | 400m,0m | 0:1 | 3:2:1 | 18:18 | 11.1:11.1 | 11.1:11.1 |
|
||||
|
||||
|
||||
Scenario: Car - Traffic signal straight direction with edge compression
|
||||
Given the node map
|
||||
"""
|
||||
a-1-b - c - d-2-e
|
||||
|
||||
"""
|
||||
|
||||
And the ways
|
||||
| nodes | highway |
|
||||
| abcde | primary |
|
||||
|
||||
And the nodes
|
||||
| node | highway | traffic_signals:direction |
|
||||
| c | traffic_signals | forward |
|
||||
|
||||
When I route I should get
|
||||
| from | to | time | weight | # |
|
||||
| 1 | 2 | 35.3s | 35.3 | no turn with traffic light |
|
||||
| 2 | 1 | 33.3s | 33.3 | no turn with no traffic light |
|
||||
|
||||
|
||||
Scenario: Car - Traffic signal turn direction with edge compression
|
||||
Given the node map
|
||||
"""
|
||||
d
|
||||
|
|
||||
2
|
||||
|
|
||||
a-1-b - c - f
|
||||
|
|
||||
e
|
||||
|
||||
j
|
||||
|
|
||||
4
|
||||
|
|
||||
g-3-h - i - k
|
||||
|
|
||||
l
|
||||
|
||||
"""
|
||||
|
||||
And the ways
|
||||
| nodes | highway |
|
||||
| abc | primary |
|
||||
| cf | primary |
|
||||
| fd | primary |
|
||||
| fe | primary |
|
||||
| ghi | primary |
|
||||
| ik | primary |
|
||||
| kj | primary |
|
||||
| kl | primary |
|
||||
|
||||
And the nodes
|
||||
| node | highway | traffic_signals:direction |
|
||||
| k | traffic_signals | forward |
|
||||
|
||||
When I route I should get
|
||||
| from | to | time | weight | # |
|
||||
| 1 | 2 | 44.2s | 44.2 | turn with no traffic light |
|
||||
| 2 | 1 | 41s | 41 | turn with no traffic light |
|
||||
| 3 | 4 | 46.2s | 46.2 | turn with traffic light |
|
||||
| 4 | 3 | 41s | 41 | turn with no traffic light |
|
||||
|
||||
|
||||
Scenario: Car - Traffic signal turn direction with turn restriction
|
||||
Given the node map
|
||||
"""
|
||||
d
|
||||
|
|
||||
2
|
||||
|
|
||||
a-1-b - c - f
|
||||
|
|
||||
e
|
||||
|
||||
"""
|
||||
|
||||
And the ways
|
||||
| nodes | highway |
|
||||
| abc | primary |
|
||||
| cf | primary |
|
||||
| fd | primary |
|
||||
| fe | primary |
|
||||
|
||||
And the nodes
|
||||
| node | highway | traffic_signals:direction |
|
||||
| f | traffic_signals | forward |
|
||||
|
||||
And the relations
|
||||
| type | way:from | way:to | way:via | restriction |
|
||||
| restriction | abc | fe | cf | no_right_turn |
|
||||
|
||||
And the relations
|
||||
| type | way:from | way:to | node:via | restriction |
|
||||
| restriction | df | fc | f | right_turn_only |
|
||||
|
||||
When I route I should get
|
||||
| from | to | time | weight | # |
|
||||
| 1 | 2 | 46.2s | 46.2 | turn with traffic light |
|
||||
| 2 | 1 | 41s | 41 | turn with no traffic light |
|
||||
|
||||
Reference in New Issue
Block a user