对于线段数据库,查找与矩形相交的所有线段

时间:2013-06-16 12:13:45

标签: data-structures geometry computational-geometry kdtree

鉴于大量的linesegments,你如何有效地找到与矩形相交的所有线段?典型的应用是GIS数据库,查找属于当前视野范围内的所有道路。对于点,这可以通过将点存储在KD树中来有效地完成,但是线段的相应数据结构是什么?

如果算法考虑线宽,则奖励,但零宽度算法完全可以。

3 个答案:

答案 0 :(得分:2)

您可以使用细分树,例如CGAL中存在的细分树: dD Range and Segment Trees。该数据结构可用于所有维度,包括维度2.

答案 1 :(得分:1)

将矩形视为一组4个线段。 你现在有一组n + 4个线段。 在线段上应用扫描线算法。 如果两个线段来自不同的集合,则仅执行交叉点。即一个段,是frm矩形,另一个是来自数据库。 此外,您可以从矩形的第一个顶点开始扫描线处理,并在完全处理所有矩形线时结束。

您还可以搜索空间散列和线光栅化(用于使用行数据填充空间单元格) 。这可能会更快。

答案 2 :(得分:0)

另一种可能的数据结构是R-tree。特别是priority R-tree将为您提供运行时间的保证上限,但启发式变体在实践中可能更快。