Boost.Geometry的RTree空间索引
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{};
- 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)
- Parameters
RTree有多种类型,通过Parameters指定RTree的类型和需要的参数 - IndexableGetter
用于从Value中获取Indexable对象,Boost.Geometry提供从满足要求的std::pair和boost::tuple中获取Indexable - EqualTo
Value相等的判断
使用场景
- 单纯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;
- 由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;
- 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空间索引相关推荐
- boost::geometry::index:containst用法的测试程序
boost::geometry::index:containst用法的测试程序 实现功能 C++实现代码 实现功能 boost::geometry::index:containst用法的测试程序 C+ ...
- boost::geometry::index::intersects用法的测试程序
boost::geometry::index::intersects用法的测试程序 实现功能 C++实现代码 实现功能 boost::geometry::index::intersects用法的测试程 ...
- boost::geometry::disjoint用法的测试程序
boost::geometry::disjoint用法的测试程序 实现功能 C++实现代码 实现功能 boost::geometry::disjoint用法的测试程序 C++实现代码 #ifndef ...
- boost::geometry::tuples用法的测试程序
boost::geometry::tuples用法的测试程序 实现功能 C++实现代码 实现功能 boost::geometry::tuples用法的测试程序 C++实现代码 #include < ...
- boost::geometry::detail::calculate_point_order用法的测试程序
boost::geometry::detail::calculate_point_order用法的测试程序 实现功能 C++实现代码 实现功能 boost::geometry::detail::cal ...
- boost::geometry::detail::as_range用法的测试程序
boost::geometry::detail::as_range用法的测试程序 实现功能 C++实现代码 实现功能 boost::geometry::detail::as_range用法的测试程序 ...
- boost::geometry::detail::overlay::approximately_equals用法的测试程序
boost::geometry::detail::overlay::approximately_equals用法的测试程序 实现功能 C++实现代码 实现功能 boost::geometry::det ...
- boost::geometry::sectionalize用法的测试程序
boost::geometry::sectionalize用法的测试程序 实现功能 C++实现代码 实现功能 boost::geometry::sectionalize用法的测试程序 C++实现代码 ...
- boost::geometry::range_by_section用法的测试程序
boost::geometry::range_by_section用法的测试程序 实现功能 C++实现代码 实现功能 boost::geometry::range_by_section用法的测试程序 ...
最新文章
- 从ReLU到GELU,一文概览神经网络的激活函数
- ubuntu 安装Gogland
- 练习4.4、4.5、4.6、4.7
- JS window对象 返回前一个浏览的页面 back()方法,加载 history 列表中的前一个 URL。 语法: window.history.back();...
- 关于 RGB 的颜色认知
- datapump跨平台升级迁移的总结
- poj2481树状数组解二维偏序
- Android BLE开发之Android手机与BLE终端通信
- linux wine qq2017,20170506-linux下最新WineQQ8.9.1安装教程
- 判断文件是否为DICOM文件
- 解析数论引论 第2章 数论函数和狄利克雷乘积
- python自动翻译excel某一列_python批量将excel内容进行翻译写入功能
- Android MIntegral广告SDK接入
- 计算机普通话测试评分标准,计算机辅助普通话测试评分细则
- 安装npm install报错npm ERR! request to https://registry.cnpmjs.org/@jeecg%2fantd-online-mini failed, rea
- idea使用中项目出现library root
- 【Java爬虫】Jsoup
- 网络支付结算{网银、第三方支付、超级网银}
- 计算机图形学课程总结
- maven 仓库下载与配置教程
热门文章
- 李宏毅DLHLP.25.Audio BERT.1/2
- html5网络摄像头,js调用网络摄像头
- w7运行里的计算机怎么设置,Win7系统中怎么给程序设置为开机启动项
- Java项目编译特别慢或者出现Exception in thread “main“ java.lang.StackOverflowError
- Qt中常用的3种提示框设计方法
- dgraph学习(二)
- 集成树模型(Ensemble)
- Java中的Type
- struts2中checkboxlist和radio的基本用法
- linux pipenv运行,科学网—pipenv安装及使用 - 陈超的博文