Geometry 平铺上下文中最近邻搜索的高效数据结构

Geometry 平铺上下文中最近邻搜索的高效数据结构,geometry,geospatial,computational-geometry,Geometry,Geospatial,Computational Geometry,我正在寻找一个数据结构来存储不规则的高程数据{xi,yi,zi},这有助于快速查找xy范围内的点 从我收集的数据来看,kd树应该适合这种情况?而且实现起来也相当简单 但是,高程数据集中的点数可能非常多。因此,不可能一次性处理所有点。相反,我的目标是将xy区域划分为块,并分别处理每个块: 绿色矩形内的点是平铺1所需的点。当我移动到tile 2时,我需要以tile 2为中心的绿色矩形内的点。仍然需要瓷砖1周围绿色矩形中最右边的2点。如果需要,可以从内存中交换其他点。此外,瓷砖2还需要4分。 因此k

我正在寻找一个数据结构来存储不规则的高程数据{xi,yi,zi},这有助于快速查找xy范围内的点

从我收集的数据来看,kd树应该适合这种情况?而且实现起来也相当简单

但是,高程数据集中的点数可能非常多。因此,不可能一次性处理所有点。相反,我的目标是将xy区域划分为块,并分别处理每个块:

绿色矩形内的点是平铺1所需的点。当我移动到tile 2时,我需要以tile 2为中心的绿色矩形内的点。仍然需要瓷砖1周围绿色矩形中最右边的2点。如果需要,可以从内存中交换其他点。此外,瓷砖2还需要4分。 因此kd树可能不是最优的,因为这需要我为每个新的磁贴重建完整的树?R-树是更好的选择吗

点本身应该以某种巧妙的格式存储在磁盘上,并在需要它们之前读入内存。在开始处理磁贴1之前,我可以告诉维护这些点的数据结构,接下来我将需要磁贴2,然后它可以在单独的线程中开始从磁盘读取必要的点。
我正在考虑使用较小的瓦片将点加载到数据结构中。例如,图中的点可以划分为16x16块


C/C++中是否有实现此功能的库?

Hi-High-Performance Mark!各点相当一致,但并不完全一致。是的,动态更新是一个问题。您需要删除点,还是只动态添加点?嗨,AlexWien!当数据结构内存不足时,我需要删除点。听起来您是在查找范围队列,而不是最近邻查询。看起来您可能对现有的磁贴设置得太多了。看起来你可以简单地让瓷砖成为一个规则的网格。因此,您只需创建7-8个新的平铺(平铺仅由其x-y起点和终点定义),而不是尝试将边远点拟合到当前标题中。如果需要,可以递归地将栅格划分为较小的部分。另一种选择可能是使用四叉树,因为听起来它接近于您所寻找的,如果需要的话,可以删除点。