From f1140ec90369bffd3d9f7e0d085457759c74fc85 Mon Sep 17 00:00:00 2001 From: Patrick Niklaus Date: Fri, 15 Jan 2016 16:10:20 +0100 Subject: [PATCH] Fix uturns at dead-end streets --- extractor/edge_based_graph_factory.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/extractor/edge_based_graph_factory.cpp b/extractor/edge_based_graph_factory.cpp index f0c083d2d..1ddeb6a08 100644 --- a/extractor/edge_based_graph_factory.cpp +++ b/extractor/edge_based_graph_factory.cpp @@ -445,10 +445,23 @@ void EdgeBasedGraphFactory::GenerateEdgeExpandedEdges( } else { - if ((node_u == node_w) && (m_node_based_graph->GetOutDegree(node_v) > 1)) + if (node_u == node_w && m_node_based_graph->GetOutDegree(node_v) > 1) { - ++skipped_uturns_counter; - continue; + auto number_of_emmiting_bidirectional_edges = 0; + for (auto edge : m_node_based_graph->GetAdjacentEdgeRange(node_v)) + { + auto target = m_node_based_graph->GetTarget(edge); + auto reverse_edge = m_node_based_graph->FindEdge(target, node_v); + if (!m_node_based_graph->GetEdgeData(reverse_edge).reversed) + { + ++number_of_emmiting_bidirectional_edges; + } + } + if (number_of_emmiting_bidirectional_edges > 1) + { + ++skipped_uturns_counter; + continue; + } } }