Merge part of .nodes fields into .nodes_data

This commit is contained in:
Michael Krasnyk 2017-05-10 21:02:19 +02:00 committed by Patrick Niklaus
parent 9972b5f1f9
commit 8934167e76
2 changed files with 44 additions and 24 deletions

View File

@ -7,6 +7,7 @@
#include "extractor/edge_based_edge.hpp" #include "extractor/edge_based_edge.hpp"
#include "extractor/edge_based_node.hpp" #include "extractor/edge_based_node.hpp"
#include "extractor/extraction_turn.hpp" #include "extractor/extraction_turn.hpp"
#include "extractor/node_data_container.hpp"
#include "extractor/guidance/turn_analysis.hpp" #include "extractor/guidance/turn_analysis.hpp"
#include "extractor/guidance/turn_instruction.hpp" #include "extractor/guidance/turn_instruction.hpp"
#include "extractor/guidance/turn_lane_types.hpp" #include "extractor/guidance/turn_lane_types.hpp"
@ -129,6 +130,7 @@ class EdgeBasedGraphFactory
//! list of edge based nodes (compressed segments) //! list of edge based nodes (compressed segments)
std::vector<EdgeBasedNode> m_edge_based_node_list; std::vector<EdgeBasedNode> m_edge_based_node_list;
EdgeBasedNodeDataExternalContainer m_ebg_node_data_container;
util::DeallocatingVector<EdgeBasedEdge> m_edge_based_edge_list; util::DeallocatingVector<EdgeBasedEdge> m_edge_based_edge_list;
EdgeID m_max_edge_id; EdgeID m_max_edge_id;

View File

