簡體   English   中英

查找點和多邊形之間的最長“直線”路徑

[英]Find longest “straight” path between Point and Polygon

是否可以在Shapely找到一個Point (緯度和經度)和一個Polygon之間的最長straight距離? 我讀過有可能找到最近的路徑,但我不確定最長的路徑。

嘗試通過g1.hausdorff_distance(g2)函數返回的Hausdorff距離

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的選擇而變化。

一種方法是將多邊形的外部離散為點集,然后計算該點與該點集中的每個點之間的距離:

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與shape距離地使用。 Shapely基於笛卡爾坐標系。 通常,您應該首先投影幾何形狀(使用pyproj),以便能夠使用形狀來測量距離。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM