找到Point和Polygon之间最长的“直线”路径

时间:2017-09-17 00:15:10

标签: python shapely

是否可以在straight中找到Point(纬度和经度)与Polygon之间的最长Shapely距离?我读过它可能找到最近的路径,但我不确定最长的路径。

2 个答案:

答案 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),以便能够使用匀称来测量距离。