检查点是否在多边形内会在Shapely中返回错误结果

问题描述 投票:0回答:2

我有一个多边形作为wkt格式的字符串:

polygon_as_string = 'POLYGON ((1190500.159499999 7144386.067199998, 1190487.2751 7144390.519699998,...,1190500.159499999 7144386.067199998))'

我将其转换为Shapely的Polygon对象:

import shapely.wkt
polygon = shapely.wkt.loads(polygon_as_string)

然后我用within()contains()函数检查该点是否在多边形中。

from shapely.geometry import Point, Polygon
point = Point(1190500.159499999, 7144386.067199998)
polygon.contains(point)
point.within(polygon)

两个函数都返回False,尽管我认为这实际上是在polygon内部。这可能是什么问题?

python polygon point shapely
2个回答
0
投票

within

如果没有其他点则返回within位于对象的外部,并且

[至少一个点

其他的[[
interior位于对象的

interior。相反,当您的点位于边界上时,应使用object.contains(other)

True
如果对象的边界或内部以任何方式相交,则返回intersects换句话说,如果几何对象具有

任何边界,则它们相交

或内部共同点。

(重点是我的。)>

可复制的小示例:intersects

object.intersects(other)

但是请注意,由于精度错误,您确实可能会得到意想不到的结果:True


enter image description here

在这种情况下,您可以考虑如上所述检查到多边形的距离,或者使用>>> from shapely.geometry import Point, Polygon >>> Polygon([(0, 0), (1, 0), (1, 1), (0, 1)]).contains(Point(1, 1)) False >>> Point(1, 1).within(Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])) False >>> Point(1, 1).intersects(Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])) True 稍微扩展多边形:

enter image description here

原因可能是您要测试的点正好位于一个顶点的顶部,并且由于舍入误差,该点实际上稍微移动了一点,不再位于多边形的边缘上。

要检查该假设,请尝试将测试点移至多边形中心一点。


0
投票

within

如果没有其他点则返回within位于对象的外部,并且

[至少一个点

其他的[[
interior位于对象的

interior。相反,当您的点位于边界上时,应使用object.contains(other)

True
如果对象的边界或内部以任何方式相交,则返回intersects换句话说,如果几何对象具有

任何边界,则它们相交

或内部共同点。

(重点是我的。)>

可复制的小示例:intersects

object.intersects(other)

但是请注意,由于精度错误,您确实可能会得到意想不到的结果:True


enter image description here

在这种情况下,您可以考虑如上所述检查到多边形的距离,或者使用>>> from shapely.geometry import Point, Polygon >>> Polygon([(0, 0), (1, 0), (1, 1), (0, 1)]).contains(Point(1, 1)) False >>> Point(1, 1).within(Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])) False >>> Point(1, 1).intersects(Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])) True 稍微扩展多边形:

enter image description here
© www.soinside.com 2019 - 2024. All rights reserved.