@@ -741,36 +741,59 @@ IntersectionView getConnectedRoads(const util::NodeBasedDynamicGraph &graph,
741
741
const IntersectionEdge &incoming_edge)
742
742
{
743
743
const auto intersection_node = graph.GetTarget (incoming_edge.edge );
744
- const auto &outgoing_edges = intersection::getOutgoingEdges (graph, intersection_node);
745
744
auto edge_geometries = getIntersectionOutgoingGeometries<USE_CLOSE_COORDINATE>(
746
745
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);
747
769
748
770
// 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);
751
774
for (std::size_t index = 0 ; index < edges_number; ++index)
752
775
{
753
- const auto &geometry = edge_geometries [index];
776
+ const auto &geometry = processed_edge_geometries [index];
754
777
const auto remote_node = graph.GetTarget (geometry.eid );
755
778
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 };
760
783
}
761
784
762
785
// 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 ());
764
787
765
788
return convertToIntersectionView (graph,
766
789
node_data_container,
767
790
node_restriction_map,
768
791
barrier_nodes,
769
- edge_geometries ,
792
+ processed_edge_geometries ,
770
793
turn_lanes_data,
771
794
incoming_edge,
772
795
outgoing_edges,
773
- std::unordered_set<EdgeID>() );
796
+ merged_edge_ids );
774
797
}
775
798
776
799
template IntersectionView
0 commit comments