Split EBGF::Run into smaller sub-functions
I'm not too happy with this yet. It is not really clear cut. Also, I would like to move the logging in ::Run, seems messy in the sub-functions.
This commit is contained in:
parent
5a13c6cc3f
commit
3ef054bbac
@ -279,6 +279,21 @@ void EdgeBasedGraphFactory::Run(
|
||||
const std::string & geometry_filename,
|
||||
lua_State *lua_state
|
||||
) {
|
||||
|
||||
CompressGeometry();
|
||||
|
||||
RenumberEdges();
|
||||
|
||||
GenerateEdgeExpandedNodes();
|
||||
|
||||
GenerateEdgeExpandedEdges(original_edge_data_filename, lua_state);
|
||||
|
||||
m_geometry_compressor.SerializeInternalVector( geometry_filename );
|
||||
|
||||
}
|
||||
|
||||
void EdgeBasedGraphFactory::CompressGeometry()
|
||||
{
|
||||
SimpleLogger().Write() << "Removing graph geometry while preserving topology";
|
||||
|
||||
const unsigned original_number_of_nodes = m_node_based_graph->GetNumberOfNodes();
|
||||
@ -417,7 +432,13 @@ void EdgeBasedGraphFactory::Run(
|
||||
SimpleLogger().Write() << "new nodes: " << new_node_count << ", edges " << new_edge_count;
|
||||
SimpleLogger().Write() << "Node compression ratio: " << new_node_count/(double)original_number_of_nodes;
|
||||
SimpleLogger().Write() << "Edge compression ratio: " << new_edge_count/(double)original_number_of_edges;
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes the id of the edge in the edge expanded graph (into the egde in the node based graph)
|
||||
*/
|
||||
void EdgeBasedGraphFactory::RenumberEdges()
|
||||
{
|
||||
// renumber edge based node IDs
|
||||
unsigned numbered_edges_count = 0;
|
||||
for(NodeID current_node = 0; current_node < m_node_based_graph->GetNumberOfNodes(); ++current_node) {
|
||||
@ -435,37 +456,30 @@ void EdgeBasedGraphFactory::Run(
|
||||
}
|
||||
}
|
||||
|
||||
unsigned node_based_edge_counter = 0;
|
||||
unsigned original_edges_counter = 0;
|
||||
|
||||
std::ofstream edge_data_file(
|
||||
original_edge_data_filename.c_str(),
|
||||
std::ios::binary
|
||||
);
|
||||
|
||||
//writes a dummy value that is updated later
|
||||
edge_data_file.write(
|
||||
(char*)&original_edges_counter,
|
||||
sizeof(unsigned)
|
||||
);
|
||||
m_number_of_edge_based_nodes = numbered_edges_count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the nodes in the edge expanded graph from edges in the node-based graph.
|
||||
*/
|
||||
void EdgeBasedGraphFactory::GenerateEdgeExpandedNodes()
|
||||
{
|
||||
SimpleLogger().Write() << "Identifying components of the road network";
|
||||
|
||||
//Run a BFS on the undirected graph and identify small components
|
||||
//TODO move this to a sub function, so we can just use scoping
|
||||
auto component_explorer = new BFSComponentExplorer<NodeBasedDynamicGraph>(
|
||||
BFSComponentExplorer<NodeBasedDynamicGraph> component_explorer(
|
||||
*m_node_based_graph,
|
||||
*m_restriction_map,
|
||||
m_barrier_nodes
|
||||
);
|
||||
|
||||
component_explorer->run();
|
||||
component_explorer.run();
|
||||
|
||||
SimpleLogger().Write() <<
|
||||
"identified: " << component_explorer->getNumberOfComponents() << " many components";
|
||||
"identified: " << component_explorer.getNumberOfComponents() << " many components";
|
||||
SimpleLogger().Write() << "generating edge-expanded nodes";
|
||||
|
||||
p.reinit(m_node_based_graph->GetNumberOfNodes());
|
||||
Percent p(m_node_based_graph->GetNumberOfNodes());
|
||||
|
||||
//loop over all edges and generate new set of nodes
|
||||
for(
|
||||
@ -501,8 +515,8 @@ void EdgeBasedGraphFactory::Run(
|
||||
//Note: edges that end on barrier nodes or on a turn restriction
|
||||
//may actually be in two distinct components. We choose the smallest
|
||||
const unsigned size_of_component = std::min(
|
||||
component_explorer->getComponentSize(u),
|
||||
component_explorer->getComponentSize(v)
|
||||
component_explorer.getComponentSize(u),
|
||||
component_explorer.getComponentSize(v)
|
||||
);
|
||||
|
||||
const bool component_is_tiny = ( size_of_component < 1000 );
|
||||
@ -510,15 +524,32 @@ void EdgeBasedGraphFactory::Run(
|
||||
}
|
||||
}
|
||||
|
||||
delete component_explorer;
|
||||
|
||||
m_number_of_edge_based_nodes = numbered_edges_count;
|
||||
|
||||
SimpleLogger().Write() << "Generated " << m_edge_based_node_list.size() <<
|
||||
" nodes in edge-expanded graph";
|
||||
}
|
||||
|
||||
/**
|
||||
* Actually it also generates OriginalEdgeData and serializes them...
|
||||
*/
|
||||
void EdgeBasedGraphFactory::GenerateEdgeExpandedEdges(const std::string& original_edge_data_filename, lua_State* lua_state)
|
||||
{
|
||||
SimpleLogger().Write() << "generating edge-expanded edges";
|
||||
|
||||
unsigned node_based_edge_counter = 0;
|
||||
unsigned original_edges_counter = 0;
|
||||
|
||||
std::ofstream edge_data_file(
|
||||
original_edge_data_filename.c_str(),
|
||||
std::ios::binary
|
||||
);
|
||||
|
||||
//writes a dummy value that is updated later
|
||||
edge_data_file.write(
|
||||
(char*)&original_edges_counter,
|
||||
sizeof(unsigned)
|
||||
);
|
||||
|
||||
|
||||
std::vector<OriginalEdgeData> original_edge_data_vector;
|
||||
original_edge_data_vector.reserve(1024*1024);
|
||||
|
||||
@ -529,7 +560,9 @@ void EdgeBasedGraphFactory::Run(
|
||||
unsigned skipped_uturns_counter = 0;
|
||||
unsigned skipped_barrier_turns_counter = 0;
|
||||
unsigned compressed = 0;
|
||||
p.reinit(m_node_based_graph->GetNumberOfNodes());
|
||||
|
||||
Percent p(m_node_based_graph->GetNumberOfNodes());
|
||||
|
||||
for (NodeIterator u = 0, end = m_node_based_graph->GetNumberOfNodes(); u < end; ++u)
|
||||
{
|
||||
for (EdgeIterator e1 = m_node_based_graph->BeginEdges(u), last_edge_u = m_node_based_graph->EndEdges(u); e1 < last_edge_u; ++e1)
|
||||
@ -635,7 +668,7 @@ void EdgeBasedGraphFactory::Run(
|
||||
BOOST_ASSERT( SPECIAL_NODEID != edge_data1.edgeBasedNodeID );
|
||||
BOOST_ASSERT( SPECIAL_NODEID != edge_data2.edgeBasedNodeID );
|
||||
|
||||
m_edge_based_edge_list.push_back(
|
||||
m_edge_based_edge_list.emplace_back(
|
||||
EdgeBasedEdge(
|
||||
edge_data1.edgeBasedNodeID,
|
||||
edge_data2.edgeBasedNodeID,
|
||||
@ -655,8 +688,6 @@ void EdgeBasedGraphFactory::Run(
|
||||
edge_data_file.write( (char*)&original_edges_counter, sizeof(unsigned) );
|
||||
edge_data_file.close();
|
||||
|
||||
m_geometry_compressor.SerializeInternalVector( geometry_filename );
|
||||
|
||||
SimpleLogger().Write() << "Generated " << m_edge_based_node_list.size() << " edge based nodes";
|
||||
SimpleLogger().Write() << "Node-based graph contains " << node_based_edge_counter << " edges";
|
||||
SimpleLogger().Write() << "Edge-expanded graph ...";
|
||||
@ -667,6 +698,7 @@ void EdgeBasedGraphFactory::Run(
|
||||
SimpleLogger().Write() << " skips " << skipped_barrier_turns_counter << " turns over barriers";
|
||||
}
|
||||
|
||||
|
||||
int EdgeBasedGraphFactory::GetTurnPenalty(
|
||||
const NodeID u,
|
||||
const NodeID v,
|
||||
|
@ -127,16 +127,13 @@ private:
|
||||
|
||||
GeometryCompressor m_geometry_compressor;
|
||||
|
||||
NodeID CheckForEmanatingIsOnlyTurn(
|
||||
const NodeID u,
|
||||
const NodeID v
|
||||
) const;
|
||||
|
||||
bool CheckIfTurnIsRestricted(
|
||||
const NodeID u,
|
||||
const NodeID v,
|
||||
const NodeID w
|
||||
) const;
|
||||
void CompressGeometry();
|
||||
void RenumberEdges();
|
||||
void GenerateEdgeExpandedNodes();
|
||||
void GenerateEdgeExpandedEdges(
|
||||
const std::string& original_edge_data_filename,
|
||||
lua_State* lua_state
|
||||
);
|
||||
|
||||
void InsertEdgeBasedNode(
|
||||
NodeBasedDynamicGraph::NodeIterator u,
|
||||
@ -150,18 +147,6 @@ private:
|
||||
std::vector<OriginalEdgeData> & original_edge_data_vector
|
||||
) const;
|
||||
|
||||
void FixupArrivingTurnRestriction(
|
||||
const NodeID u,
|
||||
const NodeID v,
|
||||
const NodeID w
|
||||
);
|
||||
|
||||
void FixupStartingTurnRestriction(
|
||||
const NodeID u,
|
||||
const NodeID v,
|
||||
const NodeID w
|
||||
);
|
||||
|
||||
unsigned max_id;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user