Allow specifing a weight for routing that is independent of duration
This commit is contained in:
committed by
Patrick Niklaus
parent
e463733138
commit
279f8aabfb
@@ -42,6 +42,7 @@ BOOST_AUTO_TEST_CASE(trim_short_segments)
|
||||
"",
|
||||
0.2,
|
||||
1.9076601161280742,
|
||||
0.2,
|
||||
TRAVEL_MODE_DRIVING,
|
||||
{{FloatLongitude{-73.981492}, FloatLatitude{40.768258}},
|
||||
329,
|
||||
@@ -61,6 +62,7 @@ BOOST_AUTO_TEST_CASE(trim_short_segments)
|
||||
"",
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
TRAVEL_MODE_DRIVING,
|
||||
{{FloatLongitude{-73.981495}, FloatLatitude{40.768275}},
|
||||
0,
|
||||
@@ -79,7 +81,7 @@ BOOST_AUTO_TEST_CASE(trim_short_segments)
|
||||
geometry.segment_offsets = {0, 2};
|
||||
geometry.segment_distances = {1.9076601161280742};
|
||||
geometry.osm_node_ids = {OSMNodeID{0}, OSMNodeID{1}, OSMNodeID{2}};
|
||||
geometry.annotations = {{1.9076601161280742, 0.2, 0}, {0, 0, 0}};
|
||||
geometry.annotations = {{1.9076601161280742, 0.2, 0.2, 0}, {0, 0, 0, 0}};
|
||||
|
||||
trimShortSegments(steps, geometry);
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ BOOST_AUTO_TEST_CASE(long_road_test)
|
||||
CompressedEdgeContainer container;
|
||||
|
||||
// compress 0---1---2 to 0---2
|
||||
container.CompressEdge(0, 1, 1, 2, 1, 1);
|
||||
container.CompressEdge(0, 1, 1, 2, 1, 1, 11, 11);
|
||||
BOOST_CHECK(container.HasEntryForID(0));
|
||||
BOOST_CHECK(!container.HasEntryForID(1));
|
||||
BOOST_CHECK(!container.HasEntryForID(2));
|
||||
@@ -25,7 +25,7 @@ BOOST_AUTO_TEST_CASE(long_road_test)
|
||||
BOOST_CHECK_EQUAL(container.GetLastEdgeSourceID(0), 1);
|
||||
|
||||
// compress 2---3---4 to 2---4
|
||||
container.CompressEdge(2, 3, 3, 4, 1, 1);
|
||||
container.CompressEdge(2, 3, 3, 4, 1, 1, 11, 11);
|
||||
BOOST_CHECK(container.HasEntryForID(0));
|
||||
BOOST_CHECK(!container.HasEntryForID(1));
|
||||
BOOST_CHECK(container.HasEntryForID(2));
|
||||
@@ -34,7 +34,7 @@ BOOST_AUTO_TEST_CASE(long_road_test)
|
||||
BOOST_CHECK_EQUAL(container.GetLastEdgeSourceID(2), 3);
|
||||
|
||||
// compress 0---2---4 to 0---4
|
||||
container.CompressEdge(0, 2, 2, 4, 2, 2);
|
||||
container.CompressEdge(0, 2, 2, 4, 2, 2, 22, 22);
|
||||
BOOST_CHECK(container.HasEntryForID(0));
|
||||
BOOST_CHECK(!container.HasEntryForID(1));
|
||||
BOOST_CHECK(!container.HasEntryForID(2));
|
||||
@@ -54,7 +54,7 @@ BOOST_AUTO_TEST_CASE(t_crossing)
|
||||
CompressedEdgeContainer container;
|
||||
|
||||
// compress 0---1---2 to 0---2
|
||||
container.CompressEdge(0, 1, 1, 2, 1, 1);
|
||||
container.CompressEdge(0, 1, 1, 2, 1, 1, 11, 11);
|
||||
BOOST_CHECK(container.HasEntryForID(0));
|
||||
BOOST_CHECK(!container.HasEntryForID(1));
|
||||
BOOST_CHECK(!container.HasEntryForID(2));
|
||||
@@ -65,7 +65,7 @@ BOOST_AUTO_TEST_CASE(t_crossing)
|
||||
BOOST_CHECK_EQUAL(container.GetLastEdgeSourceID(0), 1);
|
||||
|
||||
// compress 2---5---6 to 2---6
|
||||
container.CompressEdge(4, 5, 5, 6, 1, 1);
|
||||
container.CompressEdge(4, 5, 5, 6, 1, 1, 11, 11);
|
||||
BOOST_CHECK(container.HasEntryForID(0));
|
||||
BOOST_CHECK(!container.HasEntryForID(1));
|
||||
BOOST_CHECK(!container.HasEntryForID(2));
|
||||
@@ -76,7 +76,7 @@ BOOST_AUTO_TEST_CASE(t_crossing)
|
||||
BOOST_CHECK_EQUAL(container.GetLastEdgeSourceID(4), 5);
|
||||
|
||||
// compress 2---3---4 to 2---4
|
||||
container.CompressEdge(2, 3, 3, 4, 1, 1);
|
||||
container.CompressEdge(2, 3, 3, 4, 1, 1, 11, 11);
|
||||
BOOST_CHECK(container.HasEntryForID(0));
|
||||
BOOST_CHECK(!container.HasEntryForID(1));
|
||||
BOOST_CHECK(container.HasEntryForID(2));
|
||||
|
||||
@@ -28,6 +28,7 @@ inline InputEdge MakeUnitEdge(const NodeID from, const NodeID to)
|
||||
1,
|
||||
SPECIAL_EDGEID,
|
||||
0,
|
||||
0,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
|
||||
@@ -50,6 +50,7 @@ BOOST_AUTO_TEST_CASE(test_route_same_coordinates_fixture)
|
||||
json::Array{{json::Object{
|
||||
{{"distance", 0.},
|
||||
{"duration", 0.},
|
||||
{"weight_name", "duration"},
|
||||
{"geometry", "yw_jGupkl@??"},
|
||||
{"legs",
|
||||
json::Array{{json::Object{
|
||||
@@ -59,6 +60,7 @@ BOOST_AUTO_TEST_CASE(test_route_same_coordinates_fixture)
|
||||
{"steps",
|
||||
json::Array{{{json::Object{{{"duration", 0.},
|
||||
{"distance", 0.},
|
||||
{"weight", 0.},
|
||||
{"geometry", "yw_jGupkl@??"},
|
||||
{"name", "Boulevard du Larvotto"},
|
||||
{"mode", "driving"},
|
||||
@@ -78,6 +80,7 @@ BOOST_AUTO_TEST_CASE(test_route_same_coordinates_fixture)
|
||||
|
||||
json::Object{{{"duration", 0.},
|
||||
{"distance", 0.},
|
||||
{"weight", 0.},
|
||||
{"geometry", "yw_jGupkl@"},
|
||||
{"name", "Boulevard du Larvotto"},
|
||||
{"mode", "driving"},
|
||||
|
||||
@@ -68,6 +68,14 @@ class MockDataFacade final : public engine::datafacade::BaseDataFacade
|
||||
{
|
||||
return GeometryID{SPECIAL_GEOMETRYID, false};
|
||||
}
|
||||
TurnPenalty GetWeightPenaltyForEdgeID(const unsigned /* id */) const override final
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
TurnPenalty GetDurationPenaltyForEdgeID(const unsigned /* id */) const override final
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
std::vector<NodeID> GetUncompressedForwardGeometry(const EdgeID /* id */) const override
|
||||
{
|
||||
return {};
|
||||
@@ -83,12 +91,17 @@ class MockDataFacade final : public engine::datafacade::BaseDataFacade
|
||||
result_weights[0] = 1;
|
||||
return result_weights;
|
||||
}
|
||||
std::vector<EdgeWeight> GetUncompressedReverseWeights(const EdgeID /* id */) 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;
|
||||
return GetUncompressedForwardWeights(id);
|
||||
}
|
||||
std::vector<EdgeWeight> GetUncompressedForwardDurations(const EdgeID id) const override
|
||||
{
|
||||
return GetUncompressedForwardWeights(id);
|
||||
}
|
||||
std::vector<EdgeWeight> GetUncompressedReverseDurations(const EdgeID id) const override
|
||||
{
|
||||
return GetUncompressedForwardWeights(id);
|
||||
}
|
||||
std::vector<DatasourceID> GetUncompressedForwardDatasources(const EdgeID /*id*/) const override
|
||||
{
|
||||
@@ -211,6 +224,8 @@ class MockDataFacade final : public engine::datafacade::BaseDataFacade
|
||||
std::string GetTimestamp() const override { return ""; }
|
||||
bool GetContinueStraightDefault() const override { return true; }
|
||||
double GetMapMatchingMaxSpeed() const override { return 180 / 3.6; }
|
||||
const char *GetWeightName() const override final { return "duration"; }
|
||||
unsigned GetWeightPrecision() const override final { return 1; }
|
||||
BearingClassID GetBearingClassID(const NodeID /*id*/) const override { return 0; }
|
||||
EntryClassID GetEntryClassID(const EdgeID /*id*/) const override { return 0; }
|
||||
|
||||
|
||||
@@ -81,8 +81,9 @@ BOOST_AUTO_TEST_CASE(invalid_table_urls)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(valid_route_hint)
|
||||
{
|
||||
auto hint = engine::Hint::FromBase64(
|
||||
"XAYAgP___3-QAAAABAAAACEAAAA_AAAAHgAAAHsFAAAUAAAAaWhxALeCmwI7aHEAy4KbAgUAAQE0h8Z2");
|
||||
auto hint = engine::Hint::FromBase64("XAYAgP___3-QAAAABAAAACEAAAA_"
|
||||
"AAAAHgAAAHsFAAAUAAAAaWhxALeCmwI7aHEAy4KbAjtocQDLgpsCAAAAA"
|
||||
"KCQXlw=");
|
||||
BOOST_CHECK_EQUAL(
|
||||
hint.phantom.input_location,
|
||||
util::Coordinate(util::FloatLongitude{7.432251}, util::FloatLatitude{43.745995}));
|
||||
@@ -151,12 +152,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(
|
||||
"XAYAgP___3-QAAAABAAAACEAAAA_AAAAHgAAAHsFAAAUAAAAaWhxALeCmwI7aHEAy4KbAgUAAQE0h8Z2"),
|
||||
engine::Hint::FromBase64(
|
||||
"lgQAgP___3-QAAAADwAAABMAAAAoAAAALAAAADQAAAAUAAAAmWFxAL1zmwLcYXEAu3ObAgQAAQE0h8Z2"),
|
||||
engine::Hint::FromBase64(
|
||||
"OAUAgMUFAIAAAAAADwAAAAIAAAAAAAAAnQAAALwEAAAUAAAAgz5xAE9WmwKIPnEAUFabAgAAAQE0h8Z2")};
|
||||
engine::Hint::FromBase64("0QkAgFcLAIBFAAAADAAAACcAAAA0AAAANAAAAB4AAAAmAAAAGA0AAL8QAAARAAAAJ"
|
||||
"ipxAP1ImwIfKnEABUmbAgIAAQFy"),
|
||||
engine::Hint::FromBase64("YwsAgP___3-fAAAAEQAAACcAAAAnAAAAJwAAABYAAAAxAAAA3wEAAOQBAAARAAAA-"
|
||||
"DlxAGBcmwLLOXEAfVybAgEAAQFy"),
|
||||
engine::Hint::FromBase64("awQAgDIJAID7AQAAAAAAAB0AAAAdAAAAHQAAAP4DAAABAQAADwsAAMULAAARAAAAd"
|
||||
"T5yADqVmwIAtMQEAAAAABUAAQFy")};
|
||||
RouteParameters reference_4{false,
|
||||
false,
|
||||
false,
|
||||
@@ -169,9 +170,12 @@ 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="
|
||||
"XAYAgP___3-QAAAABAAAACEAAAA_AAAAHgAAAHsFAAAUAAAAaWhxALeCmwI7aHEAy4KbAgUAAQE0h8Z2;"
|
||||
"lgQAgP___3-QAAAADwAAABMAAAAoAAAALAAAADQAAAAUAAAAmWFxAL1zmwLcYXEAu3ObAgQAAQE0h8Z2;"
|
||||
"OAUAgMUFAIAAAAAADwAAAAIAAAAAAAAAnQAAALwEAAAUAAAAgz5xAE9WmwKIPnEAUFabAgAAAQE0h8Z2");
|
||||
"0QkAgFcLAIBFAAAADAAAACcAAAA0AAAANAAAAB4AAAAmAAAAGA0AAL8QAAARAAAAJipxAP1ImwIfKnEABUmbAgIAAQ"
|
||||
"Fy;"
|
||||
"YwsAgP___3-fAAAAEQAAACcAAAAnAAAAJwAAABYAAAAxAAAA3wEAAOQBAAARAAAA-"
|
||||
"DlxAGBcmwLLOXEAfVybAgEAAQFy;"
|
||||
"awQAgDIJAID7AQAAAAAAAB0AAAAdAAAAHQAAAP4DAAABAQAADwsAAMULAAARAAAAdT5yADqVmwIAtMQEAAAAABUAAQ"
|
||||
"Fy");
|
||||
BOOST_CHECK(result_4);
|
||||
BOOST_CHECK_EQUAL(reference_4.steps, result_4->steps);
|
||||
BOOST_CHECK_EQUAL(reference_4.alternatives, result_4->alternatives);
|
||||
@@ -266,11 +270,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(
|
||||
"XAYAgP___3-QAAAABAAAACEAAAA_AAAAHgAAAHsFAAAUAAAAaWhxALeCmwI7aHEAy4KbAgUAAQE0h8Z2"),
|
||||
engine::Hint::FromBase64("0QkAgFcLAIBFAAAADAAAACcAAAA0AAAANAAAAB4AAAAmAAAAGA0AAL8QAAARAAAAJ"
|
||||
"ipxAP1ImwIfKnEABUmbAgIAAQFy"),
|
||||
boost::none,
|
||||
engine::Hint::FromBase64(
|
||||
"lgQAgP___3-QAAAADwAAABMAAAAoAAAALAAAADQAAAAUAAAAmWFxAL1zmwLcYXEAu3ObAgQAAQE0h8Z2"),
|
||||
engine::Hint::FromBase64("awQAgDIJAID7AQAAAAAAAB0AAAAdAAAAHQAAAP4DAAABAQAADwsAAMULAAARAAAAd"
|
||||
"T5yADqVmwIAtMQEAAAAABUAAQFy"),
|
||||
boost::none};
|
||||
RouteParameters reference_10{false,
|
||||
false,
|
||||
@@ -282,11 +286,13 @@ BOOST_AUTO_TEST_CASE(valid_route_urls)
|
||||
hints_10,
|
||||
std::vector<boost::optional<double>>{},
|
||||
std::vector<boost::optional<engine::Bearing>>{}};
|
||||
auto result_10 = parseParameters<RouteParameters>(
|
||||
"1,2;3,4;5,6;7,8?steps=false&hints="
|
||||
"XAYAgP___3-QAAAABAAAACEAAAA_AAAAHgAAAHsFAAAUAAAAaWhxALeCmwI7aHEAy4KbAgUAAQE0h8Z2;;"
|
||||
"lgQAgP___3-QAAAADwAAABMAAAAoAAAALAAAADQAAAAUAAAAmWFxAL1zmwLcYXEAu3ObAgQAAQE0h8Z2"
|
||||
";");
|
||||
auto result_10 =
|
||||
parseParameters<RouteParameters>("1,2;3,4;5,6;7,8?steps=false&hints="
|
||||
"0QkAgFcLAIBFAAAADAAAACcAAAA0AAAANAAAAB4AAAAmAAAAGA0AAL8QA"
|
||||
"AARAAAAJipxAP1ImwIfKnEABUmbAgIAAQFy;;"
|
||||
"awQAgDIJAID7AQAAAAAAAB0AAAAdAAAAHQAAAP4DAAABAQAADwsAAMULA"
|
||||
"AARAAAAdT5yADqVmwIAtMQEAAAAABUAAQFy"
|
||||
";");
|
||||
BOOST_CHECK(result_10);
|
||||
BOOST_CHECK_EQUAL(reference_10.steps, result_10->steps);
|
||||
BOOST_CHECK_EQUAL(reference_10.alternatives, result_10->alternatives);
|
||||
|
||||
Reference in New Issue
Block a user