[英]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.