#5325 Fixes after the revew

This commit is contained in:
Vsevolod Novikov 2021-02-25 11:45:59 +03:00
parent b1cfc02454
commit 848e96238e
6 changed files with 20 additions and 38 deletions

View File

@ -49,8 +49,9 @@ class CompressedEdgeContainer
const SegmentWeight duration);
void InitializeBothwayVector();
unsigned
ZipEdges(const unsigned f_edge_pos, const unsigned r_edge_pos, OSMWayIDMap &osm_way_id_map);
unsigned ZipEdges(const unsigned f_edge_pos,
const unsigned r_edge_pos,
const OSMWayIDMap &osm_way_id_map);
bool HasEntryForID(const EdgeID edge_id) const;
bool HasZippedEntryForForwardID(const EdgeID edge_id) const;

View File

@ -74,7 +74,7 @@ class NodeBasedGraphFactory
// Most ways are bidirectional, making the geometry in forward and backward direction the same,
// except for reversal. We make use of this fact by keeping only one representation of the
// geometry around
void CompressGeometry(OSMWayIDMap &osm_way_id_map);
void CompressGeometry(const OSMWayIDMap &osm_way_id_map);
// After graph compression, some of the annotation entries might not be referenced anymore. We
// compress the annotation data by relabeling the node-based graph references and removing all

View File

@ -104,7 +104,6 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
auto GetReverseOSMWayIDs(const DirectionalGeometryID id)
{
// return boost::adaptors::reverse(GetForwardOSMWayIDs(id));
return boost::adaptors::reverse(
boost::adaptors::transform(GetForwardOSMWayIDs(id), std::negate<OSMWayIDDir>()));
}
@ -180,7 +179,6 @@ template <storage::Ownership Ownership> class SegmentDataContainerImpl
auto GetReverseOSMWayIDs(const DirectionalGeometryID id) const
{
// return boost::adaptors::reverse(GetForwardOSMWayIDs(id));
return boost::adaptors::reverse(
boost::adaptors::transform(GetForwardOSMWayIDs(id), std::negate<OSMWayIDDir>()));
}

View File

@ -264,7 +264,7 @@ void CompressedEdgeContainer::InitializeBothwayVector()
unsigned CompressedEdgeContainer::ZipEdges(const EdgeID f_edge_id,
const EdgeID r_edge_id,
OSMWayIDMap &osm_way_id_map)
const OSMWayIDMap &osm_way_id_map)
{
if (!segment_data)
InitializeBothwayVector();
@ -293,14 +293,7 @@ unsigned CompressedEdgeContainer::ZipEdges(const EdgeID f_edge_id,
segment_data->fwd_datasources.emplace_back(LUA_SOURCE);
segment_data->rev_datasources.emplace_back(LUA_SOURCE);
for (std::size_t i = 0; i < forward_bucket.size() - 1; ++i)
{
const auto &fwd_node = forward_bucket.at(i);
const auto &rev_node = reverse_bucket.at(reverse_bucket.size() - 2 - i);
BOOST_ASSERT(fwd_node.node_id == rev_node.node_id);
auto node_id = fwd_node.node_id;
auto store_way_id = [&](const NodeID prev_node_id, const NodeID node_id) {
if (node_id != prev_node_id)
{
auto find_way_id = osm_way_id_map.find(OSMWayIDMapKey(prev_node_id, node_id));
@ -323,6 +316,18 @@ unsigned CompressedEdgeContainer::ZipEdges(const EdgeID f_edge_id,
// Special case (artificial lighting signal edge)
segment_data->osm_ways.emplace_back(osm_way_id);
}
};
for (std::size_t i = 0; i < forward_bucket.size() - 1; ++i)
{
const auto &fwd_node = forward_bucket.at(i);
const auto &rev_node = reverse_bucket.at(reverse_bucket.size() - 2 - i);
BOOST_ASSERT(fwd_node.node_id == rev_node.node_id);
auto node_id = fwd_node.node_id;
store_way_id(prev_node_id, node_id);
segment_data->nodes.emplace_back(fwd_node.node_id);
segment_data->fwd_weights.emplace_back(fwd_node.weight);
@ -336,28 +341,7 @@ unsigned CompressedEdgeContainer::ZipEdges(const EdgeID f_edge_id,
const auto &last_node = forward_bucket.back();
auto node_id = last_node.node_id;
if (node_id != prev_node_id)
{
auto find_way_id = osm_way_id_map.find(OSMWayIDMapKey(prev_node_id, node_id));
if (find_way_id != osm_way_id_map.cend())
{
segment_data->osm_ways.emplace_back(osm_way_id = find_way_id->second);
util::Log(logDEBUG) << "zipped_geometry_id: " << zipped_geometry_id << " "
<< prev_node_id << "->" << node_id << " = " << osm_way_id;
}
else
{
util::Log(logERROR)
<< "OSM Way ID not found for (nbg) nodes, it should never be happened: "
<< prev_node_id << "<-x->" << node_id;
segment_data->osm_ways.emplace_back(osm_way_id);
}
}
else
{
// Special case (artificial lighting signal edge)
segment_data->osm_ways.emplace_back(osm_way_id);
}
store_way_id(prev_node_id, node_id);
// Make osm_ways vector size the same as
// nodes vector size to use index vector for the both

View File

@ -94,7 +94,7 @@ void NodeBasedGraphFactory::Compress(ScriptingEnvironment &scripting_environment
compressed_edge_container);
}
void NodeBasedGraphFactory::CompressGeometry(OSMWayIDMap &osm_way_id_map)
void NodeBasedGraphFactory::CompressGeometry(const OSMWayIDMap &osm_way_id_map)
{
for (const auto nbg_node_u : util::irange(0u, compressed_output_graph.GetNumberOfNodes()))
{

View File

@ -733,7 +733,6 @@ BOOST_AUTO_TEST_CASE(test_route_annotated_ways)
BOOST_TEST_MESSAGE("split_trace_locations with steps");
check_route_annotated_ways(coordinates, osrm, node_pair_to_way_id_map, true);
coordinates = get_locations_in_big_component();
// auto coords =
BOOST_TEST_MESSAGE("locations_in_big_component without steps");
check_route_annotated_ways(coordinates, osrm, node_pair_to_way_id_map, false);
BOOST_TEST_MESSAGE("locations_in_big_component with steps");