• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Boost.Geometry
2 // Unit Test
3 
4 // Copyright (c) 2018, Oracle and/or its affiliates.
5 // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
6 
7 // Licensed under the Boost Software License version 1.0.
8 // http://www.boost.org/users/license.html
9 
10 
11 #include <geometry_test_common.hpp>
12 
13 #include <boost/geometry.hpp>
14 #include <boost/geometry/geometries/geometries.hpp>
15 
16 
test_main(int,char * [])17 int test_main(int, char* [])
18 {
19     typedef bg::model::point<double, 2, bg::cs::cartesian> point;
20     typedef bg::model::box<point> box;
21     typedef bg::model::linestring<point> linestring;
22     typedef bg::model::multi_linestring<linestring> mlinestring;
23     typedef bg::model::polygon<point> polygon;
24     typedef bg::model::multi_polygon<polygon> mpolygon;
25 
26     point p;
27     linestring ls;
28     mlinestring mls;
29     polygon po;
30     mpolygon mpo;
31 
32     bg::read_wkt("POINT(0 0)", p);
33     bg::read_wkt("LINESTRING(0 0,7 7,7 9)", ls);
34     bg::read_wkt("MULTILINESTRING((0 0,7 7,7 9),(7 9, 9 9))", mls);
35     bg::read_wkt("POLYGON((0 0,0 5,5 5,5 0,0 0),(1 1,4 1,4 4,1 4,1 1))", po);
36     bg::read_wkt("MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0),(1 1,4 1,4 4,1 4,1 1)),((2 2,2 3,3 3,3 2,2 2)))", mpo);
37 
38     BOOST_CHECK_CLOSE(bg::perimeter(po), 32.0, 0.0001);
39     BOOST_CHECK_CLOSE(bg::area(mpo), 17.0, 0.0001);
40     BOOST_CHECK_CLOSE(bg::length(mls), 13.899494936611665, 0.0001);
41 
42     BOOST_CHECK(bg::covered_by(p, po));
43     BOOST_CHECK(!bg::crosses(ls, mls));
44     BOOST_CHECK(!bg::equals(ls, mls));
45     BOOST_CHECK(bg::intersects(ls, po));
46     BOOST_CHECK(bg::relate(p, ls, bg::de9im::mask("F0F******")));
47     BOOST_CHECK(bg::relation(mls, mpo).str() == "101F00212");
48     BOOST_CHECK(bg::within(po, mpo));
49     BOOST_CHECK(!bg::touches(mls, po));
50 
51     mpolygon res;
52     bg::intersection(po, mpo, res);
53     BOOST_CHECK_CLOSE(bg::area(res), 16.0, 0.0001);
54     bg::clear(res);
55     bg::union_(po, mpo, res);
56     BOOST_CHECK_CLOSE(bg::area(res), 17.0, 0.0001);
57     bg::clear(res);
58     bg::difference(mpo, po, res);
59     BOOST_CHECK_CLOSE(bg::area(res), 1.0, 0.0001);
60     bg::clear(res);
61     bg::sym_difference(mpo, po, res);
62     BOOST_CHECK_CLOSE(bg::area(res), 1.0, 0.0001);
63 
64     BOOST_CHECK(bg::is_simple(ls));
65     BOOST_CHECK(bg::is_valid(mpo));
66 
67     point c;
68     bg::centroid(mpo, c);
69     BOOST_CHECK_CLOSE(bg::distance(p, c), 3.5355339059327378, 0.0001);
70     BOOST_CHECK_CLOSE(bg::distance(mls, mpo), 0.0, 0.0001);
71     BOOST_CHECK_CLOSE(bg::distance(po, mpo), 0.0, 0.0001);
72 
73     box b;
74     bg::envelope(mls, b);
75     BOOST_CHECK_CLOSE(bg::area(b), 81.0, 0.0001);
76 
77     polygon h;
78     bg::convex_hull(mls, h);
79     BOOST_CHECK_CLOSE(bg::area(h), 9.0, 0.0001);
80 
81     return 0;
82 }
83 
84