Deduplicate foward/reverse geometries
Changes the internal representation of compressed geometries to be a single array shared between forward and reverse geometries that can be read in either direction. Includes a change on extractor::OriginalEdgeData to store via_geometry ids that indicate which direction to read the geometry for that edge based edge. Closes #2592
This commit is contained in:
committed by
Jake Pruitt
parent
73179641b1
commit
a75e16e26b
@@ -61,23 +61,39 @@ class MockDataFacade final : public engine::datafacade::BaseDataFacade
|
||||
}
|
||||
OSMNodeID GetOSMNodeIDOfNode(const unsigned /* id */) const override { return OSMNodeID{0}; }
|
||||
bool EdgeIsCompressed(const unsigned /* id */) const { return false; }
|
||||
unsigned GetGeometryIndexForEdgeID(const unsigned /* id */) const override
|
||||
GeometryID GetGeometryIndexForEdgeID(const unsigned /* id */) const override
|
||||
{
|
||||
return SPECIAL_NODEID;
|
||||
return GeometryID{SPECIAL_GEOMETRYID, false};
|
||||
}
|
||||
void GetUncompressedGeometry(const EdgeID /* id */,
|
||||
std::vector<NodeID> & /* result_nodes */) const override
|
||||
std::vector<NodeID> GetUncompressedForwardGeometry(const EdgeID /* id */) const override
|
||||
{
|
||||
return {};
|
||||
}
|
||||
void GetUncompressedWeights(const EdgeID /* id */,
|
||||
std::vector<EdgeWeight> &result_weights) const override
|
||||
std::vector<NodeID> GetUncompressedReverseGeometry(const EdgeID /* id */) const override
|
||||
{
|
||||
return {};
|
||||
}
|
||||
std::vector<EdgeWeight> GetUncompressedForwardWeights(const EdgeID /* id */) const override
|
||||
{
|
||||
std::vector<EdgeWeight> result_weights;
|
||||
result_weights.resize(1);
|
||||
result_weights[0] = 1;
|
||||
return result_weights;
|
||||
}
|
||||
void GetUncompressedDatasources(const EdgeID /*id*/,
|
||||
std::vector<uint8_t> & /*data_sources*/) const override
|
||||
std::vector<EdgeWeight> GetUncompressedReverseWeights(const EdgeID /* id */) const override
|
||||
{
|
||||
std::vector<EdgeWeight> result_weights;
|
||||
result_weights.resize(1);
|
||||
result_weights[0] = 1;
|
||||
return result_weights;
|
||||
}
|
||||
std::vector<uint8_t> GetUncompressedForwardDatasources(const EdgeID /*id*/) const override
|
||||
{
|
||||
return {};
|
||||
}
|
||||
std::vector<uint8_t> GetUncompressedReverseDatasources(const EdgeID /*id*/) const override
|
||||
{
|
||||
return {};
|
||||
}
|
||||
std::string GetDatasourceName(const uint8_t /*datasource_name_id*/) const override
|
||||
{
|
||||
|
||||
@@ -74,6 +74,15 @@ BOOST_AUTO_TEST_CASE(invalid_table_urls)
|
||||
BOOST_CHECK_EQUAL(testInvalidOptions<TableParameters>("1,2;3,4?destinations=foo"), 21UL);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(valid_route_hint)
|
||||
{
|
||||
auto hint = engine::Hint::FromBase64(
|
||||
"XAYAgP___3-QAAAABAAAACEAAAA_AAAAHgAAAHsFAAAUAAAAaWhxALeCmwI7aHEAy4KbAgUAAQE0h8Z2");
|
||||
BOOST_CHECK_EQUAL(
|
||||
hint.phantom.input_location,
|
||||
util::Coordinate(util::FloatLongitude{7.432251}, util::FloatLatitude{43.745995}));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(valid_route_urls)
|
||||
{
|
||||
std::vector<util::Coordinate> coords_1 = {{util::FloatLongitude{1}, util::FloatLatitude{2}},
|
||||
@@ -137,15 +146,12 @@ BOOST_AUTO_TEST_CASE(valid_route_urls)
|
||||
CHECK_EQUAL_RANGE(reference_3.hints, result_3->hints);
|
||||
|
||||
std::vector<boost::optional<engine::Hint>> hints_4 = {
|
||||
engine::Hint::FromBase64("DAIAgP___"
|
||||
"38AAAAAAAAAAAIAAAAAAAAAEAAAAOgDAAD0AwAAGwAAAOUacQBQP5sCshpxAB0_"
|
||||
"mwIAAAEBl-Umfg=="),
|
||||
engine::Hint::FromBase64("cgAAgP___"
|
||||
"39jAAAADgAAACIAAABeAAAAkQAAANoDAABOAgAAGwAAAFVGcQCiRJsCR0VxAOZFmw"
|
||||
"IFAAEBl-Umfg=="),
|
||||
engine::Hint::FromBase64("3gAAgP___"
|
||||
"39KAAAAHgAAACEAAAAAAAAAGAAAAE0BAABOAQAAGwAAAIAzcQBkUJsC1zNxAHBQmw"
|
||||
"IAAAEBl-Umfg==")};
|
||||
engine::Hint::FromBase64(
|
||||
"XAYAgP___3-QAAAABAAAACEAAAA_AAAAHgAAAHsFAAAUAAAAaWhxALeCmwI7aHEAy4KbAgUAAQE0h8Z2"),
|
||||
engine::Hint::FromBase64(
|
||||
"lgQAgP___3-QAAAADwAAABMAAAAoAAAALAAAADQAAAAUAAAAmWFxAL1zmwLcYXEAu3ObAgQAAQE0h8Z2"),
|
||||
engine::Hint::FromBase64(
|
||||
"OAUAgMUFAIAAAAAADwAAAAIAAAAAAAAAnQAAALwEAAAUAAAAgz5xAE9WmwKIPnEAUFabAgAAAQE0h8Z2")};
|
||||
RouteParameters reference_4{false,
|
||||
false,
|
||||
false,
|
||||
@@ -158,9 +164,9 @@ BOOST_AUTO_TEST_CASE(valid_route_urls)
|
||||
std::vector<boost::optional<engine::Bearing>>{}};
|
||||
auto result_4 = parseParameters<RouteParameters>(
|
||||
"1,2;3,4?steps=false&hints="
|
||||
"DAIAgP___38AAAAAAAAAAAIAAAAAAAAAEAAAAOgDAAD0AwAAGwAAAOUacQBQP5sCshpxAB0_mwIAAAEBl-Umfg==;"
|
||||
"cgAAgP___39jAAAADgAAACIAAABeAAAAkQAAANoDAABOAgAAGwAAAFVGcQCiRJsCR0VxAOZFmwIFAAEBl-Umfg==;"
|
||||
"3gAAgP___39KAAAAHgAAACEAAAAAAAAAGAAAAE0BAABOAQAAGwAAAIAzcQBkUJsC1zNxAHBQmwIAAAEBl-Umfg==");
|
||||
"XAYAgP___3-QAAAABAAAACEAAAA_AAAAHgAAAHsFAAAUAAAAaWhxALeCmwI7aHEAy4KbAgUAAQE0h8Z2;"
|
||||
"lgQAgP___3-QAAAADwAAABMAAAAoAAAALAAAADQAAAAUAAAAmWFxAL1zmwLcYXEAu3ObAgQAAQE0h8Z2;"
|
||||
"OAUAgMUFAIAAAAAADwAAAAIAAAAAAAAAnQAAALwEAAAUAAAAgz5xAE9WmwKIPnEAUFabAgAAAQE0h8Z2");
|
||||
BOOST_CHECK(result_4);
|
||||
BOOST_CHECK_EQUAL(reference_4.steps, result_4->steps);
|
||||
BOOST_CHECK_EQUAL(reference_4.alternatives, result_4->alternatives);
|
||||
@@ -255,13 +261,11 @@ BOOST_AUTO_TEST_CASE(valid_route_urls)
|
||||
{util::FloatLongitude{5}, util::FloatLatitude{6}},
|
||||
{util::FloatLongitude{7}, util::FloatLatitude{8}}};
|
||||
std::vector<boost::optional<engine::Hint>> hints_10 = {
|
||||
engine::Hint::FromBase64("DAIAgP___"
|
||||
"38AAAAAAAAAAAIAAAAAAAAAEAAAAOgDAAD0AwAAGwAAAOUacQBQP5sCshpxAB0_"
|
||||
"mwIAAAEBl-Umfg=="),
|
||||
engine::Hint::FromBase64(
|
||||
"XAYAgP___3-QAAAABAAAACEAAAA_AAAAHgAAAHsFAAAUAAAAaWhxALeCmwI7aHEAy4KbAgUAAQE0h8Z2"),
|
||||
boost::none,
|
||||
engine::Hint::FromBase64("cgAAgP___"
|
||||
"39jAAAADgAAACIAAABeAAAAkQAAANoDAABOAgAAGwAAAFVGcQCiRJsCR0VxAOZFmw"
|
||||
"IFAAEBl-Umfg=="),
|
||||
engine::Hint::FromBase64(
|
||||
"lgQAgP___3-QAAAADwAAABMAAAAoAAAALAAAADQAAAAUAAAAmWFxAL1zmwLcYXEAu3ObAgQAAQE0h8Z2"),
|
||||
boost::none};
|
||||
RouteParameters reference_10{false,
|
||||
false,
|
||||
@@ -275,8 +279,8 @@ BOOST_AUTO_TEST_CASE(valid_route_urls)
|
||||
std::vector<boost::optional<engine::Bearing>>{}};
|
||||
auto result_10 = parseParameters<RouteParameters>(
|
||||
"1,2;3,4;5,6;7,8?steps=false&hints="
|
||||
"DAIAgP___38AAAAAAAAAAAIAAAAAAAAAEAAAAOgDAAD0AwAAGwAAAOUacQBQP5sCshpxAB0_mwIAAAEBl-Umfg==;;"
|
||||
"cgAAgP___39jAAAADgAAACIAAABeAAAAkQAAANoDAABOAgAAGwAAAFVGcQCiRJsCR0VxAOZFmwIFAAEBl-Umfg=="
|
||||
"XAYAgP___3-QAAAABAAAACEAAAA_AAAAHgAAAHsFAAAUAAAAaWhxALeCmwI7aHEAy4KbAgUAAQE0h8Z2;;"
|
||||
"lgQAgP___3-QAAAADwAAABMAAAAoAAAALAAAADQAAAAUAAAAmWFxAL1zmwLcYXEAu3ObAgQAAQE0h8Z2"
|
||||
";");
|
||||
BOOST_CHECK(result_10);
|
||||
BOOST_CHECK_EQUAL(reference_10.steps, result_10->steps);
|
||||
|
||||
@@ -166,8 +166,7 @@ struct GraphFixture
|
||||
d.forward_segment_id = {pair.second, true};
|
||||
d.reverse_segment_id = {pair.first, true};
|
||||
d.fwd_segment_position = 0;
|
||||
d.forward_packed_geometry_id = 0;
|
||||
d.reverse_packed_geometry_id = 0;
|
||||
d.packed_geometry_id = 0;
|
||||
edges.emplace_back(d);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user