Remove data duplicates in .node file
This commit is contained in:
committed by
Patrick Niklaus
parent
8934167e76
commit
ca6b1b39b7
+22
-13
@@ -366,6 +366,10 @@ void encodeVectorTile(const datafacade::ContiguousInternalMemoryDataFacadeBase &
|
||||
return offset;
|
||||
};
|
||||
|
||||
const auto get_geometry_id = [&facade](auto edge) {
|
||||
return facade.GetGeometryIndex(edge.forward_segment_id.id).id;
|
||||
};
|
||||
|
||||
// Vector tiles encode feature properties as indexes into a lookup table. So, we need
|
||||
// to "pre-loop" over all the edges to create the lookup tables. Once we have those, we
|
||||
// can then encode the features, and we'll know the indexes that feature properties
|
||||
@@ -374,10 +378,11 @@ void encodeVectorTile(const datafacade::ContiguousInternalMemoryDataFacadeBase &
|
||||
{
|
||||
const auto &edge = edges[edge_index];
|
||||
|
||||
const auto geometry_id = get_geometry_id(edge);
|
||||
const auto forward_datasource_vector =
|
||||
facade.GetUncompressedForwardDatasources(edge.packed_geometry_id);
|
||||
facade.GetUncompressedForwardDatasources(geometry_id);
|
||||
const auto reverse_datasource_vector =
|
||||
facade.GetUncompressedReverseDatasources(edge.packed_geometry_id);
|
||||
facade.GetUncompressedReverseDatasources(geometry_id);
|
||||
|
||||
BOOST_ASSERT(edge.fwd_segment_position < forward_datasource_vector.size());
|
||||
const auto forward_datasource = forward_datasource_vector[edge.fwd_segment_position];
|
||||
@@ -421,12 +426,13 @@ void encodeVectorTile(const datafacade::ContiguousInternalMemoryDataFacadeBase &
|
||||
for (const auto &edge_index : sorted_edge_indexes)
|
||||
{
|
||||
const auto &edge = edges[edge_index];
|
||||
const auto geometry_id = get_geometry_id(edge);
|
||||
|
||||
// Weight values
|
||||
const auto forward_weight_vector =
|
||||
facade.GetUncompressedForwardWeights(edge.packed_geometry_id);
|
||||
facade.GetUncompressedForwardWeights(geometry_id);
|
||||
const auto reverse_weight_vector =
|
||||
facade.GetUncompressedReverseWeights(edge.packed_geometry_id);
|
||||
facade.GetUncompressedReverseWeights(geometry_id);
|
||||
const auto forward_weight = forward_weight_vector[edge.fwd_segment_position];
|
||||
const auto reverse_weight = reverse_weight_vector[reverse_weight_vector.size() -
|
||||
edge.fwd_segment_position - 1];
|
||||
@@ -435,9 +441,9 @@ void encodeVectorTile(const datafacade::ContiguousInternalMemoryDataFacadeBase &
|
||||
|
||||
// Duration values
|
||||
const auto forward_duration_vector =
|
||||
facade.GetUncompressedForwardDurations(edge.packed_geometry_id);
|
||||
facade.GetUncompressedForwardDurations(geometry_id);
|
||||
const auto reverse_duration_vector =
|
||||
facade.GetUncompressedReverseDurations(edge.packed_geometry_id);
|
||||
facade.GetUncompressedReverseDurations(geometry_id);
|
||||
const auto forward_duration = forward_duration_vector[edge.fwd_segment_position];
|
||||
const auto reverse_duration =
|
||||
reverse_duration_vector[reverse_duration_vector.size() -
|
||||
@@ -453,6 +459,8 @@ void encodeVectorTile(const datafacade::ContiguousInternalMemoryDataFacadeBase &
|
||||
for (const auto &edge_index : sorted_edge_indexes)
|
||||
{
|
||||
const auto &edge = edges[edge_index];
|
||||
const auto geometry_id = get_geometry_id(edge);
|
||||
|
||||
// Get coordinates for start/end nodes of segment (NodeIDs u and v)
|
||||
const auto a = facade.GetCoordinateOfNode(edge.u);
|
||||
const auto b = facade.GetCoordinateOfNode(edge.v);
|
||||
@@ -461,17 +469,17 @@ void encodeVectorTile(const datafacade::ContiguousInternalMemoryDataFacadeBase &
|
||||
osrm::util::coordinate_calculation::haversineDistance(a, b);
|
||||
|
||||
const auto forward_weight_vector =
|
||||
facade.GetUncompressedForwardWeights(edge.packed_geometry_id);
|
||||
facade.GetUncompressedForwardWeights(geometry_id);
|
||||
const auto reverse_weight_vector =
|
||||
facade.GetUncompressedReverseWeights(edge.packed_geometry_id);
|
||||
facade.GetUncompressedReverseWeights(geometry_id);
|
||||
const auto forward_duration_vector =
|
||||
facade.GetUncompressedForwardDurations(edge.packed_geometry_id);
|
||||
facade.GetUncompressedForwardDurations(geometry_id);
|
||||
const auto reverse_duration_vector =
|
||||
facade.GetUncompressedReverseDurations(edge.packed_geometry_id);
|
||||
facade.GetUncompressedReverseDurations(geometry_id);
|
||||
const auto forward_datasource_vector =
|
||||
facade.GetUncompressedForwardDatasources(edge.packed_geometry_id);
|
||||
facade.GetUncompressedForwardDatasources(geometry_id);
|
||||
const auto reverse_datasource_vector =
|
||||
facade.GetUncompressedReverseDatasources(edge.packed_geometry_id);
|
||||
facade.GetUncompressedReverseDatasources(geometry_id);
|
||||
const auto forward_weight = forward_weight_vector[edge.fwd_segment_position];
|
||||
const auto reverse_weight =
|
||||
reverse_weight_vector[reverse_weight_vector.size() -
|
||||
@@ -487,7 +495,8 @@ void encodeVectorTile(const datafacade::ContiguousInternalMemoryDataFacadeBase &
|
||||
reverse_datasource_vector[reverse_datasource_vector.size() -
|
||||
edge.fwd_segment_position - 1];
|
||||
|
||||
auto name = facade.GetNameForID(edge.name_id);
|
||||
const auto name_id = facade.GetNameIndex(edge.forward_segment_id.id);
|
||||
auto name = facade.GetNameForID(name_id);
|
||||
|
||||
const auto name_offset = [&name, &names, &name_offsets]() {
|
||||
auto iter = name_offsets.find(name);
|
||||
|
||||
@@ -37,6 +37,10 @@ getTileTurns(const datafacade::ContiguousInternalMemoryDataFacade<ch::Algorithm>
|
||||
// it saves us a bunch of re-allocations during iteration.
|
||||
directed_graph.reserve(edges.size() * 2);
|
||||
|
||||
const auto get_geometry_id = [&facade](auto edge) {
|
||||
return facade.GetGeometryIndex(edge.forward_segment_id.id).id;
|
||||
};
|
||||
|
||||
// Build an adjacency list for all the road segments visible in
|
||||
// the tile
|
||||
for (const auto &edge_index : sorted_edge_indexes)
|
||||
@@ -48,14 +52,14 @@ getTileTurns(const datafacade::ContiguousInternalMemoryDataFacade<ch::Algorithm>
|
||||
directed_graph[edge.u].push_back({edge.v, edge.forward_segment_id.id});
|
||||
if (edge_based_node_info.count(edge.forward_segment_id.id) == 0)
|
||||
{
|
||||
edge_based_node_info[edge.forward_segment_id.id] = {true, edge.packed_geometry_id};
|
||||
edge_based_node_info[edge.forward_segment_id.id] = {true, get_geometry_id(edge)};
|
||||
}
|
||||
else
|
||||
{
|
||||
BOOST_ASSERT(edge_based_node_info[edge.forward_segment_id.id].is_geometry_forward ==
|
||||
true);
|
||||
BOOST_ASSERT(edge_based_node_info[edge.forward_segment_id.id].packed_geometry_id ==
|
||||
edge.packed_geometry_id);
|
||||
get_geometry_id(edge));
|
||||
}
|
||||
}
|
||||
if (edge.reverse_segment_id.enabled)
|
||||
@@ -63,14 +67,14 @@ getTileTurns(const datafacade::ContiguousInternalMemoryDataFacade<ch::Algorithm>
|
||||
directed_graph[edge.v].push_back({edge.u, edge.reverse_segment_id.id});
|
||||
if (edge_based_node_info.count(edge.reverse_segment_id.id) == 0)
|
||||
{
|
||||
edge_based_node_info[edge.reverse_segment_id.id] = {false, edge.packed_geometry_id};
|
||||
edge_based_node_info[edge.reverse_segment_id.id] = {false, get_geometry_id(edge)};
|
||||
}
|
||||
else
|
||||
{
|
||||
BOOST_ASSERT(edge_based_node_info[edge.reverse_segment_id.id].is_geometry_forward ==
|
||||
false);
|
||||
BOOST_ASSERT(edge_based_node_info[edge.reverse_segment_id.id].packed_geometry_id ==
|
||||
edge.packed_geometry_id);
|
||||
get_geometry_id(edge));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,13 +163,9 @@ NBGToEBG EdgeBasedGraphFactory::InsertEdgeBasedNode(const NodeID node_u, const N
|
||||
edge_id_to_segment_id(reverse_data.edge_id),
|
||||
current_edge_source_coordinate_id,
|
||||
current_edge_target_coordinate_id,
|
||||
forward_data.name_id,
|
||||
packed_geometry_id,
|
||||
false,
|
||||
INVALID_COMPONENTID,
|
||||
i,
|
||||
forward_data.travel_mode,
|
||||
reverse_data.travel_mode);
|
||||
i);
|
||||
|
||||
m_edge_based_node_is_startpoint.push_back(forward_data.startpoint ||
|
||||
reverse_data.startpoint);
|
||||
@@ -323,16 +319,18 @@ EdgeBasedGraphFactory::GenerateEdgeExpandedNodes(const std::string &node_data_fi
|
||||
|
||||
BOOST_ASSERT(is_encoded_forwards || is_encoded_backwards);
|
||||
|
||||
auto geometry_id =
|
||||
is_encoded_forwards
|
||||
? m_compressed_edge_container.GetZippedPositionForForwardID(nbg_edge_id)
|
||||
: is_encoded_backwards
|
||||
? m_compressed_edge_container.GetZippedPositionForReverseID(
|
||||
nbg_edge_id)
|
||||
: SPECIAL_GEOMETRYID;
|
||||
// auto geometry_id =
|
||||
// is_encoded_forwards
|
||||
// ? m_compressed_edge_container.GetZippedPositionForForwardID(nbg_edge_id)
|
||||
// : is_encoded_backwards
|
||||
// ? m_compressed_edge_container.GetZippedPositionForReverseID(
|
||||
// nbg_edge_id)
|
||||
// : SPECIAL_GEOMETRYID;
|
||||
|
||||
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);
|
||||
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);
|
||||
|
||||
// m_ebg_node_data_container.SetData(nbg_edge_data.edge_id,
|
||||
// GeometryID{geometry_id, is_encoded_forwards},
|
||||
|
||||
Reference in New Issue
Block a user