在 boost r-tree 中存储或访问对象

2023-12-05

我在用Boost's我的代码中的 r 树实现。我有一个带有坐标的对象列表(比如地图上的城市,如果重要的话),我希望在 r 树中索引,以执行快速 NN 搜索等。我已经遵循了他们的迭代查询示例,其中树木存储boost::geometry::model::point对象。

我的问题:有没有办法存储对象(i.e.城市本身)而不仅仅是它们在树中的坐标?我想到的一种解决方案是使用我自己的索引。如果这确实是我应该做的 - 是否可以按照对象插入树的顺序找到对象的索引?

因此,例如,当我查找某些城市的 KNN 时,我不仅想提取它们的坐标(或距离),就像示例中那样:

for ( rtree_t::const_query_iterator
        it = rtree.qbegin(bgi::nearest(pt, N));
        it != rtree.qend() ;
        ++it ) {

    std::cout << bg::wkt(*it) << ", distance= " << bg::distance(pt, *it) << std::endl;
}

还有它们插入树中的顺序,以便我可以访问它们e.g.来自包含按插入顺序排列的对象的向量。


您可以将任何类型存储在rtree,你只需要告诉 Boost 如何获取坐标即可。

所以第一步是创建一个带有索引和点的类型:

struct CityRef {
    size_t index;
    point location;
};

你可以专攻boost::geometry::index::indexable为 Boost 提供一种找到您输入的点的方法:

template <>
struct bgi::indexable<CityRef>
{
    typedef point result_type;
    point operator()(const CityRef& c) const { return c.location; }
};

然后你可以使用你的类型代替point当宣布你的rtree:

typedef bgi::rtree< CityRef, bgi::linear<16> > rtree_t;

当你迭代时,迭代器将引用你的类型而不是point:

for ( rtree_t::const_query_iterator
      it = rtree.qbegin(bgi::nearest(pt, 100)) ;
      it != rtree.qend() ;
      ++it )
{
    // *it is a CityRef, do whatever you want
}

这是使用该示例与另一种类型的演示:https://godbolt.org/z/zT3xcf

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 boost r-tree 中存储或访问对象 的相关文章

