Skip to content

Commit d9d8739

Browse files
committed
Account merged edges when processing turn legs
1 parent e7acc9d commit d9d8739

File tree

3 files changed

+51
-19
lines changed

3 files changed

+51
-19
lines changed

include/extractor/intersection/intersection_analysis.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,15 @@ IntersectionView getConnectedRoads(const util::NodeBasedDynamicGraph &graph,
7070
const TurnLanesIndexedArray &turn_lanes_data,
7171
const IntersectionEdge &incoming_edge);
7272

73+
IntersectionView getConnectedRoadsForEdgeGeometries(const util::NodeBasedDynamicGraph &graph,
74+
const EdgeBasedNodeDataContainer &node_data_container,
75+
const RestrictionMap &node_restriction_map,
76+
const std::unordered_set<NodeID> &barrier_nodes,
77+
const TurnLanesIndexedArray &turn_lanes_data,
78+
const IntersectionEdge &incoming_edge,
79+
const IntersectionEdgeGeometries &edge_geometries,
80+
const std::unordered_set<EdgeID> &merged_edge_ids);
81+
7382
// Graph Compression cannot compress every setting. For example any barrier/traffic light cannot
7483
// be compressed. As a result, a simple road of the form `a ----- b` might end up as having an
7584
// intermediate intersection, if there is a traffic light in between. If we want to look farther

src/extractor/edge_based_graph_factory.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -715,14 +715,14 @@ void EdgeBasedGraphFactory::GenerateEdgeExpandedEdges(
715715
++node_based_edge_counter;
716716

717717
const auto connected_roads =
718-
extractor::intersection::getConnectedRoads<false>(m_node_based_graph,
719-
m_edge_based_node_container,
720-
m_coordinates,
721-
m_compressed_edge_container,
722-
unconditional_node_restriction_map,
723-
m_barrier_nodes,
724-
turn_lanes_data,
725-
incoming_edge);
718+
extractor::intersection::getConnectedRoadsForEdgeGeometries(m_node_based_graph,
719+
m_edge_based_node_container,
720+
unconditional_node_restriction_map,
721+
m_barrier_nodes,
722+
turn_lanes_data,
723+
incoming_edge,
724+
edge_geometries,
725+
merged_edge_ids);
726726

727727
// check if this edge is part of a restriction via-way
728728
const auto is_restriction_via_edge =

src/extractor/intersection/intersection_analysis.cpp

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -741,36 +741,59 @@ IntersectionView getConnectedRoads(const util::NodeBasedDynamicGraph &graph,
741741
const IntersectionEdge &incoming_edge)
742742
{
743743
const auto intersection_node = graph.GetTarget(incoming_edge.edge);
744-
const auto &outgoing_edges = intersection::getOutgoingEdges(graph, intersection_node);
745744
auto edge_geometries = getIntersectionOutgoingGeometries<USE_CLOSE_COORDINATE>(
746745
graph, compressed_geometries, node_coordinates, intersection_node);
746+
auto merged_edge_ids = std::unordered_set<EdgeID>();
747+
748+
return getConnectedRoadsForEdgeGeometries(graph,
749+
node_data_container,
750+
node_restriction_map,
751+
barrier_nodes,
752+
turn_lanes_data,
753+
incoming_edge,
754+
edge_geometries,
755+
merged_edge_ids);
756+
}
757+
758+
IntersectionView getConnectedRoadsForEdgeGeometries(const util::NodeBasedDynamicGraph &graph,
759+
const EdgeBasedNodeDataContainer &node_data_container,
760+
const RestrictionMap &node_restriction_map,
761+
const std::unordered_set<NodeID> &barrier_nodes,
762+
const TurnLanesIndexedArray &turn_lanes_data,
763+
const IntersectionEdge &incoming_edge,
764+
const IntersectionEdgeGeometries &edge_geometries,
765+
const std::unordered_set<EdgeID> &merged_edge_ids)
766+
{
767+
const auto intersection_node = graph.GetTarget(incoming_edge.edge);
768+
const auto &outgoing_edges = intersection::getOutgoingEdges(graph, intersection_node);
747769

748770
// Add incoming edges with reversed bearings
749-
const auto edges_number = edge_geometries.size();
750-
edge_geometries.resize(2 * edges_number);
771+
auto processed_edge_geometries = IntersectionEdgeGeometries(edge_geometries);
772+
const auto edges_number = processed_edge_geometries.size();
773+
processed_edge_geometries.resize(2 * edges_number);
751774
for (std::size_t index = 0; index < edges_number; ++index)
752775
{
753-
const auto &geometry = edge_geometries[index];
776+
const auto &geometry = processed_edge_geometries[index];
754777
const auto remote_node = graph.GetTarget(geometry.eid);
755778
const auto incoming_edge = graph.FindEdge(remote_node, intersection_node);
756-
edge_geometries[edges_number + index] = {incoming_edge,
757-
util::bearing::reverse(geometry.initial_bearing),
758-
util::bearing::reverse(geometry.perceived_bearing),
759-
geometry.segment_length};
779+
processed_edge_geometries[edges_number + index] = {incoming_edge,
780+
util::bearing::reverse(geometry.initial_bearing),
781+
util::bearing::reverse(geometry.perceived_bearing),
782+
geometry.segment_length};
760783
}
761784

762785
// Enforce ordering of edges by IDs
763-
std::sort(edge_geometries.begin(), edge_geometries.end());
786+
std::sort(processed_edge_geometries.begin(), processed_edge_geometries.end());
764787

765788
return convertToIntersectionView(graph,
766789
node_data_container,
767790
node_restriction_map,
768791
barrier_nodes,
769-
edge_geometries,
792+
processed_edge_geometries,
770793
turn_lanes_data,
771794
incoming_edge,
772795
outgoing_edges,
773-
std::unordered_set<EdgeID>());
796+
merged_edge_ids);
774797
}
775798

776799
template IntersectionView

0 commit comments

Comments
 (0)