@@ -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
776799template IntersectionView
0 commit comments