随机推荐

  • 如何截断 MySQL 数据库中的所有表?

    有没有办法在不使用 SQL 以外的任何其他语言的情况下截断特定 MySQL 数据库名称的所有表 我的意思是没有 Linux shell 脚本 为什么 因为它可以在 Windows MacOSX 和 Linux 服务器上运行 问题是客户端从控
  • 当从 Java 剪贴板对象中检索为图像时,来自 Outlook 的剪贴板副本始终设置为黑色背景

    以下是申请步骤 从 html 电子邮件或网站复制一些富文本 文本 图像的组合 在您的java代码中检索从剪贴板对象复制的内容作为BufferredImage 将检索到的图像对象保存为磁盘上的图像文件 您会注意到 在保存的文件中 图像效果很好
  • 为什么我的 win32 程序需要提升?

    我有一个非常简单的程序 用于自动更新 它检查服务器 HTTPS 上的可用版本 下载新更新并运行 可能更新的 程序 这是一个用Delphi 7编写的旧程序 在Windows 8和Windows 10下 这个程序似乎需要提升 以管理员身份运行
  • Rust 中 PhantomData 类型的使用

    我正在查看一些 Rust 源代码 发现了一种名为PhantomData 我正在浏览 Rust 文档并在互联网上进行了大量搜索 但是 我无法理解这种数据类型与 Rust 的实际用途 如果可能的话 有人可以简单地向我解释一下吗 pub stru
  • 日期倒计时器

    我正在尝试进行迄今为止的倒计时 并将每个倒计时放在 ListView 中的 ItemView 中 我已经有了Listview buillder 但我不知道如何制作具有不同值的倒计时并将它们放入列表视图中 我看到还有另一个类似的问题 但我无法
  • 粘性页脚,但只是有时

    我有一个带有页眉 内容 页脚的基本网站 我正在寻找一种设计页脚样式的方法 以便根据屏幕分辨率 如果内容没有填充页面 它会粘在底部 但如果内容溢出 它会将页脚向下推 必须滚动浏览器查看页脚 div div div div div ul li
  • “复制”不会创建动态数组的独立副本

    参考位于以下位置的在线文档http docwiki embarcadero com RADStudio XE6 en Structured Types Dynamic Arrays 写得很清楚 要制作动态数组的独立副本 请使用 Copy 函
  • 使用 ajax 请求安全地发送密码

    只是想知道 是否可以通过 Ajax 请求安全地发送密码 我有一个登录框 它调用 ajax 请求来尝试登录 通过并检索有错误的 JSON 对象 如果有 我应该使用表单重定向吗 EDIT 将加密的密码存储在数据库中并不是解决方案 因为ajax发
  • 替换由另一个矩阵索引的矩阵元素

    经过几个小时的搜索 我正在寻求您的专业知识 R 初学者 我尝试加快我的代码速度 我的目标是替换矩阵中的值A 但是 我想根据另一个矩阵的两个向量替换值B B 1 是行的名称i矩阵的A 第二栏 B 2 对应矩阵的列名A 我的代码的第一个版本是在
  • 如何在 jQuery 中获取当前日期?

    我想知道如何使用 jQuery 中的 Date 函数来获取当前日期yyyy mm dd format Date 不属于jQuery 它是 JavaScript 的特性之一 See Date 对象的文档 你可以这样做 var d new Da
  • IKVM 的 Map.xml 中的字符串和复杂数据类型!

    我正在使用 IKVM 将 java jar 文件转换为 NET dll 文件 我可以从整数类型的 getter 和 setter 创建一个属性 但我无法在 java 代码中对字符串数据类型执行此操作 您能告诉我 IKVM 的字符串或复杂数据
  • 检查 C++ 中的 double(或 float)是否为 NaN

    有 isnan 函数吗 PS 我在MinGW 如果这有影响的话 我通过使用 isnan 解决了这个问题
  • ASP.NET 中的 JQuery 与母版页

    我正在尝试将 JQuery 与一些使用母版页的 asp net 页面一起使用 并且在加载 JQuery javascript 文件时遇到问题 当我将该文件包含在母版页的标记中时 它在与母版页位于同一目录中的页面上运行良好 但是对于与母版页不
  • 以编程方式检索 OS X 命令行应用程序的绝对路径

    在Linux上 应用程序可以通过查询轻松获取其绝对路径 proc self exe 在 FreeBSD 上 它更加复杂 因为您必须构建 sysctl 调用 int mib 4 mib 0 CTL KERN mib 1 KERN PROC m
  • 触发器可以被锁定吗?如何确定它是?

    在回答中如果我在应用程序运行时替换 Oracle 触发器 是否会错过任何更改 我查看触发器是否被 INSERT 语句锁定 事实并非如此 我在互联网上找不到任何表明可以锁定触发器的内容 如果我在一个会话中运行以下命令 create table
  • SignalR - 离开所有组

    使用 SignalR 集线器可以在组中添加或删除客户端 一个客户端可以属于多个组 是否可以将客户端从其当前所属的每个组中删除 我想我正在寻找的是类似的东西Clients allgroups leave Context ConnectionI
  • CFBundleDocumentTypes 和 UIFileSharingEnabled 问题

    有人让 UIFileSharingEnabled 或 CFBundleDocumentTypes 工作吗 我将 UIFileSharingEnabled 添加为 true 到我的 plist 中 并使用下面链接中的 Apple 示例作为 C
  • 在 iOS 14 小部件上渲染图像

    我正在开发 iOS 14 Widget 扩展 我有 3 个图像要循环显示 并创建一个时间轴来显示这些图像 func getTimeline in context Context completion escaping Timeline
  • 单行上的 EditText.setError()

    我有一个问题EditText setError 我有一个 EditText
  • 在 boost r-tree 中存储或访问对象

    我在用Boost s我的代码中的 r 树实现 我有一个带有坐标的对象列表 比如地图上的城市 如果重要的话 我希望在 r 树中索引 以执行快速 NN 搜索等 我已经遵循了他们的迭代查询示例 其中树木存储boost geometry model