我有大量的多邊形(〜100000),並嘗試找到一個聰明的方式來計算與規則網格單元格相交區域。更快速的多邊形相交的方式與形狀
目前,我正在使用shapely(基於它們的角座標)創建多邊形和網格單元格。然後,使用一個簡單的for循環,我遍歷每個多邊形並將其與附近的網格單元進行比較。
只是一個小的例子來說明的多邊形/網格單元。
from shapely.geometry import box, Polygon
# Example polygon
xy = [[130.21001, 27.200001], [129.52, 27.34], [129.45, 27.1], [130.13, 26.950001]]
polygon_shape = Polygon(xy)
# Example grid cell
gridcell_shape = box(129.5, -27.0, 129.75, 27.25)
# The intersection
polygon_shape.intersection(gridcell_shape).area
(BTW:網格單元具有尺寸0.25x0.25和最大的多邊形的1x1)
其實這是相當快的周圍0.003秒一個單獨的多邊形/網格單元組合。但是,在我的機器上運行此代碼的大量多邊形(每個可能會交叉幾十個網格單元)在我的機器上花費大約15分鐘以上(取決於交叉網格單元的數量,最多爲30+分鐘),這是不可接受的。不幸的是,我不知道如何編寫多邊形交集的代碼來獲得重疊區域。你有什麼建議嗎?有沒有一個適合的選擇?
我很好奇你是如何循環和相交你的多邊形。你能在這個過程中展示更多的代碼嗎?弄清楚這可以如何優化會更容易。 – tdedecko
我基本上是取一個緯度/經度角值的數組,並將它們轉換爲for循環到多邊形。然後,我將每個多邊形與特定的網格單元進行比較,這是在for循環中完成的。看到這個:http://stackoverflow.com/a/13956110/1740928 – HyperCube