点集操作的替代索引方法


17

在处理大量要素时,通常使用包围盒空间索引来提高性能。如果针对具有大量顶点的单个几何体执行操作,是否存在类似的优化策略?

例如,是否存在任何可以加速多边形或联合运算中的点的数据结构?


1
在幕后,GIS使用许多专门的数据结构,包括各种形式的四叉树,DCEL等,这些在计算几何学教科书中进行了描述。您是在询问这些实施细节还是在询问脚本语言中用户可能采用的方法?
ub

谢谢,我想我需要读教科书。我的问题的关键是如何预先计算这些数据结构。是否存在任何预先计算的实现?
马修·斯内普

马修,这是一个很好的问题。真正以性能为导向的GIS将为用户提供预计算数据结构以便重复应用的选项。就目前而言,广告本身称为“ GIS”的软件通常仅以“空间索引”的形式提供这种预计算,而也可以进行GIS分析的通用软件(例如Mathematica(或某种程度上R))将为用户提供对这些事情的控制要多得多。
ub

我认为问题是基于二维对象的“分形性质”以及不确定和不平衡的分布信息密度。
huckfinn 2014年

Answers:


2

仅对多边形中的点好:

我认为问题是基于二维对象的“分形性质”以及空间信息的不确定和不平衡分布。如果您有规则的网格,则很容易计算单元格的位置或关系。但是,地形模型的等值线可能在一侧具有不复杂的部分,而在另一侧则具有数学上复杂的部分(形态活跃的部分,例如山脊,山谷等)。

索引尝试处理两件事:

  1. 一个快速的例程,为您提供了一组存储桶,您可以在其中收集可以在空间上消除的对象(存储桶!)。而且BBoxes易于计算和处理。

  2. 一组关系(重叠,接触),用于区分或关联空间内容(对象)。

不幸的是,BBox不会给您任何线索,每个BBox中有多少点,对象的形状(孔,凸,...)以及信息是如何局部分布的(90%的点在左上角) BBox)。因此,您可能在对象级别上找到快速操作成员,而在测试的关系建立中却浪费了很多时间。

要使用更不规则的方法,将IMO三角剖分与和四叉树结合使用是该策略的一部分,您可以在其中将存储分区和索引的关系构建部分放在一起(存储分区==关系构建)。

对于多边形测试点示例,可以使用以下命令构建不规则缓存:

  1. 约束您的多边形封面的Delaunay三角剖分,并带有额外的边界网格点以进行封面外检测
  2. 将其放入四叉树索引方案中,每个框不超过N个三角形(分形桶)
  3. 找到该点所属的三角形集-四叉树中的叶子
  4. 找到该点所在的三角形(测试部分超过N个三角形)
  5. 并询问三角形顶点的多边形ID
  6. 如果ID是唯一的,则该点属于多边形,如果不是,则该点在多边形外部

建造锡和四叉树的成本非常高且难以计算,并且四叉树必须平衡大三角形和小三角形(三角形无法容纳在较小的子树框中)。

一些工具和链接:

三角形-约束多边形三角剖分

四叉树-带有源示例

Stony Brook存储库-数据结构和diskrete几何

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.