使用cts:circle-intersect在Marklogic 7中搜索多边形中的点/圆

时间:2015-03-09 16:45:02

标签: xquery polygon point marklogic belongs-to

我有一个大约1100个多边形的列表来迭代$多边形(它们之间没有重叠)我需要找到我的点或半径为1英里的圆属于哪个多边形/相交。我使用下面的功能,它需要大约1秒半,这是好的,但我想知道,还有另一种更好/更快的方法吗? 我读到了R / M树算法,但我没有在DB内部索引的任何矩形层次结构。我也在尝试cts:polygon-intersect以查看它是否更快,但我对此表示怀疑。

cts:circle-intersects(cts:circle(1,cts:point(5.8864790,51.0006240)),$ polygons)

2 个答案:

答案 0 :(得分:1)

您可以使用cts:bounding-boxes来获取边界框(在多边形的情况下具有不同的粒度)并检查它们是否重叠,并且只检查它们是否进行更昂贵的检查。检查两个盒子是否相交非常快。

答案 1 :(得分:0)

到目前为止,cts:circle-intersects是最快的,在所有1100多个多边形之间的1.3秒内迭代。我尝试过cts:polygon-intersects和cts:region-intersects也是。由于这不是一个非常关键的任务,为了应用一些花哨而快速的算法,我暂时会这样做。