RTree原型

template
<typename Value,  //参与构建RTree索引的值typename Parameters, //RTree构建的参数typename IndexableGetter = index::indexable<Value>, //从Value中分离可索引几何对象的函数对象typename EqualTo = index::equal_to<Value>, //Value相等判断的函数对象typename Allocator = boost::container::new_allocator<Value> //空间配置器
>
class rtree{};
  1. Value
    理论上具有index::indexable定义或者相应提炼(Refinement)的定义的,并且具有index::equal_to定义或者提炼的定义的Value类型都可以作为rtree的Value参数。Boost中默认支持的有以下:
std::pair<Indexable, Second>;
boost::tuple<Indexable, T1, T2, T3, T4, T5, T6, T7, T8, T9>;

其中Indexable代表的是Boost.Geometry中的可索引的几何要素,其他的元素则要求Models equals concept即可。

Boost.Geometry中已支持的可索引几何要素有:

  • 点(Point)
  • 外包(Box)
  • 线段(Segment)
  1. Parameters
    RTree有多种类型,通过Parameters指定RTree的类型和需要的参数
  2. IndexableGetter
    用于从Value中获取Indexable对象,Boost.Geometry提供从满足要求的std::pair和boost::tuple中获取Indexable
  3. EqualTo
    Value相等的判断

使用场景

  1. 单纯Point、Segment、Box构建RTree
namespace bg = boost::geometry;
namespace bgi = boost::geometry::index;typedef bg::model::point_xy<double> Point2d;
typedef bg::model::box<Point2d> Box2d;
typedef bg::model::segment<Point2d> Segment2d;bgi::rtree<Point2d, boost::geometry::index::quadratic<16>> RTree_P_2;
bgi::rtree<Box2d, boost::geometry::index::quadratic<16>> RTree_B_2;
bgi::rtree<Segment2d, boost::geometry::index::quadratic<16>> RTree_S_2;
  1. 由Point、Segment、Box结合自定义数据构建RTree
namespace bg = boost::geometry;
namespace bgi = boost::geometry::index;typedef bg::model::point_xy<double> Point2d;
typedef bg::model::box<Point2d> Box2d;
typedef bg::model::segment<Point2d> Segment2d;typedef std::pair<Point2d,size_t> PointValuePair;//点+自定义数据的索引
typedef std::pair<Box2d,size_t> BoxValuePair;//外包+自定义数据的索引
typedef std::pair<Segment2d,size_t> SegmentValuePair;//线段+自定义数据的索引bgi::rtree<PointValuePair, boost::geometry::index::quadratic<16>> RTree_P_2;
bgi::rtree<BoxValuePair, boost::geometry::index::quadratic<16>> RTree_B_2;
bgi::rtree<SegmentValuePair, boost::geometry::index::quadratic<16>> RTree_S_2;
  1. Boost.Geometry没有支持的几何要素构建RTree
    对于Boost.Geometry没有支持Indexable的几何要素要构建RTree有两种方式
  • 通过Geometry的外包去构建索引
  • 自定义Geometry对应的Indexable
namespace bg = boost::geometry;
namespace bgi = boost::geometry::index;typedef bg::model::point_xy<double> Point2d;
typedef bg::model::box<Point2d> Box2d;
typedef std::pair<Box2d,size_t> BoxValuePair;//外包+自定义数据的索引
bgi::rtree<BoxValuePair, boost::geometry::index::quadratic<16>> RTree_B_2;

Boost.Geometry的RTree空间索引相关推荐

  1. boost::geometry::index:containst用法的测试程序

    boost::geometry::index:containst用法的测试程序 实现功能 C++实现代码 实现功能 boost::geometry::index:containst用法的测试程序 C+ ...

  2. boost::geometry::index::intersects用法的测试程序

    boost::geometry::index::intersects用法的测试程序 实现功能 C++实现代码 实现功能 boost::geometry::index::intersects用法的测试程 ...

  3. boost::geometry::disjoint用法的测试程序

    boost::geometry::disjoint用法的测试程序 实现功能 C++实现代码 实现功能 boost::geometry::disjoint用法的测试程序 C++实现代码 #ifndef ...

  4. boost::geometry::tuples用法的测试程序

    boost::geometry::tuples用法的测试程序 实现功能 C++实现代码 实现功能 boost::geometry::tuples用法的测试程序 C++实现代码 #include < ...

  5. boost::geometry::detail::calculate_point_order用法的测试程序

    boost::geometry::detail::calculate_point_order用法的测试程序 实现功能 C++实现代码 实现功能 boost::geometry::detail::cal ...

  6. boost::geometry::detail::as_range用法的测试程序

    boost::geometry::detail::as_range用法的测试程序 实现功能 C++实现代码 实现功能 boost::geometry::detail::as_range用法的测试程序 ...

  7. boost::geometry::detail::overlay::approximately_equals用法的测试程序

    boost::geometry::detail::overlay::approximately_equals用法的测试程序 实现功能 C++实现代码 实现功能 boost::geometry::det ...

  8. boost::geometry::sectionalize用法的测试程序

    boost::geometry::sectionalize用法的测试程序 实现功能 C++实现代码 实现功能 boost::geometry::sectionalize用法的测试程序 C++实现代码 ...

  9. boost::geometry::range_by_section用法的测试程序

    boost::geometry::range_by_section用法的测试程序 实现功能 C++实现代码 实现功能 boost::geometry::range_by_section用法的测试程序 ...

最新文章

  1. 从ReLU到GELU,一文概览神经网络的激活函数
  2. ubuntu 安装Gogland
  3. 练习4.4、4.5、4.6、4.7
  4. JS window对象 返回前一个浏览的页面 back()方法,加载 history 列表中的前一个 URL。 语法: window.history.back();...
  5. 关于 RGB 的颜色认知
  6. datapump跨平台升级迁移的总结
  7. poj2481树状数组解二维偏序
  8. Android BLE开发之Android手机与BLE终端通信
  9. linux wine qq2017,20170506-linux下最新WineQQ8.9.1安装教程
  10. 判断文件是否为DICOM文件
  11. 解析数论引论 第2章 数论函数和狄利克雷乘积
  12. python自动翻译excel某一列_python批量将excel内容进行翻译写入功能
  13. Android MIntegral广告SDK接入
  14. 计算机普通话测试评分标准,计算机辅助普通话测试评分细则
  15. 安装npm install报错npm ERR! request to https://registry.cnpmjs.org/@jeecg%2fantd-online-mini failed, rea
  16. idea使用中项目出现library root
  17. 【Java爬虫】Jsoup
  18. 网络支付结算{网银、第三方支付、超级网银}
  19. 计算机图形学课程总结
  20. maven 仓库下载与配置教程

热门文章

  1. 李宏毅DLHLP.25.Audio BERT.1/2
  2. html5网络摄像头,js调用网络摄像头
  3. w7运行里的计算机怎么设置,Win7系统中怎么给程序设置为开机启动项
  4. Java项目编译特别慢或者出现Exception in thread “main“ java.lang.StackOverflowError
  5. Qt中常用的3种提示框设计方法
  6. dgraph学习(二)
  7. 集成树模型(Ensemble)
  8. Java中的Type
  9. struts2中checkboxlist和radio的基本用法
  10. linux pipenv运行,科学网—pipenv安装及使用 - 陈超的博文