Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <boost/geometry.hpp>
- #include <boost/geometry/geometries/point.hpp>
- #include <boost/geometry/geometries/register/point.hpp>
- #include <boost/geometry/index/rtree.hpp>
- #include <vector>
- #include <iostream>
- namespace bg = boost::geometry;
- namespace bgi = boost::geometry::index;
- enum color {red, green, blue};
- struct my_point
- {
- double x, y;
- color c;
- };
- BOOST_GEOMETRY_REGISTER_POINT_2D(my_point, double, bg::cs::cartesian, x, y)
- typedef bg::model::point<double, 2, bg::cs::cartesian> bg_point;
- typedef bg::model::box<bg_point> bg_box;
- int main()
- {
- {
- bgi::rtree<my_point, bgi::rstar<4> > rtree;
- rtree.insert(my_point{ 0, 0, red });
- rtree.insert(my_point{ 1, 1, green });
- rtree.insert(my_point{ 2, 5, blue });
- rtree.insert(my_point{ 7, 3, red });
- rtree.insert(my_point{ 8, 8, green });
- rtree.insert(my_point{ 1, 9, blue });
- std::vector<my_point> res;
- rtree.query(bgi::intersects(bg_box{ {1, 1}, {8, 8} })
- && bgi::satisfies([](my_point const& p) {
- return p.c == red;
- }),
- std::back_inserter(res));
- for (my_point const& p : res)
- std::cout << bg::wkt(p) << std::endl;
- }
- {
- bgi::rtree<std::pair<bg_point, color>, bgi::rstar<4> > rtree;
- rtree.insert(std::pair<bg_point, color>{ {0, 0}, red });
- rtree.insert(std::pair<bg_point, color>{ {1, 1}, green });
- rtree.insert(std::pair<bg_point, color>{ {2, 5}, blue });
- rtree.insert(std::pair<bg_point, color>{ {7, 3}, red });
- rtree.insert(std::pair<bg_point, color>{ {8, 8}, green });
- rtree.insert(std::pair<bg_point, color>{ {1, 9}, blue });
- std::vector<std::pair<bg_point, color> > res;
- rtree.query(bgi::intersects(bg_box{ { 1, 1 },{ 8, 8 } })
- && bgi::satisfies([](std::pair<bg_point, color> const& p) {
- return p.second == red;
- }),
- std::back_inserter(res));
- for (std::pair<bg_point, color> const& p : res)
- std::cout << bg::wkt(p.first) << std::endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement