mirror of
https://github.com/boostorg/geometry.git
synced 2025-05-10 15:44:07 +00:00
The intention is to prevent creation of too big files in MinGW. Move predefined Geometries for relops from test_relate.hpp to predef_relop.hpp Move test_geometry<> defined in relate.cpp to test_relate.hpp
131 lines
4.0 KiB
C++
131 lines
4.0 KiB
C++
// Boost.Geometry (aka GGL, Generic Geometry Library)
|
|
// Unit Test
|
|
|
|
// Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
|
|
|
|
// Use, modification and distribution is subject to the Boost Software License,
|
|
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
|
// http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
|
|
#include <algorithms/test_disjoint.hpp>
|
|
|
|
#include <boost/geometry/strategies/strategies.hpp>
|
|
|
|
#include <boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp>
|
|
#include <boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp>
|
|
#include <boost/geometry/multi/algorithms/detail/point_on_border.hpp>
|
|
#include <boost/geometry/multi/algorithms/detail/for_each_range.hpp>
|
|
#include <boost/geometry/multi/algorithms/within.hpp>
|
|
#include <boost/geometry/multi/core/closure.hpp>
|
|
#include <boost/geometry/multi/core/geometry_id.hpp>
|
|
#include <boost/geometry/multi/core/ring_type.hpp>
|
|
#include <boost/geometry/multi/views/detail/range_type.hpp>
|
|
|
|
|
|
#include <boost/geometry/geometries/geometries.hpp>
|
|
#include <boost/geometry/geometries/point_xy.hpp>
|
|
#include <boost/geometry/multi/geometries/multi_polygon.hpp>
|
|
|
|
#include <test_common/test_point.hpp>
|
|
|
|
#include <algorithms/predef_relop.hpp>
|
|
|
|
|
|
template <typename P>
|
|
void test_all()
|
|
{
|
|
typedef bg::model::polygon<P> polygon;
|
|
typedef bg::model::multi_polygon<polygon> mp;
|
|
|
|
test_disjoint<mp, mp>("",
|
|
"MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))",
|
|
"MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))",
|
|
false);
|
|
|
|
// True disjoint
|
|
test_disjoint<mp, mp>("",
|
|
"MULTIPOLYGON(((0 0,0 4,4 4,4 0,0 0)))",
|
|
"MULTIPOLYGON(((6 6,6 10,10 10,10 6,6 6)))",
|
|
true);
|
|
|
|
// Touch -> not disjoint
|
|
test_disjoint<mp, mp>("",
|
|
"MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)))",
|
|
"MULTIPOLYGON(((5 5,5 10,10 10,10 5,5 5)))",
|
|
false);
|
|
|
|
// Not disjoint but no IP's
|
|
test_disjoint<mp, mp>("no_ips",
|
|
"MULTIPOLYGON(((2 2,2 8,8 8,8 2,2 2)),((20 0,20 10,30 10,30 0,20 0)))",
|
|
"MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((22 2,28 2,28 8,22 8,22 2)))",
|
|
false);
|
|
|
|
// Not disjoint and not inside each other (in first ring) but wrapped (in second rings)
|
|
test_disjoint<mp, mp>("no_ips2",
|
|
"MULTIPOLYGON(((2 2,2 8,8 8,8 2,2 2)),((20 0,20 10,30 10,30 0,20 0)))",
|
|
"MULTIPOLYGON(((2 12,2 18,8 18,8 12,2 12)),((22 2,28 2,28 8,22 8,22 2)))",
|
|
false);
|
|
|
|
test_disjoint<mp, mp>("no_ips2_rev",
|
|
"MULTIPOLYGON(((2 12,2 18,8 18,8 12,2 12)),((22 2,28 2,28 8,22 8,22 2)))",
|
|
"MULTIPOLYGON(((2 2,2 8,8 8,8 2,2 2)),((20 0,20 10,30 10,30 0,20 0)))",
|
|
false);
|
|
|
|
|
|
test_disjoint<P, mp>("point_mp1",
|
|
"POINT(0 0)",
|
|
"MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))",
|
|
false);
|
|
|
|
test_disjoint<P, mp>("point_mp2",
|
|
"POINT(5 5)",
|
|
"MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))",
|
|
false);
|
|
|
|
test_disjoint<P, mp>("point_mp1",
|
|
"POINT(11 11)",
|
|
"MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))",
|
|
true);
|
|
|
|
std::string polygon_inside_hole("MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0), (2 2,8 2,8 8,2 8,2 2)),((4 4,4 6,6 6,6 4,4 4)))");
|
|
test_disjoint<P, mp>("point_mp_pih1",
|
|
"POINT(5 5)",
|
|
polygon_inside_hole,
|
|
false);
|
|
|
|
test_disjoint<P, mp>("point_mp_pih2",
|
|
"POINT(3 3)",
|
|
polygon_inside_hole,
|
|
true);
|
|
|
|
test_disjoint<mp, P>("point_mp1rev",
|
|
"MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))",
|
|
"POINT(0 0)",
|
|
false);
|
|
|
|
}
|
|
|
|
int test_main(int, char* [])
|
|
{
|
|
//test_all<bg::model::d2::point_xy<float> >();
|
|
test_all<bg::model::d2::point_xy<double> >();
|
|
|
|
#ifdef HAVE_TTMATH
|
|
test_all<bg::model::d2::point_xy<ttmath_big> >();
|
|
#endif
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*
|
|
with viewy as
|
|
(
|
|
select geometry::STGeomFromText('MULTIPOLYGON(((2 2,2 8,8 8,8 2,2 2)),((20 0,20 10,30 10,30 0,20 0)))',0) as p
|
|
, geometry::STGeomFromText('MULTIPOLYGON(((2 12,2 18,8 18,8 12,2 12)),((22 2,28 2,28 8,22 8,22 2)))',0) as q
|
|
)
|
|
select p from viewy union all select q from viewy
|
|
-- select p.STDisjoint(q) from viewy
|
|
*/
|