我有大量的多边形(~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
(顺便说一句:网格单元的尺寸为 0.25x0.25,多边形最大为 1x1)
实际上,这对于大约 0.003 秒的单个多边形/网格单元组合来说是相当快的。但是,在我的机器上运行大量多边形(每个多边形可能与数十个网格单元相交)大约需要 15 分钟以上(最多 30 分钟以上,具体取决于相交网格单元的数量),这是不可接受的。不幸的是,我不知道如何为多边形相交编写代码以获得重叠区域。你有什么建议吗?有没有比匀称的替代品?