Merge part of .nodes fields into .nodes_data
This commit is contained in:
parent
9972b5f1f9
commit
8934167e76
@ -7,6 +7,7 @@
|
||||
#include "extractor/edge_based_edge.hpp"
|
||||
#include "extractor/edge_based_node.hpp"
|
||||
#include "extractor/extraction_turn.hpp"
|
||||
#include "extractor/node_data_container.hpp"
|
||||
#include "extractor/guidance/turn_analysis.hpp"
|
||||
#include "extractor/guidance/turn_instruction.hpp"
|
||||
#include "extractor/guidance/turn_lane_types.hpp"
|
||||
@ -129,6 +130,7 @@ class EdgeBasedGraphFactory
|
||||
|
||||
//! list of edge based nodes (compressed segments)
|
||||
std::vector<EdgeBasedNode> m_edge_based_node_list;
|
||||
EdgeBasedNodeDataExternalContainer m_ebg_node_data_container;
|
||||
util::DeallocatingVector<EdgeBasedEdge> m_edge_based_edge_list;
|
||||
EdgeID m_max_edge_id;
|
||||
|
||||
|
@ -134,7 +134,21 @@ NBGToEBG EdgeBasedGraphFactory::InsertEdgeBasedNode(const NodeID node_u, const N
|
||||
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))
|
||||
{
|
||||
BOOST_ASSERT(
|
||||
@ -244,6 +258,9 @@ EdgeBasedGraphFactory::GenerateEdgeExpandedNodes(const std::string &node_data_fi
|
||||
{
|
||||
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::UnbufferedLog log;
|
||||
@ -252,35 +269,34 @@ EdgeBasedGraphFactory::GenerateEdgeExpandedNodes(const std::string &node_data_fi
|
||||
m_compressed_edge_container.InitializeBothwayVector();
|
||||
|
||||
// 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(node_u < m_node_based_graph->GetNumberOfNodes());
|
||||
progress.PrintStatus(node_u);
|
||||
for (EdgeID e1 : m_node_based_graph->GetAdjacentEdgeRange(node_u))
|
||||
BOOST_ASSERT(nbg_node_u != SPECIAL_NODEID);
|
||||
progress.PrintStatus(nbg_node_u);
|
||||
for (EdgeID nbg_edge_id : m_node_based_graph->GetAdjacentEdgeRange(nbg_node_u))
|
||||
{
|
||||
const EdgeData &edge_data = m_node_based_graph->GetEdgeData(e1);
|
||||
BOOST_ASSERT(e1 != SPECIAL_EDGEID);
|
||||
const NodeID node_v = m_node_based_graph->GetTarget(e1);
|
||||
BOOST_ASSERT(nbg_edge_id != SPECIAL_EDGEID);
|
||||
|
||||
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
|
||||
// and incoming egde
|
||||
if (node_u > node_v)
|
||||
if (nbg_node_u >= nbg_node_v)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
BOOST_ASSERT(node_u < node_v);
|
||||
|
||||
// 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
|
||||
{
|
||||
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
|
||||
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_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)
|
||||
: SPECIAL_GEOMETRYID;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
BOOST_ASSERT(m_ebg_node_data_container.GetNameID(nbg_edge_data.edge_id) == nbg_edge_data.name_id);
|
||||
BOOST_ASSERT(m_ebg_node_data_container.GetTravelMode(nbg_edge_data.edge_id) == nbg_edge_data.travel_mode);
|
||||
|
||||
files::writeNodeData(node_data_filename, ebg_node_data_container);
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user