#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point.hpp>
#include <boost/geometry/geometries/box.hpp>
#include <boost/geometry/index/rtree.hpp>
#include <boost/range.hpp>
#include <boost/range/adaptor/indexed.hpp>
#include <boost/range/adaptor/transformed.hpp>
#include <vector>
#include <iostream>
namespace bg = boost::geometry;
namespace bgi = boost::geometry::index;
template <typename First, typename Second>
struct pair_maker
{
typedef std::pair<First, Second> result_type;
template<typename T>
inline result_type operator()(T const& v) const
{
return result_type(v.value(), v.index());
}
};
int main()
{
typedef bg::model::point<float, 2, bg::cs::cartesian> point;
typedef bg::model::box<point> box;
typedef std::vector<box> container;
typedef container::size_type size_type;
typedef std::pair<box, size_type> value;
container boxes;
for ( size_type i = 0 ; i < 10 ; ++i )
{
box b(point(i + 0.0f, i + 0.0f), point(i + 0.5f, i + 0.5f));
boxes.push_back(b);
}
bgi::rtree< value, bgi::quadratic<16> >
rtree(boxes | boost::adaptors::indexed()
| boost::adaptors::transformed(pair_maker<box, size_type>()));
std::cout << rtree.count(boxes[0]) << std::endl;
return 0;
}
1