Use mmap instead of read - it's a lot faster here.
Also clean up construction of STRONG_TYPEDEF so that it can be
packed properly in structs (this explains all the () -> {}) changes
here.
This commit is contained in:
@@ -16,121 +16,121 @@ BOOST_AUTO_TEST_CASE(compute_angle)
|
||||
{
|
||||
// Simple cases
|
||||
// North-South straight line
|
||||
Coordinate first(FloatLongitude(1), FloatLatitude(-1));
|
||||
Coordinate middle(FloatLongitude(1), FloatLatitude(0));
|
||||
Coordinate end(FloatLongitude(1), FloatLatitude(1));
|
||||
Coordinate first(FloatLongitude{1}, FloatLatitude{-1});
|
||||
Coordinate middle(FloatLongitude{1}, FloatLatitude{0});
|
||||
Coordinate end(FloatLongitude{1}, FloatLatitude{1});
|
||||
auto angle = coordinate_calculation::computeAngle(first, middle, end);
|
||||
BOOST_CHECK_EQUAL(angle, 180);
|
||||
|
||||
// North-South-North u-turn
|
||||
first = Coordinate(FloatLongitude(1), FloatLatitude(0));
|
||||
middle = Coordinate(FloatLongitude(1), FloatLatitude(1));
|
||||
end = Coordinate(FloatLongitude(1), FloatLatitude(0));
|
||||
first = Coordinate(FloatLongitude{1}, FloatLatitude{0});
|
||||
middle = Coordinate(FloatLongitude{1}, FloatLatitude{1});
|
||||
end = Coordinate(FloatLongitude{1}, FloatLatitude{0});
|
||||
angle = coordinate_calculation::computeAngle(first, middle, end);
|
||||
BOOST_CHECK_EQUAL(angle, 0);
|
||||
|
||||
// East-west straight lines are harder, *simple* coordinates only
|
||||
// work at the equator. For other locations, we need to follow
|
||||
// a rhumb line.
|
||||
first = Coordinate(FloatLongitude(1), FloatLatitude(0));
|
||||
middle = Coordinate(FloatLongitude(2), FloatLatitude(0));
|
||||
end = Coordinate(FloatLongitude(3), FloatLatitude(0));
|
||||
first = Coordinate(FloatLongitude{1}, FloatLatitude{0});
|
||||
middle = Coordinate(FloatLongitude{2}, FloatLatitude{0});
|
||||
end = Coordinate(FloatLongitude{3}, FloatLatitude{0});
|
||||
angle = coordinate_calculation::computeAngle(first, middle, end);
|
||||
BOOST_CHECK_EQUAL(angle, 180);
|
||||
|
||||
// East-West-East u-turn
|
||||
first = Coordinate(FloatLongitude(1), FloatLatitude(0));
|
||||
middle = Coordinate(FloatLongitude(2), FloatLatitude(0));
|
||||
end = Coordinate(FloatLongitude(1), FloatLatitude(0));
|
||||
first = Coordinate(FloatLongitude{1}, FloatLatitude{0});
|
||||
middle = Coordinate(FloatLongitude{2}, FloatLatitude{0});
|
||||
end = Coordinate(FloatLongitude{1}, FloatLatitude{0});
|
||||
angle = coordinate_calculation::computeAngle(first, middle, end);
|
||||
BOOST_CHECK_EQUAL(angle, 0);
|
||||
|
||||
// 90 degree left turn
|
||||
first = Coordinate(FloatLongitude(1), FloatLatitude(1));
|
||||
middle = Coordinate(FloatLongitude(0), FloatLatitude(1));
|
||||
end = Coordinate(FloatLongitude(0), FloatLatitude(2));
|
||||
first = Coordinate(FloatLongitude{1}, FloatLatitude{1});
|
||||
middle = Coordinate(FloatLongitude{0}, FloatLatitude{1});
|
||||
end = Coordinate(FloatLongitude{0}, FloatLatitude{2});
|
||||
angle = coordinate_calculation::computeAngle(first, middle, end);
|
||||
BOOST_CHECK_EQUAL(angle, 90);
|
||||
|
||||
// 90 degree right turn
|
||||
first = Coordinate(FloatLongitude(1), FloatLatitude(1));
|
||||
middle = Coordinate(FloatLongitude(0), FloatLatitude(1));
|
||||
end = Coordinate(FloatLongitude(0), FloatLatitude(0));
|
||||
first = Coordinate(FloatLongitude{1}, FloatLatitude{1});
|
||||
middle = Coordinate(FloatLongitude{0}, FloatLatitude{1});
|
||||
end = Coordinate(FloatLongitude{0}, FloatLatitude{0});
|
||||
angle = coordinate_calculation::computeAngle(first, middle, end);
|
||||
BOOST_CHECK_EQUAL(angle, 270);
|
||||
|
||||
// Weird cases
|
||||
// Crossing both the meridians
|
||||
first = Coordinate(FloatLongitude(-1), FloatLatitude(-1));
|
||||
middle = Coordinate(FloatLongitude(0), FloatLatitude(1));
|
||||
end = Coordinate(FloatLongitude(1), FloatLatitude(-1));
|
||||
first = Coordinate(FloatLongitude{-1}, FloatLatitude{-1});
|
||||
middle = Coordinate(FloatLongitude{0}, FloatLatitude{1});
|
||||
end = Coordinate(FloatLongitude{1}, FloatLatitude{-1});
|
||||
angle = coordinate_calculation::computeAngle(first, middle, end);
|
||||
BOOST_CHECK_CLOSE(angle, 53.1, 0.2);
|
||||
|
||||
// All coords in the same spot
|
||||
first = Coordinate(FloatLongitude(-1), FloatLatitude(-1));
|
||||
middle = Coordinate(FloatLongitude(-1), FloatLatitude(-1));
|
||||
end = Coordinate(FloatLongitude(-1), FloatLatitude(-1));
|
||||
first = Coordinate(FloatLongitude{-1}, FloatLatitude{-1});
|
||||
middle = Coordinate(FloatLongitude{-1}, FloatLatitude{-1});
|
||||
end = Coordinate(FloatLongitude{-1}, FloatLatitude{-1});
|
||||
angle = coordinate_calculation::computeAngle(first, middle, end);
|
||||
BOOST_CHECK_EQUAL(angle, 180);
|
||||
|
||||
// First two coords in the same spot, then heading north-east
|
||||
first = Coordinate(FloatLongitude(-1), FloatLatitude(-1));
|
||||
middle = Coordinate(FloatLongitude(-1), FloatLatitude(-1));
|
||||
end = Coordinate(FloatLongitude(1), FloatLatitude(1));
|
||||
first = Coordinate(FloatLongitude{-1}, FloatLatitude{-1});
|
||||
middle = Coordinate(FloatLongitude{-1}, FloatLatitude{-1});
|
||||
end = Coordinate(FloatLongitude{1}, FloatLatitude{1});
|
||||
angle = coordinate_calculation::computeAngle(first, middle, end);
|
||||
BOOST_CHECK_EQUAL(angle, 180);
|
||||
|
||||
// First two coords in the same spot, then heading west
|
||||
first = Coordinate(FloatLongitude(1), FloatLatitude(1));
|
||||
middle = Coordinate(FloatLongitude(1), FloatLatitude(1));
|
||||
end = Coordinate(FloatLongitude(2), FloatLatitude(1));
|
||||
first = Coordinate(FloatLongitude{1}, FloatLatitude{1});
|
||||
middle = Coordinate(FloatLongitude{1}, FloatLatitude{1});
|
||||
end = Coordinate(FloatLongitude{2}, FloatLatitude{1});
|
||||
angle = coordinate_calculation::computeAngle(first, middle, end);
|
||||
BOOST_CHECK_EQUAL(angle, 180);
|
||||
|
||||
// First two coords in the same spot then heading north
|
||||
first = Coordinate(FloatLongitude(1), FloatLatitude(1));
|
||||
middle = Coordinate(FloatLongitude(1), FloatLatitude(1));
|
||||
end = Coordinate(FloatLongitude(1), FloatLatitude(2));
|
||||
first = Coordinate(FloatLongitude{1}, FloatLatitude{1});
|
||||
middle = Coordinate(FloatLongitude{1}, FloatLatitude{1});
|
||||
end = Coordinate(FloatLongitude{1}, FloatLatitude{2});
|
||||
angle = coordinate_calculation::computeAngle(first, middle, end);
|
||||
BOOST_CHECK_EQUAL(angle, 180);
|
||||
|
||||
// Second two coords in the same spot
|
||||
first = Coordinate(FloatLongitude(1), FloatLatitude(1));
|
||||
middle = Coordinate(FloatLongitude(-1), FloatLatitude(-1));
|
||||
end = Coordinate(FloatLongitude(-1), FloatLatitude(-1));
|
||||
first = Coordinate(FloatLongitude{1}, FloatLatitude{1});
|
||||
middle = Coordinate(FloatLongitude{-1}, FloatLatitude{-1});
|
||||
end = Coordinate(FloatLongitude{-1}, FloatLatitude{-1});
|
||||
angle = coordinate_calculation::computeAngle(first, middle, end);
|
||||
BOOST_CHECK_EQUAL(angle, 180);
|
||||
|
||||
// First and last coords on the same spot
|
||||
first = Coordinate(FloatLongitude(1), FloatLatitude(1));
|
||||
middle = Coordinate(FloatLongitude(-1), FloatLatitude(-1));
|
||||
end = Coordinate(FloatLongitude(1), FloatLatitude(1));
|
||||
first = Coordinate(FloatLongitude{1}, FloatLatitude{1});
|
||||
middle = Coordinate(FloatLongitude{-1}, FloatLatitude{-1});
|
||||
end = Coordinate(FloatLongitude{1}, FloatLatitude{1});
|
||||
angle = coordinate_calculation::computeAngle(first, middle, end);
|
||||
BOOST_CHECK_EQUAL(angle, 0);
|
||||
|
||||
// Check the antimeridian
|
||||
first = Coordinate(FloatLongitude(180), FloatLatitude(90));
|
||||
middle = Coordinate(FloatLongitude(180), FloatLatitude(0));
|
||||
end = Coordinate(FloatLongitude(180), FloatLatitude(-90));
|
||||
first = Coordinate(FloatLongitude{180}, FloatLatitude{90});
|
||||
middle = Coordinate(FloatLongitude{180}, FloatLatitude{0});
|
||||
end = Coordinate(FloatLongitude{180}, FloatLatitude{-90});
|
||||
angle = coordinate_calculation::computeAngle(first, middle, end);
|
||||
BOOST_CHECK_EQUAL(angle, 180);
|
||||
|
||||
// Tiny changes below our calculation resolution
|
||||
// This should be equivalent to having two points on the same
|
||||
// spot.
|
||||
first = Coordinate(FloatLongitude(0), FloatLatitude(0));
|
||||
middle = Coordinate(FloatLongitude(1), FloatLatitude(0));
|
||||
end = Coordinate(FloatLongitude(1 + std::numeric_limits<double>::epsilon()), FloatLatitude(0));
|
||||
first = Coordinate{FloatLongitude{0}, FloatLatitude{0}};
|
||||
middle = Coordinate{FloatLongitude{1}, FloatLatitude{0}};
|
||||
end = Coordinate{FloatLongitude{1 + std::numeric_limits<double>::epsilon()}, FloatLatitude{0}};
|
||||
angle = coordinate_calculation::computeAngle(first, middle, end);
|
||||
BOOST_CHECK_EQUAL(angle, 180);
|
||||
|
||||
// Invalid values
|
||||
/* TODO: Enable this when I figure out how to use BOOST_CHECK_THROW
|
||||
* and not have the whole test case fail...
|
||||
first = Coordinate(FloatLongitude(0), FloatLatitude(0));
|
||||
middle = Coordinate(FloatLongitude(1), FloatLatitude(0));
|
||||
end = Coordinate(FloatLongitude(std::numeric_limits<double>::max()), FloatLatitude(0));
|
||||
first = Coordinate(FloatLongitude{0}, FloatLatitude{0});
|
||||
middle = Coordinate(FloatLongitude{1}, FloatLatitude{0});
|
||||
end = Coordinate(FloatLongitude(std::numeric_limits<double>::max()), FloatLatitude{0});
|
||||
BOOST_CHECK_THROW( coordinate_calculation::computeAngle(first,middle,end),
|
||||
boost::numeric::positive_overflow);
|
||||
*/
|
||||
@@ -139,9 +139,9 @@ BOOST_AUTO_TEST_CASE(compute_angle)
|
||||
// Regression test for bug captured in #1347
|
||||
BOOST_AUTO_TEST_CASE(regression_test_1347)
|
||||
{
|
||||
Coordinate u(FloatLongitude(-100), FloatLatitude(10));
|
||||
Coordinate v(FloatLongitude(-100.002), FloatLatitude(10.001));
|
||||
Coordinate q(FloatLongitude(-100.001), FloatLatitude(10.002));
|
||||
Coordinate u(FloatLongitude{-100}, FloatLatitude{10});
|
||||
Coordinate v(FloatLongitude{-100.002}, FloatLatitude{10.001});
|
||||
Coordinate q(FloatLongitude{-100.001}, FloatLatitude{10.002});
|
||||
|
||||
double d1 = coordinate_calculation::perpendicularDistance(u, v, q);
|
||||
|
||||
@@ -179,10 +179,10 @@ BOOST_AUTO_TEST_CASE(regression_point_on_segment)
|
||||
|
||||
FloatCoordinate diff{target.lon - start.lon, target.lat - start.lat};
|
||||
|
||||
BOOST_CHECK_CLOSE(static_cast<double>(start.lon + FloatLongitude(ratio) * diff.lon),
|
||||
BOOST_CHECK_CLOSE(static_cast<double>(start.lon + FloatLongitude{ratio} * diff.lon),
|
||||
static_cast<double>(nearest.lon),
|
||||
0.1);
|
||||
BOOST_CHECK_CLOSE(static_cast<double>(start.lat + FloatLatitude(ratio) * diff.lat),
|
||||
BOOST_CHECK_CLOSE(static_cast<double>(start.lat + FloatLatitude{ratio} * diff.lat),
|
||||
static_cast<double>(nearest.lat),
|
||||
0.1);
|
||||
}
|
||||
@@ -257,56 +257,56 @@ BOOST_AUTO_TEST_CASE(point_on_segment)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(circleCenter)
|
||||
{
|
||||
Coordinate a(FloatLongitude(-100.), FloatLatitude(10.));
|
||||
Coordinate b(FloatLongitude(-100.002), FloatLatitude(10.001));
|
||||
Coordinate c(FloatLongitude(-100.001), FloatLatitude(10.002));
|
||||
Coordinate a(FloatLongitude{-100.}, FloatLatitude{10.});
|
||||
Coordinate b(FloatLongitude{-100.002}, FloatLatitude{10.001});
|
||||
Coordinate c(FloatLongitude{-100.001}, FloatLatitude{10.002});
|
||||
|
||||
auto result = coordinate_calculation::circleCenter(a, b, c);
|
||||
BOOST_CHECK(result);
|
||||
BOOST_CHECK_EQUAL(*result, Coordinate(FloatLongitude(-100.000833), FloatLatitude(10.000833)));
|
||||
BOOST_CHECK_EQUAL(*result, Coordinate(FloatLongitude{-100.000833}, FloatLatitude{10.000833}));
|
||||
|
||||
// Co-linear longitude
|
||||
a = Coordinate(FloatLongitude(-100.), FloatLatitude(10.));
|
||||
b = Coordinate(FloatLongitude(-100.001), FloatLatitude(10.001));
|
||||
c = Coordinate(FloatLongitude(-100.001), FloatLatitude(10.002));
|
||||
a = Coordinate(FloatLongitude{-100.}, FloatLatitude{10.});
|
||||
b = Coordinate(FloatLongitude{-100.001}, FloatLatitude{10.001});
|
||||
c = Coordinate(FloatLongitude{-100.001}, FloatLatitude{10.002});
|
||||
result = coordinate_calculation::circleCenter(a, b, c);
|
||||
BOOST_CHECK(result);
|
||||
BOOST_CHECK_EQUAL(*result, Coordinate(FloatLongitude(-99.9995), FloatLatitude(10.0015)));
|
||||
BOOST_CHECK_EQUAL(*result, Coordinate(FloatLongitude{-99.9995}, FloatLatitude{10.0015}));
|
||||
|
||||
// Co-linear longitude, impossible to calculate
|
||||
a = Coordinate(FloatLongitude(-100.001), FloatLatitude(10.));
|
||||
b = Coordinate(FloatLongitude(-100.001), FloatLatitude(10.001));
|
||||
c = Coordinate(FloatLongitude(-100.001), FloatLatitude(10.002));
|
||||
a = Coordinate(FloatLongitude{-100.001}, FloatLatitude{10.});
|
||||
b = Coordinate(FloatLongitude{-100.001}, FloatLatitude{10.001});
|
||||
c = Coordinate(FloatLongitude{-100.001}, FloatLatitude{10.002});
|
||||
result = coordinate_calculation::circleCenter(a, b, c);
|
||||
BOOST_CHECK(!result);
|
||||
|
||||
// Co-linear latitude, this is a real case that failed
|
||||
a = Coordinate(FloatLongitude(-112.096234), FloatLatitude(41.147101));
|
||||
b = Coordinate(FloatLongitude(-112.096606), FloatLatitude(41.147101));
|
||||
c = Coordinate(FloatLongitude(-112.096419), FloatLatitude(41.147259));
|
||||
a = Coordinate(FloatLongitude{-112.096234}, FloatLatitude{41.147101});
|
||||
b = Coordinate(FloatLongitude{-112.096606}, FloatLatitude{41.147101});
|
||||
c = Coordinate(FloatLongitude{-112.096419}, FloatLatitude{41.147259});
|
||||
result = coordinate_calculation::circleCenter(a, b, c);
|
||||
BOOST_CHECK(result);
|
||||
BOOST_CHECK_EQUAL(*result, Coordinate(FloatLongitude(-112.09642), FloatLatitude(41.14707)));
|
||||
BOOST_CHECK_EQUAL(*result, Coordinate(FloatLongitude{-112.09642}, FloatLatitude{41.14707}));
|
||||
|
||||
// Co-linear latitude, variation
|
||||
a = Coordinate(FloatLongitude(-112.096234), FloatLatitude(41.147101));
|
||||
b = Coordinate(FloatLongitude(-112.096606), FloatLatitude(41.147259));
|
||||
c = Coordinate(FloatLongitude(-112.096419), FloatLatitude(41.147259));
|
||||
a = Coordinate(FloatLongitude{-112.096234}, FloatLatitude{41.147101});
|
||||
b = Coordinate(FloatLongitude{-112.096606}, FloatLatitude{41.147259});
|
||||
c = Coordinate(FloatLongitude{-112.096419}, FloatLatitude{41.147259});
|
||||
result = coordinate_calculation::circleCenter(a, b, c);
|
||||
BOOST_CHECK(result);
|
||||
BOOST_CHECK_EQUAL(*result, Coordinate(FloatLongitude(-112.096512), FloatLatitude(41.146962)));
|
||||
BOOST_CHECK_EQUAL(*result, Coordinate(FloatLongitude{-112.096512}, FloatLatitude{41.146962}));
|
||||
|
||||
// Co-linear latitude, impossible to calculate
|
||||
a = Coordinate(FloatLongitude(-112.096234), FloatLatitude(41.147259));
|
||||
b = Coordinate(FloatLongitude(-112.096606), FloatLatitude(41.147259));
|
||||
c = Coordinate(FloatLongitude(-112.096419), FloatLatitude(41.147259));
|
||||
a = Coordinate(FloatLongitude{-112.096234}, FloatLatitude{41.147259});
|
||||
b = Coordinate(FloatLongitude{-112.096606}, FloatLatitude{41.147259});
|
||||
c = Coordinate(FloatLongitude{-112.096419}, FloatLatitude{41.147259});
|
||||
result = coordinate_calculation::circleCenter(a, b, c);
|
||||
BOOST_CHECK(!result);
|
||||
|
||||
// Out of bounds
|
||||
a = Coordinate(FloatLongitude(-112.096234), FloatLatitude(41.147258));
|
||||
b = Coordinate(FloatLongitude(-112.106606), FloatLatitude(41.147259));
|
||||
c = Coordinate(FloatLongitude(-113.096419), FloatLatitude(41.147258));
|
||||
a = Coordinate(FloatLongitude{-112.096234}, FloatLatitude{41.147258});
|
||||
b = Coordinate(FloatLongitude{-112.106606}, FloatLatitude{41.147259});
|
||||
c = Coordinate(FloatLongitude{-113.096419}, FloatLatitude{41.147258});
|
||||
result = coordinate_calculation::circleCenter(a, b, c);
|
||||
BOOST_CHECK(!result);
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ BOOST_AUTO_TEST_CASE(insert_and_retrieve_packed_test)
|
||||
|
||||
for (std::size_t i = 0; i < num_test_cases; i++)
|
||||
{
|
||||
OSMNodeID r = static_cast<OSMNodeID>(rand() % 2147483647); // max 33-bit uint
|
||||
OSMNodeID r {static_cast<std::uint64_t>(rand() % 2147483647)}; // max 33-bit uint
|
||||
|
||||
packed_ids.push_back(r);
|
||||
original_ids.push_back(r);
|
||||
|
||||
@@ -27,22 +27,22 @@ BOOST_AUTO_TEST_CASE(get_min_dist_test)
|
||||
// +- -80
|
||||
// |
|
||||
RectangleInt2D ne{
|
||||
FloatLongitude(10), FloatLongitude(100), FloatLatitude(10), FloatLatitude(80)};
|
||||
FloatLongitude{10}, FloatLongitude{100}, FloatLatitude{10}, FloatLatitude{80}};
|
||||
RectangleInt2D nw{
|
||||
FloatLongitude(-100), FloatLongitude(-10), FloatLatitude(10), FloatLatitude(80)};
|
||||
FloatLongitude{-100}, FloatLongitude{-10}, FloatLatitude{10}, FloatLatitude{80}};
|
||||
RectangleInt2D se{
|
||||
FloatLongitude(10), FloatLongitude(100), FloatLatitude(-80), FloatLatitude(-10)};
|
||||
FloatLongitude{10}, FloatLongitude{100}, FloatLatitude{-80}, FloatLatitude{-10}};
|
||||
RectangleInt2D sw{
|
||||
FloatLongitude(-100), FloatLongitude(-10), FloatLatitude(-80), FloatLatitude(-10)};
|
||||
FloatLongitude{-100}, FloatLongitude{-10}, FloatLatitude{-80}, FloatLatitude{-10}};
|
||||
|
||||
Coordinate nw_sw{FloatLongitude(-100.1), FloatLatitude(9.9)};
|
||||
Coordinate nw_se{FloatLongitude(-9.9), FloatLatitude(9.9)};
|
||||
Coordinate nw_ne{FloatLongitude(-9.9), FloatLatitude(80.1)};
|
||||
Coordinate nw_nw{FloatLongitude(-100.1), FloatLatitude(80.1)};
|
||||
Coordinate nw_s{FloatLongitude(-55), FloatLatitude(9.9)};
|
||||
Coordinate nw_e{FloatLongitude(-9.9), FloatLatitude(45.0)};
|
||||
Coordinate nw_w{FloatLongitude(-100.1), FloatLatitude(45.0)};
|
||||
Coordinate nw_n{FloatLongitude(-55), FloatLatitude(80.1)};
|
||||
Coordinate nw_sw{FloatLongitude{-100.1}, FloatLatitude{9.9}};
|
||||
Coordinate nw_se{FloatLongitude{-9.9}, FloatLatitude{9.9}};
|
||||
Coordinate nw_ne{FloatLongitude{-9.9}, FloatLatitude{80.1}};
|
||||
Coordinate nw_nw{FloatLongitude{-100.1}, FloatLatitude{80.1}};
|
||||
Coordinate nw_s{FloatLongitude{-55}, FloatLatitude{9.9}};
|
||||
Coordinate nw_e{FloatLongitude{-9.9}, FloatLatitude{45.0}};
|
||||
Coordinate nw_w{FloatLongitude{-100.1}, FloatLatitude{45.0}};
|
||||
Coordinate nw_n{FloatLongitude{-55}, FloatLatitude{80.1}};
|
||||
BOOST_CHECK_CLOSE(
|
||||
nw.GetMinSquaredDist(nw_sw), 0.02 * COORDINATE_PRECISION * COORDINATE_PRECISION, 0.1);
|
||||
BOOST_CHECK_CLOSE(
|
||||
@@ -60,14 +60,14 @@ BOOST_AUTO_TEST_CASE(get_min_dist_test)
|
||||
BOOST_CHECK_CLOSE(
|
||||
nw.GetMinSquaredDist(nw_n), 0.01 * COORDINATE_PRECISION * COORDINATE_PRECISION, 0.1);
|
||||
|
||||
Coordinate ne_sw{FloatLongitude(9.9), FloatLatitude(9.9)};
|
||||
Coordinate ne_se{FloatLongitude(100.1), FloatLatitude(9.9)};
|
||||
Coordinate ne_ne{FloatLongitude(100.1), FloatLatitude(80.1)};
|
||||
Coordinate ne_nw{FloatLongitude(9.9), FloatLatitude(80.1)};
|
||||
Coordinate ne_s{FloatLongitude(55), FloatLatitude(9.9)};
|
||||
Coordinate ne_e{FloatLongitude(100.1), FloatLatitude(45.0)};
|
||||
Coordinate ne_w{FloatLongitude(9.9), FloatLatitude(45.0)};
|
||||
Coordinate ne_n{FloatLongitude(55), FloatLatitude(80.1)};
|
||||
Coordinate ne_sw{FloatLongitude{9.9}, FloatLatitude{9.9}};
|
||||
Coordinate ne_se{FloatLongitude{100.1}, FloatLatitude{9.9}};
|
||||
Coordinate ne_ne{FloatLongitude{100.1}, FloatLatitude{80.1}};
|
||||
Coordinate ne_nw{FloatLongitude{9.9}, FloatLatitude{80.1}};
|
||||
Coordinate ne_s{FloatLongitude{55}, FloatLatitude{9.9}};
|
||||
Coordinate ne_e{FloatLongitude{100.1}, FloatLatitude{45.0}};
|
||||
Coordinate ne_w{FloatLongitude{9.9}, FloatLatitude{45.0}};
|
||||
Coordinate ne_n{FloatLongitude{55}, FloatLatitude{80.1}};
|
||||
BOOST_CHECK_CLOSE(
|
||||
ne.GetMinSquaredDist(ne_sw), 0.02 * COORDINATE_PRECISION * COORDINATE_PRECISION, 0.1);
|
||||
BOOST_CHECK_CLOSE(
|
||||
@@ -85,14 +85,14 @@ BOOST_AUTO_TEST_CASE(get_min_dist_test)
|
||||
BOOST_CHECK_CLOSE(
|
||||
ne.GetMinSquaredDist(ne_n), 0.01 * COORDINATE_PRECISION * COORDINATE_PRECISION, 0.1);
|
||||
|
||||
Coordinate se_ne{FloatLongitude(100.1), FloatLatitude(-9.9)};
|
||||
Coordinate se_nw{FloatLongitude(9.9), FloatLatitude(-9.9)};
|
||||
Coordinate se_sw{FloatLongitude(9.9), FloatLatitude(-80.1)};
|
||||
Coordinate se_se{FloatLongitude(100.1), FloatLatitude(-80.1)};
|
||||
Coordinate se_n{FloatLongitude(55), FloatLatitude(-9.9)};
|
||||
Coordinate se_w{FloatLongitude(9.9), FloatLatitude(-45.0)};
|
||||
Coordinate se_e{FloatLongitude(100.1), FloatLatitude(-45.0)};
|
||||
Coordinate se_s{FloatLongitude(55), FloatLatitude(-80.1)};
|
||||
Coordinate se_ne{FloatLongitude{100.1}, FloatLatitude{-9.9}};
|
||||
Coordinate se_nw{FloatLongitude{9.9}, FloatLatitude{-9.9}};
|
||||
Coordinate se_sw{FloatLongitude{9.9}, FloatLatitude{-80.1}};
|
||||
Coordinate se_se{FloatLongitude{100.1}, FloatLatitude{-80.1}};
|
||||
Coordinate se_n{FloatLongitude{55}, FloatLatitude{-9.9}};
|
||||
Coordinate se_w{FloatLongitude{9.9}, FloatLatitude{-45.0}};
|
||||
Coordinate se_e{FloatLongitude{100.1}, FloatLatitude{-45.0}};
|
||||
Coordinate se_s{FloatLongitude{55}, FloatLatitude{-80.1}};
|
||||
BOOST_CHECK_CLOSE(
|
||||
se.GetMinSquaredDist(se_sw), 0.02 * COORDINATE_PRECISION * COORDINATE_PRECISION, 0.1);
|
||||
BOOST_CHECK_CLOSE(
|
||||
@@ -110,14 +110,14 @@ BOOST_AUTO_TEST_CASE(get_min_dist_test)
|
||||
BOOST_CHECK_CLOSE(
|
||||
se.GetMinSquaredDist(se_n), 0.01 * COORDINATE_PRECISION * COORDINATE_PRECISION, 0.1);
|
||||
|
||||
Coordinate sw_ne{FloatLongitude(-9.9), FloatLatitude(-9.9)};
|
||||
Coordinate sw_nw{FloatLongitude(-100.1), FloatLatitude(-9.9)};
|
||||
Coordinate sw_sw{FloatLongitude(-100.1), FloatLatitude(-80.1)};
|
||||
Coordinate sw_se{FloatLongitude(-9.9), FloatLatitude(-80.1)};
|
||||
Coordinate sw_n{FloatLongitude(-55), FloatLatitude(-9.9)};
|
||||
Coordinate sw_w{FloatLongitude(-100.1), FloatLatitude(-45.0)};
|
||||
Coordinate sw_e{FloatLongitude(-9.9), FloatLatitude(-45.0)};
|
||||
Coordinate sw_s{FloatLongitude(-55), FloatLatitude(-80.1)};
|
||||
Coordinate sw_ne{FloatLongitude{-9.9}, FloatLatitude{-9.9}};
|
||||
Coordinate sw_nw{FloatLongitude{-100.1}, FloatLatitude{-9.9}};
|
||||
Coordinate sw_sw{FloatLongitude{-100.1}, FloatLatitude{-80.1}};
|
||||
Coordinate sw_se{FloatLongitude{-9.9}, FloatLatitude{-80.1}};
|
||||
Coordinate sw_n{FloatLongitude{-55}, FloatLatitude{-9.9}};
|
||||
Coordinate sw_w{FloatLongitude{-100.1}, FloatLatitude{-45.0}};
|
||||
Coordinate sw_e{FloatLongitude{-9.9}, FloatLatitude{-45.0}};
|
||||
Coordinate sw_s{FloatLongitude{-55}, FloatLatitude{-80.1}};
|
||||
BOOST_CHECK_CLOSE(
|
||||
sw.GetMinSquaredDist(sw_sw), 0.02 * COORDINATE_PRECISION * COORDINATE_PRECISION, 0.1);
|
||||
BOOST_CHECK_CLOSE(
|
||||
|
||||
@@ -117,7 +117,7 @@ template <unsigned NUM_NODES, unsigned NUM_EDGES> struct RandomGraphFixture
|
||||
{
|
||||
int lon = lon_udist(g);
|
||||
int lat = lat_udist(g);
|
||||
coords.emplace_back(Coordinate(FixedLongitude(lon), FixedLatitude(lat)));
|
||||
coords.emplace_back(Coordinate(FixedLongitude{lon}, FixedLatitude{lat}));
|
||||
}
|
||||
|
||||
std::uniform_int_distribution<> edge_udist(0, coords.size() - 1);
|
||||
@@ -216,7 +216,7 @@ void sampling_verify_rtree(RTreeT &rtree,
|
||||
std::vector<Coordinate> queries;
|
||||
for (unsigned i = 0; i < num_samples; i++)
|
||||
{
|
||||
queries.emplace_back(FixedLongitude(lon_udist(g)), FixedLatitude(lat_udist(g)));
|
||||
queries.emplace_back(FixedLongitude{lon_udist(g)}, FixedLatitude{lat_udist(g)});
|
||||
}
|
||||
|
||||
for (const auto &q : queries)
|
||||
@@ -324,7 +324,7 @@ BOOST_AUTO_TEST_CASE(regression_test)
|
||||
LinearSearchNN<TestData> lsnn(fixture.coords, fixture.edges);
|
||||
|
||||
// query a node just right of the center of the gap
|
||||
Coordinate input(FloatLongitude(55.1), FloatLatitude(20.0));
|
||||
Coordinate input(FloatLongitude{55.1}, FloatLatitude{20.0});
|
||||
auto result_rtree = rtree.Nearest(input, 1);
|
||||
auto result_ls = lsnn.Nearest(input, 1);
|
||||
|
||||
@@ -342,8 +342,8 @@ BOOST_AUTO_TEST_CASE(radius_regression_test)
|
||||
using Edge = std::pair<unsigned, unsigned>;
|
||||
GraphFixture fixture(
|
||||
{
|
||||
Coord(FloatLongitude(0.0), FloatLatitude(0.0)),
|
||||
Coord(FloatLongitude(10.0), FloatLatitude(10.0)),
|
||||
Coord(FloatLongitude{0.0}, FloatLatitude{0.0}),
|
||||
Coord(FloatLongitude{10.0}, FloatLatitude{10.0}),
|
||||
},
|
||||
{Edge(0, 1), Edge(1, 0)});
|
||||
|
||||
@@ -355,7 +355,7 @@ BOOST_AUTO_TEST_CASE(radius_regression_test)
|
||||
engine::GeospatialQuery<MiniStaticRTree, MockDataFacade> query(
|
||||
rtree, fixture.coords, mockfacade);
|
||||
|
||||
Coordinate input(FloatLongitude(5.2), FloatLatitude(5.0));
|
||||
Coordinate input(FloatLongitude{5.2}, FloatLatitude{5.0});
|
||||
|
||||
{
|
||||
auto results = query.NearestPhantomNodesInRange(input, 0.01);
|
||||
@@ -369,8 +369,8 @@ BOOST_AUTO_TEST_CASE(bearing_tests)
|
||||
using Edge = std::pair<unsigned, unsigned>;
|
||||
GraphFixture fixture(
|
||||
{
|
||||
Coord(FloatLongitude(0.0), FloatLatitude(0.0)),
|
||||
Coord(FloatLongitude(10.0), FloatLatitude(10.0)),
|
||||
Coord(FloatLongitude{0.0}, FloatLatitude{0.0}),
|
||||
Coord(FloatLongitude{10.0}, FloatLatitude{10.0}),
|
||||
},
|
||||
{Edge(0, 1), Edge(1, 0)});
|
||||
|
||||
@@ -382,7 +382,7 @@ BOOST_AUTO_TEST_CASE(bearing_tests)
|
||||
engine::GeospatialQuery<MiniStaticRTree, MockDataFacade> query(
|
||||
rtree, fixture.coords, mockfacade);
|
||||
|
||||
Coordinate input(FloatLongitude(5.1), FloatLatitude(5.0));
|
||||
Coordinate input(FloatLongitude{5.1}, FloatLatitude{5.0});
|
||||
|
||||
{
|
||||
auto results = query.NearestPhantomNodes(input, 5);
|
||||
@@ -440,11 +440,11 @@ BOOST_AUTO_TEST_CASE(bbox_search_tests)
|
||||
|
||||
GraphFixture fixture(
|
||||
{
|
||||
Coord(FloatLongitude(0.0), FloatLatitude(0.0)),
|
||||
Coord(FloatLongitude(1.0), FloatLatitude(1.0)),
|
||||
Coord(FloatLongitude(2.0), FloatLatitude(2.0)),
|
||||
Coord(FloatLongitude(3.0), FloatLatitude(3.0)),
|
||||
Coord(FloatLongitude(4.0), FloatLatitude(4.0)),
|
||||
Coord(FloatLongitude{0.0}, FloatLatitude{0.0}),
|
||||
Coord(FloatLongitude{1.0}, FloatLatitude{1.0}),
|
||||
Coord(FloatLongitude{2.0}, FloatLatitude{2.0}),
|
||||
Coord(FloatLongitude{3.0}, FloatLatitude{3.0}),
|
||||
Coord(FloatLongitude{4.0}, FloatLatitude{4.0}),
|
||||
},
|
||||
{Edge(0, 1), Edge(1, 2), Edge(2, 3), Edge(3, 4)});
|
||||
|
||||
@@ -458,14 +458,14 @@ BOOST_AUTO_TEST_CASE(bbox_search_tests)
|
||||
|
||||
{
|
||||
RectangleInt2D bbox = {
|
||||
FloatLongitude(0.5), FloatLongitude(1.5), FloatLatitude(0.5), FloatLatitude(1.5)};
|
||||
FloatLongitude{0.5}, FloatLongitude{1.5}, FloatLatitude{0.5}, FloatLatitude{1.5}};
|
||||
auto results = query.Search(bbox);
|
||||
BOOST_CHECK_EQUAL(results.size(), 2);
|
||||
}
|
||||
|
||||
{
|
||||
RectangleInt2D bbox = {
|
||||
FloatLongitude(1.5), FloatLongitude(3.5), FloatLatitude(1.5), FloatLatitude(3.5)};
|
||||
FloatLongitude{1.5}, FloatLongitude{3.5}, FloatLatitude{1.5}, FloatLatitude{3.5}};
|
||||
auto results = query.Search(bbox);
|
||||
BOOST_CHECK_EQUAL(results.size(), 3);
|
||||
}
|
||||
|
||||
@@ -22,23 +22,23 @@ BOOST_AUTO_TEST_CASE(lon_to_pixel)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(lat_to_pixel)
|
||||
{
|
||||
BOOST_CHECK_CLOSE(web_mercator::latToY(util::FloatLatitude(43.733947)) *
|
||||
BOOST_CHECK_CLOSE(web_mercator::latToY(util::FloatLatitude{43.733947}) *
|
||||
web_mercator::DEGREE_TO_PX,
|
||||
5424361.75863,
|
||||
0.1);
|
||||
BOOST_CHECK_CLOSE(web_mercator::latToY(util::FloatLatitude(43.733799)) *
|
||||
BOOST_CHECK_CLOSE(web_mercator::latToY(util::FloatLatitude{43.733799}) *
|
||||
web_mercator::DEGREE_TO_PX,
|
||||
5424338.95731,
|
||||
0.1);
|
||||
BOOST_CHECK_CLOSE(web_mercator::latToY(util::FloatLatitude(43.733922)) *
|
||||
BOOST_CHECK_CLOSE(web_mercator::latToY(util::FloatLatitude{43.733922}) *
|
||||
web_mercator::DEGREE_TO_PX,
|
||||
5424357.90705,
|
||||
0.1);
|
||||
BOOST_CHECK_CLOSE(web_mercator::latToY(util::FloatLatitude(43.733697)) *
|
||||
BOOST_CHECK_CLOSE(web_mercator::latToY(util::FloatLatitude{43.733697}) *
|
||||
web_mercator::DEGREE_TO_PX,
|
||||
5424323.24293,
|
||||
0.1);
|
||||
BOOST_CHECK_CLOSE(web_mercator::latToY(util::FloatLatitude(43.733729)) *
|
||||
BOOST_CHECK_CLOSE(web_mercator::latToY(util::FloatLatitude{43.733729}) *
|
||||
web_mercator::DEGREE_TO_PX,
|
||||
5424328.17293,
|
||||
0.1);
|
||||
|
||||
Reference in New Issue
Block a user