针对大量点的多边形点

时间:2011-05-13 22:55:20

标签: python point-in-polygon

我想知道确定大量点(O(1百万)是否在多边形的集合(O(10))内部或外部的最有效方法是什么?后者不一定是凸的,但是我们没有洞。目前我通过比较它们的位置和边界框来修剪点数,然后在剩下的点上使用this交叉数法。但是,是否有更快的方法?

3 个答案:

答案 0 :(得分:3)

有一个有效的matplotlib函数:matplotlib.nxutils.points_inside_poly()。该算法记录在this page上。

答案 1 :(得分:2)

假设您有轴对齐的边界框,您可以按x坐标对点列表进行排序,通过二分查找找到列表点上的位置进入边界框内部或外部,并可能丢弃大量的点一旦。重复y坐标。然后像以前一样继续剩余的积分。您可以执行多边形三角测量以加速边界框内的测试。

当平面的面积远大于多边形的面积时,表现最佳,并且多边形相当紧凑(即不长和薄,这可能会给你很多误报)。

答案 2 :(得分:1)

我可能会使用Quadtree对“我在多边形内部或外部”进行快速粗略测试,以达到生成四叉树时所确定的某种精度级别。

每次查找都是O(log n),它的速度大约是你能得到的。对于位于四叉树的单元格内的点,标记为“包含边缘”,那么您将不得不进行传统的多边形点测试。