Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.18 KB | None | 0 0
  1. #include <boost/geometry.hpp>
  2. #include <boost/geometry/geometries/point.hpp>
  3. #include <boost/geometry/geometries/register/point.hpp>
  4. #include <boost/geometry/index/rtree.hpp>
  5. #include <vector>
  6. #include <iostream>
  7.  
  8. namespace bg = boost::geometry;
  9. namespace bgi = boost::geometry::index;
  10.  
  11. enum color {red, green, blue};
  12.  
  13. struct my_point
  14. {
  15. double x, y;
  16. color c;
  17. };
  18.  
  19. BOOST_GEOMETRY_REGISTER_POINT_2D(my_point, double, bg::cs::cartesian, x, y)
  20.  
  21. typedef bg::model::point<double, 2, bg::cs::cartesian> bg_point;
  22. typedef bg::model::box<bg_point> bg_box;
  23.  
  24. int main()
  25. {
  26. {
  27.  
  28. bgi::rtree<my_point, bgi::rstar<4> > rtree;
  29. rtree.insert(my_point{ 0, 0, red });
  30. rtree.insert(my_point{ 1, 1, green });
  31. rtree.insert(my_point{ 2, 5, blue });
  32. rtree.insert(my_point{ 7, 3, red });
  33. rtree.insert(my_point{ 8, 8, green });
  34. rtree.insert(my_point{ 1, 9, blue });
  35.  
  36. std::vector<my_point> res;
  37. rtree.query(bgi::intersects(bg_box{ {1, 1}, {8, 8} })
  38. && bgi::satisfies([](my_point const& p) {
  39. return p.c == red;
  40. }),
  41. std::back_inserter(res));
  42.  
  43. for (my_point const& p : res)
  44. std::cout << bg::wkt(p) << std::endl;
  45. }
  46.  
  47. {
  48. bgi::rtree<std::pair<bg_point, color>, bgi::rstar<4> > rtree;
  49. rtree.insert(std::pair<bg_point, color>{ {0, 0}, red });
  50. rtree.insert(std::pair<bg_point, color>{ {1, 1}, green });
  51. rtree.insert(std::pair<bg_point, color>{ {2, 5}, blue });
  52. rtree.insert(std::pair<bg_point, color>{ {7, 3}, red });
  53. rtree.insert(std::pair<bg_point, color>{ {8, 8}, green });
  54. rtree.insert(std::pair<bg_point, color>{ {1, 9}, blue });
  55.  
  56. std::vector<std::pair<bg_point, color> > res;
  57. rtree.query(bgi::intersects(bg_box{ { 1, 1 },{ 8, 8 } })
  58. && bgi::satisfies([](std::pair<bg_point, color> const& p) {
  59. return p.second == red;
  60. }),
  61. std::back_inserter(res));
  62.  
  63. for (std::pair<bg_point, color> const& p : res)
  64. std::cout << bg::wkt(p.first) << std::endl;
  65. }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement