mirror of
https://github.com/boostorg/geometry.git
synced 2025-05-09 23:24:02 +00:00
[test] Move tests from within to covered_by
This commit is contained in:
parent
4c65c0d936
commit
3b44904c80
@ -1,6 +1,6 @@
|
||||
// Boost.Geometry
|
||||
|
||||
// Copyright (c) 2016-2022 Oracle and/or its affiliates.
|
||||
// Copyright (c) 2016-2023 Oracle and/or its affiliates.
|
||||
|
||||
// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
|
||||
// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
|
||||
@ -110,7 +110,7 @@ void test_point_polygon()
|
||||
std::is_same<typename bg::cs_tag<P>::type, bg::geographic_tag>::value,
|
||||
bg::strategy::within::geographic_winding<P>,
|
||||
bg::strategy::within::spherical_winding<P>
|
||||
> s;
|
||||
> ws;
|
||||
|
||||
using poly = bg::model::polygon<P>;
|
||||
|
||||
@ -121,7 +121,7 @@ void test_point_polygon()
|
||||
test_geometry<P, poly>("POINT(-179 0)",
|
||||
"POLYGON((0 0, 0 2, 2 0, 0 -2, 0 0))",
|
||||
false,
|
||||
s);
|
||||
ws);
|
||||
|
||||
test_geometry<P, poly>("POINT(1 0)",
|
||||
"POLYGON((0 0, 0 2, 2 0, 0 -2, 0 0))",
|
||||
@ -129,7 +129,233 @@ void test_point_polygon()
|
||||
test_geometry<P, poly>("POINT(1 0)",
|
||||
"POLYGON((0 0, 0 2, 2 0, 0 -2, 0 0))",
|
||||
true,
|
||||
s);
|
||||
ws);
|
||||
|
||||
using Point = P;
|
||||
// Segment going through pole
|
||||
{
|
||||
bg::model::polygon<Point> poly_n1;
|
||||
bg::read_wkt("POLYGON((-90 80,90 80,90 70,-90 70, -90 80))", poly_n1);
|
||||
// Points on segment
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-90, 85), poly_n1, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(90, 85), poly_n1, ws), true);
|
||||
// Points on pole
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(90, 90), poly_n1, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(0, 90), poly_n1, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(45, 90), poly_n1, ws), true);
|
||||
}
|
||||
// Segment going through pole
|
||||
{
|
||||
bg::model::polygon<Point> poly_n2;
|
||||
bg::read_wkt("POLYGON((-90 80,90 70,0 70,-90 80))", poly_n2);
|
||||
// Points on segment
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-90, 85), poly_n2, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(90, 75), poly_n2, ws), true);
|
||||
// Points outside but on the same level as segment
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-90, 75), poly_n2, ws), false);
|
||||
}
|
||||
// Possibly invalid, 2-segment polygon with segment going through pole
|
||||
/*{
|
||||
bg::model::polygon<Point> poly_n;
|
||||
bg::read_wkt("POLYGON((-90 80,90 70,-90 80))", poly_n);
|
||||
// Point within
|
||||
BOOST_CHECK_EQUAL(bg::within(Point(0, 89), poly_n), true);
|
||||
// Points on segment
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-90, 85), poly_n), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(90, 75), poly_n), true);
|
||||
// Points outside but on the same level as segment
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-90, 75), poly_n), false);
|
||||
}*/
|
||||
// Segment endpoints on North pole with arbitrary longitudes
|
||||
{
|
||||
bg::model::polygon<Point> poly_n4;
|
||||
bg::read_wkt("POLYGON((45 90,45 80,-10 80,45 90))", poly_n4);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, 85), poly_n4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(0, 85), poly_n4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(45, 85), poly_n4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, 85), poly_n4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, 85), poly_n4, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-5, 85), poly_n4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, 70), poly_n4, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, 70), poly_n4, ws), false);
|
||||
|
||||
// the same polygon but with two points representing the pole
|
||||
bg::model::polygon<Point> poly_n4b;
|
||||
bg::read_wkt("POLYGON((45 90,45 80,-10 80,60 90,45 90))", poly_n4b);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, 85), poly_n4b, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(0, 85), poly_n4b, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(45, 85), poly_n4b, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, 85), poly_n4b, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, 85), poly_n4b, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-5, 85), poly_n4b, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, 70), poly_n4b, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, 70), poly_n4b, ws), false);
|
||||
|
||||
bg::model::polygon<Point> poly_n5;
|
||||
bg::read_wkt("POLYGON((0 90,-10 80,45 80,0 90))", poly_n5);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, 85), poly_n5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(0, 85), poly_n5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, 85), poly_n5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(1, 85), poly_n5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(45, 85), poly_n5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, 85), poly_n5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, 85), poly_n5, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-5, 85), poly_n5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, 70), poly_n5, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, 70), poly_n5, ws), false);
|
||||
|
||||
bg::model::polygon<Point> poly_n_4edges;
|
||||
bg::read_wkt("POLYGON((0 90,-10 70,5 60,20 80,0 90))", poly_n_4edges);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(3, 89), poly_n_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, 87), poly_n_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, 86), poly_n_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(15, 84), poly_n_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, 61), poly_n_4edges, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(15, 81), poly_n_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(7, 50), poly_n_4edges, ws), false);
|
||||
|
||||
bg::model::polygon<Point> poly_n_5edges;
|
||||
bg::read_wkt("POLYGON((0 90,-10 70,5 60,10 85,20 80,0 90))", poly_n_5edges);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(3, 89), poly_n_5edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, 87), poly_n_5edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, 86), poly_n_5edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(15, 84), poly_n_5edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, 61), poly_n_5edges, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(15, 81), poly_n_5edges, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(7, 50), poly_n_5edges, ws), false);
|
||||
}
|
||||
// Segment going through pole
|
||||
{
|
||||
bg::model::polygon<Point> poly_s1;
|
||||
bg::read_wkt("POLYGON((-90 -80,-90 -70,90 -70,90 -80,-90 -80))", poly_s1);
|
||||
// Points on segment
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-90, -85), poly_s1, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(90, -85), poly_s1, ws), true);
|
||||
// Points on pole
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(90, -90), poly_s1, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(0, -90), poly_s1, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(45, -90), poly_s1, ws), true);
|
||||
}
|
||||
// Segment endpoints on South pole with arbitrary longitudes
|
||||
{
|
||||
bg::model::polygon<Point> poly_s2;
|
||||
bg::read_wkt("POLYGON((45 -90,0 -80,45 -80,45 -90))", poly_s2);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(0, -85), poly_s2, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(45, -85), poly_s2, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, -85), poly_s2, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, -85), poly_s2, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-5, -85), poly_s2, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, -70), poly_s2, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, -70), poly_s2, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-5, -70), poly_s2, ws), false);
|
||||
|
||||
bg::model::polygon<Point> poly_s3;
|
||||
bg::read_wkt("POLYGON((45 -90,-10 -80,45 -80,45 -90))", poly_s3);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, -85), poly_s3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(0, -85), poly_s3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, -85), poly_s3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(1, -85), poly_s3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(45, -85), poly_s3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, -85), poly_s3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, -85), poly_s3, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-5, -85), poly_s3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, -70), poly_s3, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, -70), poly_s3, ws), false);
|
||||
|
||||
bg::model::polygon<Point> poly_s5;
|
||||
bg::read_wkt("POLYGON((0 -90,-10 -80,45 -80,0 -90))", poly_s5);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, -85), poly_s5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(0, -85), poly_s5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, -85), poly_s5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(1, -85), poly_s5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(45, -85), poly_s5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, -85), poly_s5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, -85), poly_s5, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-5, -85), poly_s5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, -70), poly_s5, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, -70), poly_s5, ws), false);
|
||||
|
||||
bg::model::polygon<Point> poly_s4;
|
||||
bg::read_wkt("POLYGON((0 -89,-10 -80,45 -80,0 -89))", poly_s4);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, -85), poly_s4, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(0, -85), poly_s4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(45, -85), poly_s4, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, -85), poly_s4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, -85), poly_s4, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-5, -85), poly_s4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, -71), poly_s4, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, -70), poly_s4, ws), false);
|
||||
|
||||
//more complex examples
|
||||
bg::model::polygon<Point> poly_s_complex_4edges;
|
||||
bg::read_wkt("POLYGON((0 -90,-10 -70,5 -60,20 -80,0 -90))", poly_s_complex_4edges);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(3, -89), poly_s_complex_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, -87), poly_s_complex_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, -86), poly_s_complex_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(15, -84), poly_s_complex_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, -61), poly_s_complex_4edges, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(15, -81), poly_s_complex_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(7, -50), poly_s_complex_4edges, ws), false);
|
||||
|
||||
bg::model::polygon<Point> poly_s_complex_5edges;
|
||||
bg::read_wkt("POLYGON((0 -90,-10 -70,5 -60,10 -85,20 -80,0 -90))", poly_s_complex_5edges);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(3, -89), poly_s_complex_5edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, -87), poly_s_complex_5edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, -86), poly_s_complex_5edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(15, -84), poly_s_complex_5edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, -61), poly_s_complex_5edges, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(15, -81), poly_s_complex_5edges, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(7, -50), poly_s_complex_5edges, ws), false);
|
||||
}
|
||||
// Polygon covering nearly half of the globe but no poles
|
||||
{
|
||||
bg::model::polygon<Point> poly_h1;
|
||||
bg::read_wkt("POLYGON((170 0, 170 -80,10 -80,0 -80,0 -20,10 -20,10 20,0 20,0 80,10 80,170 80,170 0))", poly_h1);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 90), poly_h1, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 85), poly_h1, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 50), poly_h1, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 0), poly_h1, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -50), poly_h1, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -85), poly_h1, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -90), poly_h1, ws), false);
|
||||
}
|
||||
// Polygon covering more than half of the globe with both holes
|
||||
{
|
||||
bg::model::polygon<Point> poly_h2;
|
||||
bg::read_wkt("POLYGON((180 0, 180 -80,0 -80,10 -80,10 -20,0 -20,0 20,10 20,10 80,0 80,180 80,180 0))", poly_h2);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 90), poly_h2, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 85), poly_h2, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 50), poly_h2, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 0), poly_h2, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -50), poly_h2, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -85), poly_h2, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -90), poly_h2, ws), true);
|
||||
}
|
||||
// Polygon covering around half of the globe covering south pole
|
||||
{
|
||||
bg::model::polygon<Point> poly_h3;
|
||||
bg::read_wkt("POLYGON((180 0, 180 -80,0 -80,0 -20,10 -20,10 20,0 20,0 80,10 80,170 80,180 0))", poly_h3);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 90), poly_h3, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 85), poly_h3, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 50), poly_h3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 0), poly_h3, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -50), poly_h3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -85), poly_h3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -90), poly_h3, ws), true);
|
||||
}
|
||||
// Polygon covering around half of the globe covering north pole
|
||||
{
|
||||
bg::model::polygon<Point> poly_h4;
|
||||
bg::read_wkt("POLYGON((180 0, 170 -80,10 -80,10 -20,0 -20,0 20,10 20,10 80,0 80,180 80,180 0))", poly_h4);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 90), poly_h4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 85), poly_h4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 50), poly_h4, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 0), poly_h4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -50), poly_h4, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -85), poly_h4, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -90), poly_h4, ws), false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
template <typename P>
|
||||
|
@ -252,232 +252,6 @@ void test_spherical_geographic()
|
||||
BOOST_CHECK_EQUAL(bg::within(pt_n23, poly_n, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::within(pt_n24, poly_n, ws), false);
|
||||
}
|
||||
|
||||
// TODO: Move to covered_by tests
|
||||
|
||||
// Segment going through pole
|
||||
{
|
||||
bg::model::polygon<Point> poly_n1;
|
||||
bg::read_wkt("POLYGON((-90 80,90 80,90 70,-90 70, -90 80))", poly_n1);
|
||||
// Points on segment
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-90, 85), poly_n1, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(90, 85), poly_n1, ws), true);
|
||||
// Points on pole
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(90, 90), poly_n1, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(0, 90), poly_n1, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(45, 90), poly_n1, ws), true);
|
||||
}
|
||||
// Segment going through pole
|
||||
{
|
||||
bg::model::polygon<Point> poly_n2;
|
||||
bg::read_wkt("POLYGON((-90 80,90 70,0 70,-90 80))", poly_n2);
|
||||
// Points on segment
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-90, 85), poly_n2, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(90, 75), poly_n2, ws), true);
|
||||
// Points outside but on the same level as segment
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-90, 75), poly_n2, ws), false);
|
||||
}
|
||||
// Possibly invalid, 2-segment polygon with segment going through pole
|
||||
/*{
|
||||
bg::model::polygon<Point> poly_n;
|
||||
bg::read_wkt("POLYGON((-90 80,90 70,-90 80))", poly_n);
|
||||
// Point within
|
||||
BOOST_CHECK_EQUAL(bg::within(Point(0, 89), poly_n), true);
|
||||
// Points on segment
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-90, 85), poly_n), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(90, 75), poly_n), true);
|
||||
// Points outside but on the same level as segment
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-90, 75), poly_n), false);
|
||||
}*/
|
||||
// Segment endpoints on North pole with arbitrary longitudes
|
||||
{
|
||||
bg::model::polygon<Point> poly_n4;
|
||||
bg::read_wkt("POLYGON((45 90,45 80,-10 80,45 90))", poly_n4);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, 85), poly_n4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(0, 85), poly_n4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(45, 85), poly_n4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, 85), poly_n4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, 85), poly_n4, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-5, 85), poly_n4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, 70), poly_n4, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, 70), poly_n4, ws), false);
|
||||
|
||||
// the same polygon but with two points representing the pole
|
||||
bg::model::polygon<Point> poly_n4b;
|
||||
bg::read_wkt("POLYGON((45 90,45 80,-10 80,60 90,45 90))", poly_n4b);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, 85), poly_n4b, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(0, 85), poly_n4b, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(45, 85), poly_n4b, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, 85), poly_n4b, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, 85), poly_n4b, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-5, 85), poly_n4b, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, 70), poly_n4b, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, 70), poly_n4b, ws), false);
|
||||
|
||||
bg::model::polygon<Point> poly_n5;
|
||||
bg::read_wkt("POLYGON((0 90,-10 80,45 80,0 90))", poly_n5);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, 85), poly_n5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(0, 85), poly_n5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, 85), poly_n5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(1, 85), poly_n5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(45, 85), poly_n5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, 85), poly_n5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, 85), poly_n5, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-5, 85), poly_n5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, 70), poly_n5, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, 70), poly_n5, ws), false);
|
||||
|
||||
bg::model::polygon<Point> poly_n_4edges;
|
||||
bg::read_wkt("POLYGON((0 90,-10 70,5 60,20 80,0 90))", poly_n_4edges);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(3, 89), poly_n_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, 87), poly_n_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, 86), poly_n_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(15, 84), poly_n_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, 61), poly_n_4edges, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(15, 81), poly_n_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(7, 50), poly_n_4edges, ws), false);
|
||||
|
||||
bg::model::polygon<Point> poly_n_5edges;
|
||||
bg::read_wkt("POLYGON((0 90,-10 70,5 60,10 85,20 80,0 90))", poly_n_5edges);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(3, 89), poly_n_5edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, 87), poly_n_5edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, 86), poly_n_5edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(15, 84), poly_n_5edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, 61), poly_n_5edges, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(15, 81), poly_n_5edges, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(7, 50), poly_n_5edges, ws), false);
|
||||
}
|
||||
// Segment going through pole
|
||||
{
|
||||
bg::model::polygon<Point> poly_s1;
|
||||
bg::read_wkt("POLYGON((-90 -80,-90 -70,90 -70,90 -80,-90 -80))", poly_s1);
|
||||
// Points on segment
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-90, -85), poly_s1, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(90, -85), poly_s1, ws), true);
|
||||
// Points on pole
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(90, -90), poly_s1, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(0, -90), poly_s1, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(45, -90), poly_s1, ws), true);
|
||||
}
|
||||
// Segment endpoints on South pole with arbitrary longitudes
|
||||
{
|
||||
bg::model::polygon<Point> poly_s2;
|
||||
bg::read_wkt("POLYGON((45 -90,0 -80,45 -80,45 -90))", poly_s2);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(0, -85), poly_s2, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(45, -85), poly_s2, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, -85), poly_s2, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, -85), poly_s2, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-5, -85), poly_s2, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, -70), poly_s2, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, -70), poly_s2, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-5, -70), poly_s2, ws), false);
|
||||
|
||||
bg::model::polygon<Point> poly_s3;
|
||||
bg::read_wkt("POLYGON((45 -90,-10 -80,45 -80,45 -90))", poly_s3);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, -85), poly_s3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(0, -85), poly_s3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, -85), poly_s3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(1, -85), poly_s3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(45, -85), poly_s3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, -85), poly_s3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, -85), poly_s3, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-5, -85), poly_s3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, -70), poly_s3, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, -70), poly_s3, ws), false);
|
||||
|
||||
bg::model::polygon<Point> poly_s5;
|
||||
bg::read_wkt("POLYGON((0 -90,-10 -80,45 -80,0 -90))", poly_s5);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, -85), poly_s5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(0, -85), poly_s5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, -85), poly_s5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(1, -85), poly_s5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(45, -85), poly_s5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, -85), poly_s5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, -85), poly_s5, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-5, -85), poly_s5, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, -70), poly_s5, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, -70), poly_s5, ws), false);
|
||||
|
||||
bg::model::polygon<Point> poly_s4;
|
||||
bg::read_wkt("POLYGON((0 -89,-10 -80,45 -80,0 -89))", poly_s4);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, -85), poly_s4, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(0, -85), poly_s4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(45, -85), poly_s4, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, -85), poly_s4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, -85), poly_s4, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-5, -85), poly_s4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(30, -71), poly_s4, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(50, -70), poly_s4, ws), false);
|
||||
|
||||
//more complex examples
|
||||
bg::model::polygon<Point> poly_s_complex_4edges;
|
||||
bg::read_wkt("POLYGON((0 -90,-10 -70,5 -60,20 -80,0 -90))", poly_s_complex_4edges);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(3, -89), poly_s_complex_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, -87), poly_s_complex_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, -86), poly_s_complex_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(15, -84), poly_s_complex_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, -61), poly_s_complex_4edges, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(15, -81), poly_s_complex_4edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(7, -50), poly_s_complex_4edges, ws), false);
|
||||
|
||||
bg::model::polygon<Point> poly_s_complex_5edges;
|
||||
bg::read_wkt("POLYGON((0 -90,-10 -70,5 -60,10 -85,20 -80,0 -90))", poly_s_complex_5edges);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(3, -89), poly_s_complex_5edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, -87), poly_s_complex_5edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-10, -86), poly_s_complex_5edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(15, -84), poly_s_complex_5edges, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(-1, -61), poly_s_complex_5edges, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(15, -81), poly_s_complex_5edges, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(7, -50), poly_s_complex_5edges, ws), false);
|
||||
}
|
||||
// Polygon covering nearly half of the globe but no poles
|
||||
{
|
||||
bg::model::polygon<Point> poly_h1;
|
||||
bg::read_wkt("POLYGON((170 0, 170 -80,10 -80,0 -80,0 -20,10 -20,10 20,0 20,0 80,10 80,170 80,170 0))", poly_h1);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 90), poly_h1, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 85), poly_h1, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 50), poly_h1, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 0), poly_h1, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -50), poly_h1, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -85), poly_h1, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -90), poly_h1, ws), false);
|
||||
}
|
||||
// Polygon covering more than half of the globe with both holes
|
||||
{
|
||||
bg::model::polygon<Point> poly_h2;
|
||||
bg::read_wkt("POLYGON((180 0, 180 -80,0 -80,10 -80,10 -20,0 -20,0 20,10 20,10 80,0 80,180 80,180 0))", poly_h2);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 90), poly_h2, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 85), poly_h2, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 50), poly_h2, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 0), poly_h2, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -50), poly_h2, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -85), poly_h2, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -90), poly_h2, ws), true);
|
||||
}
|
||||
// Polygon covering around half of the globe covering south pole
|
||||
{
|
||||
bg::model::polygon<Point> poly_h3;
|
||||
bg::read_wkt("POLYGON((180 0, 180 -80,0 -80,0 -20,10 -20,10 20,0 20,0 80,10 80,170 80,180 0))", poly_h3);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 90), poly_h3, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 85), poly_h3, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 50), poly_h3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 0), poly_h3, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -50), poly_h3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -85), poly_h3, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -90), poly_h3, ws), true);
|
||||
}
|
||||
// Polygon covering around half of the globe covering north pole
|
||||
{
|
||||
bg::model::polygon<Point> poly_h4;
|
||||
bg::read_wkt("POLYGON((180 0, 170 -80,10 -80,10 -20,0 -20,0 20,10 20,10 80,0 80,180 80,180 0))", poly_h4);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 90), poly_h4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 85), poly_h4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 50), poly_h4, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, 0), poly_h4, ws), true);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -50), poly_h4, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -85), poly_h4, ws), false);
|
||||
BOOST_CHECK_EQUAL(bg::covered_by(Point(5, -90), poly_h4, ws), false);
|
||||
}
|
||||
}
|
||||
|
||||
void test_large_integers()
|
||||
|
Loading…
x
Reference in New Issue
Block a user