@ -134,7 +134,21 @@ NBGToEBG EdgeBasedGraphFactory::InsertEdgeBasedNode(const NodeID node_u, const N
return SegmentID{edge_based_node_id, true}; return SegmentID{edge_based_node_id, true};
}; };
// traverse arrays // Add edge-based node data for forward and reverse nodes indexed by edge_id
BOOST_ASSERT(forward_data.edge_id != SPECIAL_EDGEID);
m_ebg_node_data_container.SetData(forward_data.edge_id,
GeometryID{packed_geometry_id, true},
forward_data.name_id,
forward_data.travel_mode);
if (reverse_data.edge_id != SPECIAL_EDGEID)
{
m_ebg_node_data_container.SetData(reverse_data.edge_id,
GeometryID{packed_geometry_id, false},
reverse_data.name_id,
reverse_data.travel_mode);
}
// Add segments of edge-based nodes
for (const auto i : util::irange(std::size_t{0}, segment_count)) for (const auto i : util::irange(std::size_t{0}, segment_count))
{ {
BOOST_ASSERT( BOOST_ASSERT(
@ -244,6 +258,9 @@ EdgeBasedGraphFactory::GenerateEdgeExpandedNodes(const std::string &node_data_fi
{ {
std::vector<NBGToEBG> mapping; std::vector<NBGToEBG> mapping;
// TODO: make m_ebg_node_data_container local
m_ebg_node_data_container = EdgeBasedNodeDataExternalContainer(m_max_edge_id + 1);
util::Log() << "Generating edge expanded nodes ... "; util::Log() << "Generating edge expanded nodes ... ";
{ {
util::UnbufferedLog log; util::UnbufferedLog log;
@ -252,35 +269,34 @@ EdgeBasedGraphFactory::GenerateEdgeExpandedNodes(const std::string &node_data_fi
m_compressed_edge_container.InitializeBothwayVector(); m_compressed_edge_container.InitializeBothwayVector();
// loop over all edges and generate new set of nodes // loop over all edges and generate new set of nodes
for (const auto node_u : util::irange(0u, m_node_based_graph->GetNumberOfNodes())) for (const auto nbg_node_u : util::irange(0u, m_node_based_graph->GetNumberOfNodes()))
{ {
BOOST_ASSERT(node_u != SPECIAL_NODEID); BOOST_ASSERT(nbg_node_u != SPECIAL_NODEID);
BOOST_ASSERT(node_u < m_node_based_graph->GetNumberOfNodes()); progress.PrintStatus(nbg_node_u);
progress.PrintStatus(node_u); for (EdgeID nbg_edge_id : m_node_based_graph->GetAdjacentEdgeRange(nbg_node_u))
for (EdgeID e1 : m_node_based_graph->GetAdjacentEdgeRange(node_u))
{ {
const EdgeData &edge_data = m_node_based_graph->GetEdgeData(e1); BOOST_ASSERT(nbg_edge_id != SPECIAL_EDGEID);
BOOST_ASSERT(e1 != SPECIAL_EDGEID);
const NodeID node_v = m_node_based_graph->GetTarget(e1); const EdgeData &nbg_edge_data = m_node_based_graph->GetEdgeData(nbg_edge_id);
const NodeID nbg_node_v = m_node_based_graph->GetTarget(nbg_edge_id);
BOOST_ASSERT(nbg_node_v != SPECIAL_NODEID);
BOOST_ASSERT(nbg_node_u != nbg_node_v);
BOOST_ASSERT(SPECIAL_NODEID != node_v);
// pick only every other edge, since we have every edge as an outgoing // pick only every other edge, since we have every edge as an outgoing
// and incoming egde // and incoming egde
if (node_u > node_v) if (nbg_node_u >= nbg_node_v)
{ {
continue; continue;
} }
BOOST_ASSERT(node_u < node_v);
// if we found a non-forward edge reverse and try again // if we found a non-forward edge reverse and try again
if (edge_data.edge_id == SPECIAL_NODEID) if (nbg_edge_data.edge_id == SPECIAL_NODEID)
{ {
mapping.push_back(InsertEdgeBasedNode(node_v, node_u)); mapping.push_back(InsertEdgeBasedNode(nbg_node_v, nbg_node_u));
} }
else else
{ {
mapping.push_back(InsertEdgeBasedNode(node_u, node_v)); mapping.push_back(InsertEdgeBasedNode(nbg_node_u, nbg_node_v));
} }
} }
} }
@ -291,8 +307,6 @@ EdgeBasedGraphFactory::GenerateEdgeExpandedNodes(const std::string &node_data_fi
{ {
// TODO: refactor saving edge-based node data with InsertEdgeBasedNode // TODO: refactor saving edge-based node data with InsertEdgeBasedNode
EdgeBasedNodeDataExternalContainer ebg_node_data_container(m_max_edge_id + 1);
for (const auto nbg_node_id : util::irange(0u, m_node_based_graph->GetNumberOfNodes())) for (const auto nbg_node_id : util::irange(0u, m_node_based_graph->GetNumberOfNodes()))
{ {
for (const auto nbg_edge_id : m_node_based_graph->GetAdjacentEdgeRange(nbg_node_id)) for (const auto nbg_edge_id : m_node_based_graph->GetAdjacentEdgeRange(nbg_node_id))
@ -317,18 +331,22 @@ EdgeBasedGraphFactory::GenerateEdgeExpandedNodes(const std::string &node_data_fi
nbg_edge_id) nbg_edge_id)
: SPECIAL_GEOMETRYID; : SPECIAL_GEOMETRYID;
ebg_node_data_container.SetData(nbg_edge_data.edge_id, BOOST_ASSERT(m_ebg_node_data_container.GetNameID(nbg_edge_data.edge_id) == nbg_edge_data.name_id);
GeometryID{geometry_id, is_encoded_forwards}, BOOST_ASSERT(m_ebg_node_data_container.GetTravelMode(nbg_edge_data.edge_id) == nbg_edge_data.travel_mode);
nbg_edge_data.name_id,
nbg_edge_data.travel_mode); // m_ebg_node_data_container.SetData(nbg_edge_data.edge_id,
// GeometryID{geometry_id, is_encoded_forwards},
// nbg_edge_data.name_id,
// nbg_edge_data.travel_mode);
} }
} }
files::writeNodeData(node_data_filename, ebg_node_data_container);
} }
util::Log() << "Generated " << m_edge_based_node_list.size() << " nodes in edge-expanded graph"; util::Log() << "Generated " << m_edge_based_node_list.size() << " nodes in edge-expanded graph";
files::writeNodeData(node_data_filename, m_ebg_node_data_container);
m_ebg_node_data_container = EdgeBasedNodeDataExternalContainer();
return mapping; return mapping;
} }