Python 检查多边形是否在Shapely中包含多点将返回意外结果

Python 检查多边形是否在Shapely中包含多点将返回意外结果,python,shapely,Python,Shapely,你能解释Shapely方法的行为吗?为什么下面的第一个结果为假,第二个结果为真 引用: 如果没有其他点位于对象的外部,并且其他点的内部至少有一个点位于对象的内部,则返回True 因此,事实上,一切都按预期进行 1当您选中poly.containsMultiPoint[Point2,2]时,该点不在多边形的内部,而是在其边界上。因此它返回False 2当您选中poly.containsMultiPoint[Point2,2,Point1,1]时,多点对象的任何点都不在poly的外部,并且有一个点位

你能解释Shapely方法的行为吗?为什么下面的第一个结果为假,第二个结果为真

引用:

如果没有其他点位于对象的外部,并且其他点的内部至少有一个点位于对象的内部,则返回True

因此,事实上,一切都按预期进行

1当您选中poly.containsMultiPoint[Point2,2]时,该点不在多边形的内部,而是在其边界上。因此它返回False

2当您选中poly.containsMultiPoint[Point2,2,Point1,1]时,多点对象的任何点都不在poly的外部,并且有一个点位于其内部。这满足给定的条件

3对于poly.containsMultiPoint[Point2,2,Point1,1,Point3,3]情况,有一个点位于poly的外部,因此结果为False

附言:你在评论中写道:


关于2,点2,2位于多边形的外部,即多边形外部。containsPoint2,2返回True

多边形的此外部属性实际上意味着多边形的外部线性化。它不等于外部点集。说:

可以通过外部和内部属性访问组件环

内部、边界和外部点集的定义如下:

曲面具有一个内部集,由无限多个点组成,这些点位于空间中拖动曲线以覆盖某个区域的范围内;一个边界集,由一条或多条曲线组成;一个外部集,包括曲面中可能存在的孔内的点


关于2,点2,2位于多边形的外部,即多边形外部。包含点2,2返回True@Michael我理解这种混乱。定义中存在一些冲突。我更新了答案。是的,定义有冲突。根据定义,属性应称为边界,而不是外部。不过,这种行为是违反直觉的。如果poly.containsMultiPoint[Point2,2,Point1,1]返回True,而MultiPoint[Point2,2,Point1,1].containsMultiPoint[Point2,2]返回True,则poly.containsMultiPoint[Point2,2]也应返回True。多边形的属性已存在。外环是更好的选择。关于多点的行为,它来自。这里有更多关于这方面的链接:
from shapely.geometry import Polygon, Point, MultiPoint

poly = Polygon([[0,0], [2, 0], [2, 2], [0, 2]])

poly.contains(MultiPoint([Point(2,2)]))
Out[3]: False

poly.contains(MultiPoint([Point(2,2), Point(1,1)]))
Out[4]: True

poly.contains(MultiPoint([Point(2,2), Point(1,1), Point(3,3)]))
Out[5]: False