minimal.cpp 2.6 KB

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