Account merged edges when processing turn legs
This commit is contained in:
parent
e7acc9df76
commit
d9d873903f
@ -70,6 +70,15 @@ IntersectionView getConnectedRoads(const util::NodeBasedDynamicGraph &graph,
|
|||||||
const TurnLanesIndexedArray &turn_lanes_data,
|
const TurnLanesIndexedArray &turn_lanes_data,
|
||||||
const IntersectionEdge &incoming_edge);
|
const IntersectionEdge &incoming_edge);
|
||||||
|
|
||||||
|
IntersectionView getConnectedRoadsForEdgeGeometries(const util::NodeBasedDynamicGraph &graph,
|
||||||
|
const EdgeBasedNodeDataContainer &node_data_container,
|
||||||
|
const RestrictionMap &node_restriction_map,
|
||||||
|
const std::unordered_set<NodeID> &barrier_nodes,
|
||||||
|
const TurnLanesIndexedArray &turn_lanes_data,
|
||||||
|
const IntersectionEdge &incoming_edge,
|
||||||
|
const IntersectionEdgeGeometries &edge_geometries,
|
||||||
|
const std::unordered_set<EdgeID> &merged_edge_ids);
|
||||||
|
|
||||||
// Graph Compression cannot compress every setting. For example any barrier/traffic light cannot
|
// Graph Compression cannot compress every setting. For example any barrier/traffic light cannot
|
||||||
// be compressed. As a result, a simple road of the form `a ----- b` might end up as having an
|
// be compressed. As a result, a simple road of the form `a ----- b` might end up as having an
|
||||||
// intermediate intersection, if there is a traffic light in between. If we want to look farther
|
// intermediate intersection, if there is a traffic light in between. If we want to look farther
|
||||||
|
@ -715,14 +715,14 @@ void EdgeBasedGraphFactory::GenerateEdgeExpandedEdges(
|
|||||||
++node_based_edge_counter;
|
++node_based_edge_counter;
|
||||||
|
|
||||||
const auto connected_roads =
|
const auto connected_roads =
|
||||||
extractor::intersection::getConnectedRoads<false>(m_node_based_graph,
|
extractor::intersection::getConnectedRoadsForEdgeGeometries(m_node_based_graph,
|
||||||
m_edge_based_node_container,
|
m_edge_based_node_container,
|
||||||
m_coordinates,
|
unconditional_node_restriction_map,
|
||||||
m_compressed_edge_container,
|
m_barrier_nodes,
|
||||||
unconditional_node_restriction_map,
|
turn_lanes_data,
|
||||||
m_barrier_nodes,
|
incoming_edge,
|
||||||
turn_lanes_data,
|
edge_geometries,
|
||||||
incoming_edge);
|
merged_edge_ids);
|
||||||
|
|
||||||
// check if this edge is part of a restriction via-way
|
// check if this edge is part of a restriction via-way
|
||||||
const auto is_restriction_via_edge =
|
const auto is_restriction_via_edge =
|
||||||
|
@ -741,36 +741,59 @@ IntersectionView getConnectedRoads(const util::NodeBasedDynamicGraph &graph,
|
|||||||
const IntersectionEdge &incoming_edge)
|
const IntersectionEdge &incoming_edge)
|
||||||
{
|
{
|
||||||
const auto intersection_node = graph.GetTarget(incoming_edge.edge);
|
const auto intersection_node = graph.GetTarget(incoming_edge.edge);
|
||||||
const auto &outgoing_edges = intersection::getOutgoingEdges(graph, intersection_node);
|
|
||||||
auto edge_geometries = getIntersectionOutgoingGeometries<USE_CLOSE_COORDINATE>(
|
auto edge_geometries = getIntersectionOutgoingGeometries<USE_CLOSE_COORDINATE>(
|
||||||
graph, compressed_geometries, node_coordinates, intersection_node);
|
graph, compressed_geometries, node_coordinates, intersection_node);
|
||||||
|
auto merged_edge_ids = std::unordered_set<EdgeID>();
|
||||||
|
|
||||||
|
return getConnectedRoadsForEdgeGeometries(graph,
|
||||||
|
node_data_container,
|
||||||
|
node_restriction_map,
|
||||||
|
barrier_nodes,
|
||||||
|
turn_lanes_data,
|
||||||
|
incoming_edge,
|
||||||
|
edge_geometries,
|
||||||
|
merged_edge_ids);
|
||||||
|
}
|
||||||
|
|
||||||
|
IntersectionView getConnectedRoadsForEdgeGeometries(const util::NodeBasedDynamicGraph &graph,
|
||||||
|
const EdgeBasedNodeDataContainer &node_data_container,
|
||||||
|
const RestrictionMap &node_restriction_map,
|
||||||
|
const std::unordered_set<NodeID> &barrier_nodes,
|
||||||
|
const TurnLanesIndexedArray &turn_lanes_data,
|
||||||
|
const IntersectionEdge &incoming_edge,
|
||||||
|
const IntersectionEdgeGeometries &edge_geometries,
|
||||||
|
const std::unordered_set<EdgeID> &merged_edge_ids)
|
||||||
|
{
|
||||||
|
const auto intersection_node = graph.GetTarget(incoming_edge.edge);
|
||||||
|
const auto &outgoing_edges = intersection::getOutgoingEdges(graph, intersection_node);
|
||||||
|
|
||||||
// Add incoming edges with reversed bearings
|
// Add incoming edges with reversed bearings
|
||||||
const auto edges_number = edge_geometries.size();
|
auto processed_edge_geometries = IntersectionEdgeGeometries(edge_geometries);
|
||||||
edge_geometries.resize(2 * edges_number);
|
const auto edges_number = processed_edge_geometries.size();
|
||||||
|
processed_edge_geometries.resize(2 * edges_number);
|
||||||
for (std::size_t index = 0; index < edges_number; ++index)
|
for (std::size_t index = 0; index < edges_number; ++index)
|
||||||
{
|
{
|
||||||
const auto &geometry = edge_geometries[index];
|
const auto &geometry = processed_edge_geometries[index];
|
||||||
const auto remote_node = graph.GetTarget(geometry.eid);
|
const auto remote_node = graph.GetTarget(geometry.eid);
|
||||||
const auto incoming_edge = graph.FindEdge(remote_node, intersection_node);
|
const auto incoming_edge = graph.FindEdge(remote_node, intersection_node);
|
||||||
edge_geometries[edges_number + index] = {incoming_edge,
|
processed_edge_geometries[edges_number + index] = {incoming_edge,
|
||||||
util::bearing::reverse(geometry.initial_bearing),
|
util::bearing::reverse(geometry.initial_bearing),
|
||||||
util::bearing::reverse(geometry.perceived_bearing),
|
util::bearing::reverse(geometry.perceived_bearing),
|
||||||
geometry.segment_length};
|
geometry.segment_length};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enforce ordering of edges by IDs
|
// Enforce ordering of edges by IDs
|
||||||
std::sort(edge_geometries.begin(), edge_geometries.end());
|
std::sort(processed_edge_geometries.begin(), processed_edge_geometries.end());
|
||||||
|
|
||||||
return convertToIntersectionView(graph,
|
return convertToIntersectionView(graph,
|
||||||
node_data_container,
|
node_data_container,
|
||||||
node_restriction_map,
|
node_restriction_map,
|
||||||
barrier_nodes,
|
barrier_nodes,
|
||||||
edge_geometries,
|
processed_edge_geometries,
|
||||||
turn_lanes_data,
|
turn_lanes_data,
|
||||||
incoming_edge,
|
incoming_edge,
|
||||||
outgoing_edges,
|
outgoing_edges,
|
||||||
std::unordered_set<EdgeID>());
|
merged_edge_ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
template IntersectionView
|
template IntersectionView
|
||||||
|
Loading…
Reference in New Issue
Block a user