Add low precision intersection views back
This commit is contained in:
parent
0568dca4a3
commit
153f9b02a5
@ -578,7 +578,7 @@ std::size_t IntersectionHandler::findObviousTurn(const EdgeID via_edge,
|
||||
if (node_based_graph.GetTarget(parameters.edge) == node_at_intersection)
|
||||
return {};
|
||||
|
||||
return intersection::getConnectedRoads(node_based_graph,
|
||||
return intersection::getConnectedRoads<false>(node_based_graph,
|
||||
node_data_container,
|
||||
node_coordinates,
|
||||
compressed_geometries,
|
||||
|
@ -222,7 +222,7 @@ NodeBasedGraphWalker::TraverseRoad(NodeID current_node_id,
|
||||
|
||||
// look at the next intersection
|
||||
const auto next_intersection =
|
||||
intersection::getConnectedRoads(node_based_graph,
|
||||
intersection::getConnectedRoads<true>(node_based_graph,
|
||||
node_data_container,
|
||||
node_coordinates,
|
||||
compressed_geometries,
|
||||
|
@ -60,6 +60,7 @@ convertToIntersectionView(const util::NodeBasedDynamicGraph &graph,
|
||||
// Check for restrictions/barriers and generate a list of valid and invalid turns present at
|
||||
// the node reached from `incoming_edge`. The resulting candidates have to be analyzed
|
||||
// for their actual instructions later on.
|
||||
template<bool USE_CLOSE_BEARINGS>
|
||||
guidance::IntersectionView
|
||||
getConnectedRoads(const util::NodeBasedDynamicGraph &graph,
|
||||
const EdgeBasedNodeDataContainer &node_data_container,
|
||||
|
@ -482,7 +482,7 @@ IntersectionHandler::getNextIntersection(const NodeID at, const EdgeID via) cons
|
||||
return boost::none;
|
||||
}
|
||||
|
||||
auto intersection = intersection::getConnectedRoads(node_based_graph,
|
||||
auto intersection = intersection::getConnectedRoads<false>(node_based_graph,
|
||||
node_data_container,
|
||||
node_coordinates,
|
||||
compressed_geometries,
|
||||
|
@ -558,7 +558,7 @@ bool MergableRoadDetector::IsLinkRoad(const NodeID intersection_node,
|
||||
const auto next_intersection_parameters =
|
||||
intersection::skipDegreeTwoNodes(node_based_graph, {intersection_node, road.eid});
|
||||
const auto next_intersection_along_road =
|
||||
intersection::getConnectedRoads(node_based_graph,
|
||||
intersection::getConnectedRoads<false>(node_based_graph,
|
||||
node_data_container,
|
||||
node_coordinates,
|
||||
compressed_geometries,
|
||||
|
@ -279,7 +279,7 @@ void IntersectionFinderAccumulator::update(const NodeID from_node,
|
||||
nid = from_node;
|
||||
via_edge_id = via_edge;
|
||||
|
||||
intersection = intersection::getConnectedRoads(node_based_graph,
|
||||
intersection = intersection::getConnectedRoads<true>(node_based_graph,
|
||||
node_data_container,
|
||||
node_coordinates,
|
||||
compressed_geometries,
|
||||
|
@ -558,7 +558,7 @@ operator()(const NodeID /*nid*/, const EdgeID source_edge_id, Intersection inter
|
||||
}
|
||||
else
|
||||
{
|
||||
const auto skip_traffic_light_intersection = intersection::getConnectedRoads(
|
||||
const auto skip_traffic_light_intersection = intersection::getConnectedRoads<false>(
|
||||
node_based_graph,
|
||||
node_data_container,
|
||||
node_coordinates,
|
||||
|
@ -75,7 +75,7 @@ bool findPreviousIntersection(const NodeID node_v,
|
||||
return false;
|
||||
|
||||
const auto node_v_reverse_intersection =
|
||||
intersection::getConnectedRoads(node_based_graph,
|
||||
intersection::getConnectedRoads<true>(node_based_graph,
|
||||
node_data_container,
|
||||
node_coordinates,
|
||||
compressed_geometries,
|
||||
@ -95,7 +95,7 @@ bool findPreviousIntersection(const NodeID node_v,
|
||||
|
||||
const auto node_u = node_based_graph.GetTarget(straightmost_at_v_in_reverse->eid);
|
||||
const auto node_u_reverse_intersection =
|
||||
intersection::getConnectedRoads(node_based_graph,
|
||||
intersection::getConnectedRoads<true>(node_based_graph,
|
||||
node_data_container,
|
||||
node_coordinates,
|
||||
compressed_geometries,
|
||||
@ -120,7 +120,7 @@ bool findPreviousIntersection(const NodeID node_v,
|
||||
return false;
|
||||
}
|
||||
|
||||
result_intersection = intersection::getConnectedRoads(node_based_graph,
|
||||
result_intersection = intersection::getConnectedRoads<false>(node_based_graph,
|
||||
node_data_container,
|
||||
node_coordinates,
|
||||
compressed_geometries,
|
||||
|
@ -575,7 +575,7 @@ std::pair<LaneDataVector, LaneDataVector> TurnLaneHandler::partitionLaneData(
|
||||
const auto next_intersection =
|
||||
turn_analysis.AssignTurnTypes(at,
|
||||
straightmost->eid,
|
||||
intersection::getConnectedRoads(node_based_graph,
|
||||
intersection::getConnectedRoads<false>(node_based_graph,
|
||||
node_data_container,
|
||||
node_coordinates,
|
||||
compressed_geometries,
|
||||
|
@ -202,6 +202,7 @@ auto getIntersectionLanes(const util::NodeBasedDynamicGraph &graph, const NodeID
|
||||
return max_lanes_intersection;
|
||||
}
|
||||
|
||||
template<bool USE_CLOSE_BEARINGS>
|
||||
IntersectionEdgeGeometries
|
||||
getIntersectionOutgoingGeometries(const util::NodeBasedDynamicGraph &graph,
|
||||
const extractor::CompressedEdgeContainer &compressed_geometries,
|
||||
@ -232,7 +233,7 @@ getIntersectionOutgoingGeometries(const util::NodeBasedDynamicGraph &graph,
|
||||
util::coordinate_calculation::bearing(geometry[0], close_coordinate);
|
||||
|
||||
const auto representative_coordinate =
|
||||
graph.GetOutDegree(intersection_node) <= 2
|
||||
USE_CLOSE_BEARINGS || graph.GetOutDegree(intersection_node) <= 2
|
||||
? coordinate_extractor.GetCoordinateCloseToTurn(
|
||||
intersection_node, outgoing_edge, false, remote_node)
|
||||
: coordinate_extractor.ExtractRepresentativeCoordinate(intersection_node,
|
||||
@ -265,7 +266,7 @@ getIntersectionGeometries(const util::NodeBasedDynamicGraph &graph,
|
||||
const guidance::MergableRoadDetector &detector,
|
||||
const NodeID intersection_node)
|
||||
{
|
||||
IntersectionEdgeGeometries edge_geometries = getIntersectionOutgoingGeometries(
|
||||
IntersectionEdgeGeometries edge_geometries = getIntersectionOutgoingGeometries<false>(
|
||||
graph, compressed_geometries, node_coordinates, intersection_node);
|
||||
|
||||
const auto edges_number = edge_geometries.size();
|
||||
@ -318,7 +319,7 @@ getIntersectionGeometries(const util::NodeBasedDynamicGraph &graph,
|
||||
|
||||
const auto neighbor_intersection_node = graph.GetTarget(edge_geometry.edge);
|
||||
|
||||
const auto neighbor_geometries = getIntersectionOutgoingGeometries(
|
||||
const auto neighbor_geometries = getIntersectionOutgoingGeometries<false>(
|
||||
graph, compressed_geometries, node_coordinates, neighbor_intersection_node);
|
||||
|
||||
const auto neighbor_edges = neighbor_geometries.size();
|
||||
@ -755,6 +756,7 @@ convertToIntersectionView(const util::NodeBasedDynamicGraph &graph,
|
||||
// That means we not only get (from_node, turn_node, c) in the above example
|
||||
// but also (from_node, turn_node, a), (from_node, turn_node, b). These turns are
|
||||
// marked as invalid and only needed for intersection classification.
|
||||
template<bool USE_CLOSE_BEARINGS>
|
||||
guidance::IntersectionView
|
||||
getConnectedRoads(const util::NodeBasedDynamicGraph &graph,
|
||||
const EdgeBasedNodeDataContainer &node_data_container,
|
||||
@ -767,7 +769,7 @@ getConnectedRoads(const util::NodeBasedDynamicGraph &graph,
|
||||
{
|
||||
const auto intersection_node = graph.GetTarget(incoming_edge.edge);
|
||||
const auto &outgoing_edges = intersection::getOutgoingEdges(graph, intersection_node);
|
||||
auto edge_geometries = getIntersectionOutgoingGeometries(
|
||||
auto edge_geometries = getIntersectionOutgoingGeometries<USE_CLOSE_BEARINGS>(
|
||||
graph, compressed_geometries, node_coordinates, intersection_node);
|
||||
|
||||
// Add incoming edges with reversed bearings
|
||||
@ -798,6 +800,29 @@ getConnectedRoads(const util::NodeBasedDynamicGraph &graph,
|
||||
std::unordered_set<EdgeID>());
|
||||
}
|
||||
|
||||
template
|
||||
guidance::IntersectionView
|
||||
getConnectedRoads<false>(const util::NodeBasedDynamicGraph &graph,
|
||||
const EdgeBasedNodeDataContainer &node_data_container,
|
||||
const std::vector<util::Coordinate> &node_coordinates,
|
||||
const extractor::CompressedEdgeContainer &compressed_geometries,
|
||||
const RestrictionMap &node_restriction_map,
|
||||
const std::unordered_set<NodeID> &barrier_nodes,
|
||||
const guidance::TurnLanesIndexedArray &turn_lanes_data,
|
||||
const IntersectionEdge &incoming_edge);
|
||||
|
||||
template
|
||||
guidance::IntersectionView
|
||||
getConnectedRoads<true>(const util::NodeBasedDynamicGraph &graph,
|
||||
const EdgeBasedNodeDataContainer &node_data_container,
|
||||
const std::vector<util::Coordinate> &node_coordinates,
|
||||
const extractor::CompressedEdgeContainer &compressed_geometries,
|
||||
const RestrictionMap &node_restriction_map,
|
||||
const std::unordered_set<NodeID> &barrier_nodes,
|
||||
const guidance::TurnLanesIndexedArray &turn_lanes_data,
|
||||
const IntersectionEdge &incoming_edge);
|
||||
|
||||
|
||||
IntersectionEdge skipDegreeTwoNodes(const util::NodeBasedDynamicGraph &graph, IntersectionEdge road)
|
||||
{
|
||||
std::unordered_set<NodeID> visited_nodes;
|
||||
|
Loading…
Reference in New Issue
Block a user