是否可以在straight
中找到Point
(纬度和经度)与Polygon
之间的最长Shapely
距离?我读过它可能找到最近的路径,但我不确定最长的路径。
答案 0 :(得分:3)
尝试g1.hausdorff_distance(g2)
功能返回的Hausdorff distance:
from shapely.geometry import Polygon, Point
poly = Polygon([(-1, -1), (-2, 2), (4, 4), (4, -1), (-1, -1)])
p = Point(0, 0)
poly.hausdorff_distance(p) # 5.656854249492381
请记住,Shapely仅适用于笛卡尔空间。您的问题询问"纬度和经度",所以这些距离单位是度数。您需要将其投影到合适的坐标参照系(CRS)中,以获得更常规的长度单位。此外,"直路径的定义"根据CRS的选择而变化。
答案 1 :(得分:0)
一种方法是将多边形的外部离散化为一组点,并计算该点与该组点中每个点之间的距离:
def longest(poly, p, num):
lr = LinearRing(poly.exterior.coords)
dist = 0
for i in np.linspace(0, lr.length, num):
d = p.distance(lr.interpolate(i))
if d > dist:
dist = d
return dist
poly = Polygon([(-1, -1), (-2,2), (4,4), (4, -1), (-1, -1)])
p = Point(0,0)
longest(poly, p, 20)
# out: 5.428886519426354
longest(poly, p, 100)
# out: 5.622291976018042
当然它并不精确,但在许多情况下它可能是一个合理的近似值。
备注:你不应该使用lon / lat匀称距离。 Shapely基于笛卡尔坐标系。通常,您应首先投影几何图形(使用pyproj),以便能够使用匀称来测量距离。