1 | #include <iostream>
|
---|
2 |
|
---|
3 | #include <boost/assert.hpp>
|
---|
4 |
|
---|
5 | #include <boost/geometry/geometry.hpp>
|
---|
6 | #include <boost/geometry/geometries/geometries.hpp>
|
---|
7 | #include <boost/geometry/multi/geometries/multi_geometries.hpp>
|
---|
8 |
|
---|
9 | namespace bg = boost::geometry;
|
---|
10 |
|
---|
11 | typedef bg::model::point<int, 2, bg::cs::cartesian> point_type;
|
---|
12 | typedef bg::model::polygon<point_type, false, false> polygon_type; //ccw, open
|
---|
13 | typedef bg::model::multi_polygon<polygon_type> multi_polygon_type; //ccw, open
|
---|
14 |
|
---|
15 | int main()
|
---|
16 | {
|
---|
17 | polygon_type poly;
|
---|
18 | multi_polygon_type mpoly, result;
|
---|
19 | bg::read_wkt("POLYGON((1920 1462,3720 1462,3720 3262,1920 3262))", poly);
|
---|
20 |
|
---|
21 | bg::read_wkt("MULTIPOLYGON(((1918 1957,1918 1657,2218 2189)),((3718 1957,3360 2233,3718 1561)),((3360 2233,2818 3253,2218 2189,2818 2653)))", mpoly);
|
---|
22 |
|
---|
23 | bool is_valid1 = bg::is_valid(poly);
|
---|
24 | bool is_valid2 = bg::is_valid(mpoly);
|
---|
25 |
|
---|
26 | if ( is_valid1 )
|
---|
27 | {
|
---|
28 | std::cout << "polygon is valid ..." << std::endl;
|
---|
29 | }
|
---|
30 | else
|
---|
31 | {
|
---|
32 | std::cout << "polygon is NOT valid ..." << std::endl;
|
---|
33 | bg::correct(poly);
|
---|
34 | BOOST_ASSERT( bg::is_valid(poly) );
|
---|
35 | }
|
---|
36 |
|
---|
37 | if ( is_valid2 )
|
---|
38 | {
|
---|
39 | std::cout << "multi-polygon is valid ..." << std::endl;
|
---|
40 | }
|
---|
41 | else
|
---|
42 | {
|
---|
43 | std::cout << "multi-polygon is NOT valid ..." << std::endl;
|
---|
44 | bg::correct(mpoly);
|
---|
45 | BOOST_ASSERT( bg::is_valid(mpoly) );
|
---|
46 | }
|
---|
47 |
|
---|
48 | bg::difference(poly, mpoly, result);
|
---|
49 |
|
---|
50 | std::cout << bg::wkt(result) << std::endl;
|
---|
51 | std::cout << bg::dsv(result) << std::endl;
|
---|
52 | std::cout << "# of points: " << bg::num_points(result) << std::endl;
|
---|
53 |
|
---|
54 | return 0;
|
---|
55 | }
|
---|