你能解释Shapelycontains
方法的行为吗?为什么第一个结果低于False
,而第二个结果是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
引用object.contains(other)
:上的文档
如果
other
的任何点都不位于object
的外部,并且other
的内部至少有一个点位于object
的内部,则返回True
。
所以,事实上,一切都按预期进行。
1( 检查poly.contains(MultiPoint([Point(2,2)]))
时,点不在poly
的内部,而是在其边界上。因此它返回CCD_ 12。
2( 检查poly.contains(MultiPoint([Point(2,2), Point(1,1)]))
时,MultiPoint
对象的任何点都不位于poly
的外部,只有一个点位于其内部。这满足了给定的条件。
3( 对于poly.contains(MultiPoint([Point(2,2), Point(1,1), Point(3,3)]))
的情况,有一个点位于poly
的外部,因此是False
。
p.S.:你在评论中写道:
关于2(点
Point(2,2)
位于多边形的外部,即poly.exterior.contains(Point(2,2))
返回True
。
多边形的exterior
属性实际上意味着多边形的外部LinearRing
。并且它不等于外部点集。Polygon
上的文档显示:
通过
exterior
和interiors
属性访问组件环。
内部、边界和外部点集的定义如下:
曲面有一个由内部无限多个点组成的内部集(想象一条曲线在空间中拖动以覆盖一个区域(,一个由一条或多条曲线组成的边界集,以及一个由所有其他点组成的外部集,包括曲面中可能存在的孔内的点。