【发布时间】:2019-05-18 21:37:35
【问题描述】:
将新框插入 rtree 时,我想首先检查树中是否已经存在相同的框。如果是,我只想获取该值,否则我需要插入一个新值。最好(即最有效)的方法是什么?
我可以调用nearest(box,1),然后检查是否相等:
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point.hpp>
#include <boost/geometry/geometries/box.hpp>
#include <boost/geometry/index/rtree.hpp>
namespace bg = boost::geometry;
namespace bgi = boost::geometry::index;
typedef bg::model::point<double, 1, bg::cs::cartesian> TPoint;
typedef bg::model::box<TPoint> TBox;
typedef std::pair<TBox, void*> TPair;
typedef bgi::rtree<TPair, bgi::quadratic<16>> TTree;
TTree::const_query_iterator findExact(const TTree& tree, const TBox& box)
{
auto it = rtree.qbegin(bgi::nearest(box, 1));
if(it == rtree.qend() || !bg::equals(it->first, box))
return rtree.qend();
return it;
}
这真的是执行此查询的最佳(即最高性能)方式吗?
【问题讨论】:
标签: c++ boost boost-geometry