是否可以找到中Point
(經度和緯度)與Polygon
之間最長的straight
距離?我讀到可以找到最近的路徑,但我不確定最長的路線。找到點與多邊形之間最長的「直線」路徑
回答
嘗試Hausdorff distance,這是由g1.hausdorff_distance(g2)
機能的研究返回:
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
請記住,身材勻稱只適用於笛卡爾空間。你的問題詢問「經度和緯度」,所以這些距離單位是度數。您需要將其投影到合適的座標參考系統(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來調整距離。勻稱基於笛卡爾座標系。一般來說,您應該首先投影您的幾何圖形(使用pyproj),以便能夠使用勻稱來測量距離。
兩個意見。 1)很容易看出,最大距離實際上是在多邊形頂點實現的,所以方法是精確的。 2)在一個數組中存儲距離,然後對它進行排序以獲得最大值的效率相比將最大值存儲在變量中並在計算距離時進行比較效率非常低。在處理內存使用情況。 – eguaio
@eguaio感謝您的提示,我更新了答案。關於你的第一點:最長距離是'math.sqrt((4 ** 2)+(4 ** 2))= 5.656854249492381',而函數返回的內容稍有不同。增加'num'參數可以提高準確性(正如我在示例中試圖說明的那樣)。 –
- 1. 找到頂點之間給定路線的最短路徑python
- 2. 找到任意兩個節點之間最長的路徑
- 3. 兩點之間最長的路徑
- 4. 找到所有點與多邊形邊界之間的最小距離
- 5. 查找樹中一組節點之間的最長路徑
- 6. 多點之間的最短路線
- 7. 如何找到兩個節點之間的循環圖中最長的路徑?
- 8. 如何找到兩個形狀之間的最短路徑?
- 9. 如何找到Lisp中兩個節點之間最長的路徑?
- 10. 直線與三角形邊的交點
- 11. SVG中路徑與多邊形繪製的多邊形示例
- 12. GraphViz,找到兩個節點之間的最短路徑
- 13. Neo4j - 如何找到兩個節點之間的最短路徑
- 14. 編輯多邊形多邊形的多邊形路徑事件
- 15. 找到兩個凸多邊形之間的接觸點
- 16. 要找到直線與我們在matlab中的圖形之間的交點
- 17. 多邊形與半徑的折線?
- 18. ITextShape可點擊多邊形或路徑
- 19. 兩個圖形節點之間的固定長度路徑
- 20. 通過多邊形尋找最佳路徑的漏斗算法
- 21. 查找多邊形中花費最少的路徑
- 22. 找到2個節點之間的最短路徑沒有更多的想法
- 23. 在特定點之間找到三維空間中最短(最快)的路徑
- 24. 兩個頂點之間的最長路徑
- 25. 樹形圖 - 找到有多少對頂點,它們之間的路徑上的邊的總和是C
- 26. 點之間最簡單的路徑
- 27. 計算多個多邊形之間共享邊界的長度
- 28. Neo4j:找到兩個節點之間有多個路徑
- 29. 在neo4j中找到節點集合(某些節點)之間最長路徑的最佳方法是什麼?
- 30. 在iPhone上的MapKit上找到兩個點之間的路徑/路線
有什麼方法可以在Python中用CRS實現? –
你可以使用[pyproj](https://github.com/jswhit/pyproj)([這種方式](https://gis.stackexchange.com/q/127427/1872))來投影幾何圖形,並找到來自[此地圖預測列表](https://en.wikipedia.org/wiki/List_of_map_projections)的良好預測 –
不涉及選擇投影的另一種策略是找到反測地距離's12'從[geographiclib](https://geographiclib.sourceforge.io/html/python/)的每一對經緯度點開始。 –