Point/circle 在 Marklogic 7 中的多边形搜索中使用 cts:circle-intersect
Point/circle in polygons search in Marklogic 7 using cts:circle-intersect
我有大约 1100 个多边形的列表要在 $polygons 中迭代(none 它们相互重叠)我需要找到我的点或半径为 1 英里的圆的多边形 belongs/intersects。我使用了下面的函数,大约需要 1 秒半,这很好,但我想知道,是否还有另一种 better/faster 方法?
我阅读了 R/M-tree 算法,但我没有在数据库中索引任何矩形层次结构。我也在尝试 cts:polygon-intersect 看看它是否更快,但我对此表示怀疑。
cts:circle-intersects(cts:circle(1,cts:point(5.8864790,51.0006240)), $polygons)
您可以使用 cts:bounding-boxes
获取边界框(在多边形的情况下具有不同的粒度)并检查它们是否重叠,如果重叠则只进行更昂贵的检查。检查两个框是否相交非常快。
到目前为止,cts:circle-intersects 是最快的,在 1.3 秒内在所有 1100 多个多边形之间迭代。我也试过 cts:polygon-intersects 和 cts:region-intersects。由于为了应用一些奇特和快速的算法,这不是一个非常关键的任务,所以我暂时将它保留下来。
我有大约 1100 个多边形的列表要在 $polygons 中迭代(none 它们相互重叠)我需要找到我的点或半径为 1 英里的圆的多边形 belongs/intersects。我使用了下面的函数,大约需要 1 秒半,这很好,但我想知道,是否还有另一种 better/faster 方法? 我阅读了 R/M-tree 算法,但我没有在数据库中索引任何矩形层次结构。我也在尝试 cts:polygon-intersect 看看它是否更快,但我对此表示怀疑。
cts:circle-intersects(cts:circle(1,cts:point(5.8864790,51.0006240)), $polygons)
您可以使用 cts:bounding-boxes
获取边界框(在多边形的情况下具有不同的粒度)并检查它们是否重叠,如果重叠则只进行更昂贵的检查。检查两个框是否相交非常快。
到目前为止,cts:circle-intersects 是最快的,在 1.3 秒内在所有 1100 多个多边形之间迭代。我也试过 cts:polygon-intersects 和 cts:region-intersects。由于为了应用一些奇特和快速的算法,这不是一个非常关键的任务,所以我暂时将它保留下来。