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:
#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
Post a Comment