c++ - packing algorithm in rtree in boost -


hi understand if rtree created range values in boost use packing algorithm. need example of rtree using packing algorithm. here code uses quadratic algorithm

    using  point = bg::model::point < int, 2, bg::cs::cartesian >;     using  pointi = std::pair<point, std::size_t>;  vector<point> contourcenters // has value bgi::rtree< pointi, bgi::quadratic<16> > rtree; vector< pointi > cloud;  (size_t = 0; < contourcenters.size(); ++i) {     int x = contourcenters[i].get < 0 >();     int y = contourcenters[i].get < 1 >();      cout << "contour centers: (" << x << "," << y << ")";     cloud.push_back(mp(x, y, i));     rtree.insert(make_pair(contourcenters[i], i)); } 

i create rtree packing algorithm seems fastest 1 in boost. kindly guide me how create rtree packing algorithm in boost.

you'd need use range constructor.

for work, range must have been created before constructing rtree. simplest way achieve in example build cloud vector first, , construct index it:

live on coliru

#include <boost/geometry/index/rtree.hpp> #include <boost/geometry.hpp> #include <boost/geometry/geometries/point.hpp> #include <boost/geometry/geometries/box.hpp> #include <vector> #include <iostream>  namespace bg = boost::geometry; namespace bgi = bg::index; using  point  = bg::model::point <int, 2, bg::cs::cartesian>; using  pointi = std::pair<point, std::size_t>;  pointi mp(int x, int y, size_t v) {     return std::make_pair(point(x,y), v); }  int main() {     std::vector<point> contourcenters; // has value     std::vector<pointi> cloud;      size_t id_gen = 0;     std::transform(             contourcenters.begin(), contourcenters.end(),             back_inserter(cloud),              [&](point const& p) { return std::make_pair(p, id_gen++); }         );      for(pointi& pi : cloud)         std::cout << "contour centers: (" << bg::get<0>(pi.first) << "," << bg::get<1>(pi.first) << ")";      bgi::rtree<pointi, bgi::quadratic<16> > rtree(cloud); } 

i replaced loop std::transform style, keep loop had it.


Comments