如何确定点与多边形的距离?如果点在多边形内,则结果应为0。
我猜是这样:
def distance_from(poly,point):
if poly.contains(point): return 0
return poly.exterior.distance(point)发布于 2018-12-29 16:58:40
我想澄清一下:
传递给distance_from函数的实例由Shapely包中用于计算几何的shapely.geometry模块中的类shapely.geometry.polygon.Polygon和shapely.geometry.point.Point组成。(有关形状和几何对象的更多信息,请参阅手册:Shapely Python包,几何对象)。
几何对象的distance方法将最小浮动距离返回给另一个几何对象,如手册中所描述的这里。多边形的外部是shapely.geometry.polygon.LinearRing的一个实例,它构成多边形的边界(尽管它不与返回LineString的多边形的boundary属性混淆)。因此,对于上述情况,您不需要显式使用poly.exterior.distance(point),因为整个多边形的最小距离与其边界相同。它们的形状完全相同,只有不同的几何类型。
如果您只使用poly.distance(point),就不会那么容易出错了,因为这样,如果兴趣点位于多边形的interior (这里有更多的信息)内,那么它显然包含它,所以您不需要显式检查,而且从interior内的一个点到它本身的距离也是0。如果您尝试从exterior (正如上面解释的那样是一个LinearRing,即封闭的LineString)到位于“内部”部分的点之间的距离,就会有所不同。在这种情况下,您将得到“内”部分中的点与周围线性环之间的最小距离。
有关二进制关系的更多信息(即几何对象与另一个对象之间的关系,包括contains、within、touches等)。参考手册中的这部分,对于那些对底层DE-9IM关系感兴趣的人(这是一种明确识别几何对象与另一种关系的方式的方法),请参考这部件。
Shapely是GEOS套件的python包装器,它本身就是JTS的C++端口。在链接功能表下的JTS页面上,可以找到更多关于如何检查和计算空间关系的信息。
https://stackoverflow.com/questions/53882074
复制相似问题