如何确定点到多边形的距离?如果该点在多边形内,则结果应为0。
我猜是这样的:
def distance_from(poly,point):
if poly.contains(point): return 0
return poly.exterior.distance(point)
答案 0 :(得分:1)
我想澄清一下事情:
传递给distance_from
函数的实例由 Shapely Python软件包的shapely.geometry.polygon.Polygon
模块的shapely.geometry.point.Point
和shapely.geometry
类组成,用于计算几何。 (有关形状和几何对象的更多信息,请参阅手册:Shapely Python Package,Geometric Objects)。
几何对象的distance
方法将最小浮点距离返回到另一个几何对象,如手册中的here所述。多边形的外部是shapely.geometry.polygon.LinearRing
的一个实例,它构成了多边形的边界(尽管不要与返回boundary
的多边形的LineString
属性混合使用) )。因此,对于上述情况,您无需显式使用poly.exterior.distance(point)
,因为整个多边形及其边界的最小距离相同。它们具有完全相同的形状,只是几何类型不同。
如果仅使用poly.distance(point)
,则出错的可能性会较小,因为如果关注点位于多边形的interior
(more info here)之内,那么很明显它包含它,因此您不需要显式检查,并且interior
中的点到自身的距离也为0。如果尝试从{{1}获得距离,则会有所不同。 }(如上所述,它是exterior
,即闭合的LinearRing
)到位于“内部”部分的一个点。在这种情况下,您将获得“内部”部分中的点与周围的线性环之间的最小距离。
有关二进制关系(例如,一个几何对象与另一个对象之间的关系,涵盖LineString
,contains
,within
等的更多信息,请参见本章的this部分)。手册以及对基础DE-9IM关系(这是一种清楚地识别几何对象与另一对象之间的关系的方式)感兴趣的人员的参考this部分。
Shapely是GEOS套件的python包装器,该套件本身是JTS的C ++端口。在JTS页面上的功能表链接下,可以找到有关如何检查和计算空间关系的更多信息