然而,手册only describes queries为矩形框(即“获取我在这个矩形内的所有点”)或“KNN”查询(“从这里得到我最近的”n“点).
我想要的就是“给我一些距离小于’n”的点数.
我注意到你可以定义一个一元的谓词,但是是一元的(因此,不适合两点的条件).
手册记录了我以前认为可能适合一个圆圈的一些model::ring
课程,但它实际上更像是一种分段线(多边形).这个假设是否正确?
是否有另一种方法来处理这样的查询?还是根本不可能?
解决方法 last example in the documented “User-defined queries”显示了如何在谓词中使用lambda.此lambda可以绑定范围中的其他变量,例如,您要查找的邻居点.这是一个小例子.该示例查找距离(5,5)更接近于2个单位的点,用于位于直线y = x处的点的集合.如果搜索点在R树中,或者将其直接从R树中取出,那么首先要检查它是否容易进行修改.
#include <iostream>#include <boost/geometry.hpp>#include <boost/geometry/geometrIEs/point.hpp>#include <boost/geometry/index/rtree.hpp>namespace bg = boost::geometry;namespace bgi = boost::geometry::index;typedef bg::model::point<float,2,bg::cs::cartesian> point;typedef std::pair<point,unsigned> value;int main(int argc,char *argv[]){ bgi::rtree< value,bgi::quadratic<16> > rtree; // create some values for ( unsigned i = 0 ; i < 10 ; ++i ) { point p = point(i,i); rtree.insert(std::make_pair(p,i)); } // search for nearest neighbours std::vector<value> returned_values; point sought = point(5,5); rtree.query(bgi::satisfIEs([&](value const& v) {return bg::distance(v.first,sought) < 2;}),std::back_inserter(returned_values)); // print returned values value to_print_out; for (size_t i = 0; i < returned_values.size(); i++) { to_print_out = returned_values[i]; float x = to_print_out.first.get<0>(); float y = to_print_out.first.get<1>(); std::cout << "Select point: " << to_print_out.second << std::endl; std::cout << "x: " << x << ",y: " << y << std::endl; } return 0;}
通过OS X上的Macports安装的Boost进行编译和运行:
$c++ -std=c++11 -I/Opt/local/include -L/opt/local/lib main.cpp -o geom && ./geomSelect point: 4x: 4,y: 4Select point: 5x: 5,y: 5Select point: 6x: 6,y: 6总结
以上是内存溢出为你收集整理的c – boost :: geometry:使用圆圈的最近邻居全部内容,希望文章能够帮你解决c – boost :: geometry:使用圆圈的最近邻居所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)