From be1b86657c07a5a0461cf6f22c7892ef6030981f Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Mon, 31 Oct 2022 21:36:08 +0100 Subject: [PATCH] Take stop signs into account during routing --- features/car/give_way_sign_penalties.feature | 46 ++++++++++++++++++-- features/car/stop_sign_penalties.feature | 39 ++++++++++++++++- src/extractor/extraction_containers.cpp | 2 +- taginfo.json | 1 + 4 files changed, 82 insertions(+), 6 deletions(-) diff --git a/features/car/give_way_sign_penalties.feature b/features/car/give_way_sign_penalties.feature index 4e7e28fe8..ed84ab922 100644 --- a/features/car/give_way_sign_penalties.feature +++ b/features/car/give_way_sign_penalties.feature @@ -33,7 +33,45 @@ Feature: Car - Handle give way signs When I route I should get | from | to | time | # | - | 1 | 2 | 11.1s | no turn with no stop sign | - | 3 | 4 | 13.1s | no turn with stop sign | - | g | j | 18.7s | turn with no stop sign | - | k | n | 20.7s | turn with stop sign | \ No newline at end of file + | 1 | 2 | 11.1s | no turn with no give way | + | 3 | 4 | 13.1s | no turn with give way | + | g | j | 18.7s | turn with no give way | + | k | n | 20.7s | turn with give way | + + + Scenario: Car - Give way direction + Given the node map + """ + a-1-b-2-c + + d-3-e-4-f + + g-5-h-6-i + + j-7-k-8-l + + """ + + And the ways + | nodes | highway | + | abc | primary | + | def | primary | + | ghi | primary | + | jkl | primary | + + And the nodes + | node | highway | direction | + | e | give_way | | + | h | give_way | forward | + | k | give_way | backward | + + When I route I should get + | from | to | time | weight | # | + | 1 | 2 | 11.1s | 11.1 | no turn with no give way | + | 2 | 1 | 11.1s | 11.1 | no turn with no give way | + | 3 | 4 | 13.1s | 13.1 | no turn with give way | + | 4 | 3 | 13.1s | 13.1 | no turn with give way | + | 5 | 6 | 13.1s | 13.1 | no turn with give way | + | 6 | 5 | 11.1s | 11.1 | no turn with no give way | + | 7 | 8 | 11.1s | 11.1 | no turn with no give way | + | 8 | 7 | 13.1s | 13.1 | no turn with give way | diff --git a/features/car/stop_sign_penalties.feature b/features/car/stop_sign_penalties.feature index 1cccc30d8..8ae42263a 100644 --- a/features/car/stop_sign_penalties.feature +++ b/features/car/stop_sign_penalties.feature @@ -36,4 +36,41 @@ Feature: Car - Handle stop signs | 1 | 2 | 11.1s | no turn with no stop sign | | 3 | 4 | 13.1s | no turn with stop sign | | g | j | 18.7s | turn with no stop sign | - | k | n | 20.7s | turn with stop sign | \ No newline at end of file + | k | n | 20.7s | turn with stop sign | + + Scenario: Car - Stop sign direction + Given the node map + """ + a-1-b-2-c + + d-3-e-4-f + + g-5-h-6-i + + j-7-k-8-l + + """ + + And the ways + | nodes | highway | + | abc | primary | + | def | primary | + | ghi | primary | + | jkl | primary | + + And the nodes + | node | highway | direction | + | e | stop | | + | h | stop | forward | + | k | stop | backward | + + When I route I should get + | from | to | time | weight | # | + | 1 | 2 | 11.1s | 11.1 | no turn with no stop sign | + | 2 | 1 | 11.1s | 11.1 | no turn with no stop sign | + | 3 | 4 | 13.1s | 13.1 | no turn with stop sign | + | 4 | 3 | 13.1s | 13.1 | no turn with stop sign | + | 5 | 6 | 13.1s | 13.1 | no turn with stop sign | + | 6 | 5 | 11.1s | 11.1 | no turn with no stop sign | + | 7 | 8 | 11.1s | 11.1 | no turn with no stop sign | + | 8 | 7 | 13.1s | 13.1 | no turn with stop sign | diff --git a/src/extractor/extraction_containers.cpp b/src/extractor/extraction_containers.cpp index 43dc38938..1fab34db5 100644 --- a/src/extractor/extraction_containers.cpp +++ b/src/extractor/extraction_containers.cpp @@ -1197,7 +1197,7 @@ ExtractionContainers::IdentifyTrafficFlowControlNodes( }; std::for_each(external_nodes.begin(), external_nodes.end(), mark_traffic_nodes); - // Extract all the segments that lead up to unidirectional traffic signals. + // Extract all the segments that lead up to unidirectional traffic flow control nodes. const auto set_segments = [&](const size_t way_list_idx, auto const & /*unused*/) { const auto node_start_offset = used_node_id_list.begin() + way_node_id_offsets[way_list_idx]; diff --git a/taginfo.json b/taginfo.json index 3107a5c61..536564eff 100644 --- a/taginfo.json +++ b/taginfo.json @@ -126,6 +126,7 @@ {"key": "route", "object_types": ["way"]}, {"key": "highway", "value": "traffic_signals", "object_types": ["node"]}, {"key": "highway", "value": "stop", "object_types": ["node"]}, + {"key": "highway", "value": "give_way", "object_types": ["node"]}, {"key": "highway", "value": "crossing", "object_types": ["node"]}, {"key": "access", "value": "yes"}, {"key": "access", "value": "motorcar"},