Add low precision intersection views back

This commit is contained in:
Michael Krasnyk 2017-12-06 18:44:44 +01:00
parent 0568dca4a3
commit 153f9b02a5
10 changed files with 40 additions and 14 deletions

View File

@ -578,7 +578,7 @@ std::size_t IntersectionHandler::findObviousTurn(const EdgeID via_edge,
if (node_based_graph.GetTarget(parameters.edge) == node_at_intersection) if (node_based_graph.GetTarget(parameters.edge) == node_at_intersection)
return {}; return {};
return intersection::getConnectedRoads(node_based_graph, return intersection::getConnectedRoads<false>(node_based_graph,
node_data_container, node_data_container,
node_coordinates, node_coordinates,
compressed_geometries, compressed_geometries,

View File

@ -222,7 +222,7 @@ NodeBasedGraphWalker::TraverseRoad(NodeID current_node_id,
// look at the next intersection // look at the next intersection
const auto next_intersection = const auto next_intersection =
intersection::getConnectedRoads(node_based_graph, intersection::getConnectedRoads<true>(node_based_graph,
node_data_container, node_data_container,
node_coordinates, node_coordinates,
compressed_geometries, compressed_geometries,

View File

@ -60,6 +60,7 @@ convertToIntersectionView(const util::NodeBasedDynamicGraph &graph,
// Check for restrictions/barriers and generate a list of valid and invalid turns present at // 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 // the node reached from `incoming_edge`. The resulting candidates have to be analyzed
// for their actual instructions later on. // for their actual instructions later on.
template<bool USE_CLOSE_BEARINGS>
guidance::IntersectionView guidance::IntersectionView
getConnectedRoads(const util::NodeBasedDynamicGraph &graph, getConnectedRoads(const util::NodeBasedDynamicGraph &graph,
const EdgeBasedNodeDataContainer &node_data_container, const EdgeBasedNodeDataContainer &node_data_container,

View File

@ -482,7 +482,7 @@ IntersectionHandler::getNextIntersection(const NodeID at, const EdgeID via) cons
return boost::none; return boost::none;
} }
auto intersection = intersection::getConnectedRoads(node_based_graph, auto intersection = intersection::getConnectedRoads<false>(node_based_graph,
node_data_container, node_data_container,
node_coordinates, node_coordinates,
compressed_geometries, compressed_geometries,

View File

@ -558,7 +558,7 @@ bool MergableRoadDetector::IsLinkRoad(const NodeID intersection_node,
const auto next_intersection_parameters = const auto next_intersection_parameters =
intersection::skipDegreeTwoNodes(node_based_graph, {intersection_node, road.eid}); intersection::skipDegreeTwoNodes(node_based_graph, {intersection_node, road.eid});
const auto next_intersection_along_road = const auto next_intersection_along_road =
intersection::getConnectedRoads(node_based_graph, intersection::getConnectedRoads<false>(node_based_graph,
node_data_container, node_data_container,
node_coordinates, node_coordinates,
compressed_geometries, compressed_geometries,

View File

@ -279,7 +279,7 @@ void IntersectionFinderAccumulator::update(const NodeID from_node,
nid = from_node; nid = from_node;
via_edge_id = via_edge; via_edge_id = via_edge;
intersection = intersection::getConnectedRoads(node_based_graph, intersection = intersection::getConnectedRoads<true>(node_based_graph,
node_data_container, node_data_container,
node_coordinates, node_coordinates,
compressed_geometries, compressed_geometries,

View File

@ -558,7 +558,7 @@ operator()(const NodeID /*nid*/, const EdgeID source_edge_id, Intersection inter
} }
else else
{ {
const auto skip_traffic_light_intersection = intersection::getConnectedRoads( const auto skip_traffic_light_intersection = intersection::getConnectedRoads<false>(
node_based_graph, node_based_graph,
node_data_container, node_data_container,
node_coordinates, node_coordinates,

View File

@ -75,7 +75,7 @@ bool findPreviousIntersection(const NodeID node_v,
return false; return false;
const auto node_v_reverse_intersection = const auto node_v_reverse_intersection =
intersection::getConnectedRoads(node_based_graph, intersection::getConnectedRoads<true>(node_based_graph,
node_data_container, node_data_container,
node_coordinates, node_coordinates,
compressed_geometries, 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 = node_based_graph.GetTarget(straightmost_at_v_in_reverse->eid);
const auto node_u_reverse_intersection = const auto node_u_reverse_intersection =
intersection::getConnectedRoads(node_based_graph, intersection::getConnectedRoads<true>(node_based_graph,
node_data_container, node_data_container,
node_coordinates, node_coordinates,
compressed_geometries, compressed_geometries,
@ -120,7 +120,7 @@ bool findPreviousIntersection(const NodeID node_v,
return false; return false;
} }
result_intersection = intersection::getConnectedRoads(node_based_graph, result_intersection = intersection::getConnectedRoads<false>(node_based_graph,
node_data_container, node_data_container,
node_coordinates, node_coordinates,
compressed_geometries, compressed_geometries,

View File

@ -575,7 +575,7 @@ std::pair<LaneDataVector, LaneDataVector> TurnLaneHandler::partitionLaneData(
const auto next_intersection = const auto next_intersection =
turn_analysis.AssignTurnTypes(at, turn_analysis.AssignTurnTypes(at,
straightmost->eid, straightmost->eid,
intersection::getConnectedRoads(node_based_graph, intersection::getConnectedRoads<false>(node_based_graph,
node_data_container, node_data_container,
node_coordinates, node_coordinates,
compressed_geometries, compressed_geometries,

View File

@ -202,6 +202,7 @@ auto getIntersectionLanes(const util::NodeBasedDynamicGraph &graph, const NodeID
return max_lanes_intersection; return max_lanes_intersection;
} }
template<bool USE_CLOSE_BEARINGS>
IntersectionEdgeGeometries IntersectionEdgeGeometries
getIntersectionOutgoingGeometries(const util::NodeBasedDynamicGraph &graph, getIntersectionOutgoingGeometries(const util::NodeBasedDynamicGraph &graph,
const extractor::CompressedEdgeContainer &compressed_geometries, const extractor::CompressedEdgeContainer &compressed_geometries,
@ -232,7 +233,7 @@ getIntersectionOutgoingGeometries(const util::NodeBasedDynamicGraph &graph,
util::coordinate_calculation::bearing(geometry[0], close_coordinate); util::coordinate_calculation::bearing(geometry[0], close_coordinate);
const auto representative_coordinate = const auto representative_coordinate =
graph.GetOutDegree(intersection_node) <= 2 USE_CLOSE_BEARINGS || graph.GetOutDegree(intersection_node) <= 2
? coordinate_extractor.GetCoordinateCloseToTurn( ? coordinate_extractor.GetCoordinateCloseToTurn(
intersection_node, outgoing_edge, false, remote_node) intersection_node, outgoing_edge, false, remote_node)
: coordinate_extractor.ExtractRepresentativeCoordinate(intersection_node, : coordinate_extractor.ExtractRepresentativeCoordinate(intersection_node,
@ -265,7 +266,7 @@ getIntersectionGeometries(const util::NodeBasedDynamicGraph &graph,
const guidance::MergableRoadDetector &detector, const guidance::MergableRoadDetector &detector,
const NodeID intersection_node) const NodeID intersection_node)
{ {
IntersectionEdgeGeometries edge_geometries = getIntersectionOutgoingGeometries( IntersectionEdgeGeometries edge_geometries = getIntersectionOutgoingGeometries<false>(
graph, compressed_geometries, node_coordinates, intersection_node); graph, compressed_geometries, node_coordinates, intersection_node);
const auto edges_number = edge_geometries.size(); 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_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); graph, compressed_geometries, node_coordinates, neighbor_intersection_node);
const auto neighbor_edges = neighbor_geometries.size(); 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 // 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 // but also (from_node, turn_node, a), (from_node, turn_node, b). These turns are
// marked as invalid and only needed for intersection classification. // marked as invalid and only needed for intersection classification.
template<bool USE_CLOSE_BEARINGS>
guidance::IntersectionView guidance::IntersectionView
getConnectedRoads(const util::NodeBasedDynamicGraph &graph, getConnectedRoads(const util::NodeBasedDynamicGraph &graph,
const EdgeBasedNodeDataContainer &node_data_container, 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 intersection_node = graph.GetTarget(incoming_edge.edge);
const auto &outgoing_edges = intersection::getOutgoingEdges(graph, intersection_node); 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); graph, compressed_geometries, node_coordinates, intersection_node);
// Add incoming edges with reversed bearings // Add incoming edges with reversed bearings
@ -798,6 +800,29 @@ getConnectedRoads(const util::NodeBasedDynamicGraph &graph,
std::unordered_set<EdgeID>()); 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) IntersectionEdge skipDegreeTwoNodes(const util::NodeBasedDynamicGraph &graph, IntersectionEdge road)
{ {
std::unordered_set<NodeID> visited_nodes; std::unordered_set<NodeID> visited_nodes;