我有大量的多边形(~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分钟或更长时间(取决于相交格网单元的数量),这是不可接受的。不幸的是,我不知道如何编写用于多边形相交以获取重叠区域面积的代码。你有什么技巧吗?是否有比shapely更好的替代方案?