有效计算重叠

时间:2018-07-04 14:11:24

标签: python python-3.x shapely cartopy

在我的代码中,我想计算多个多边形与另一个多边形之间的重叠。例如,我制作了以下三个多边形(“轨道”)和一个正方形多边形。我需要计算带有正方形的轨道的覆盖率。 首先,多边形:

from shapely.ops import cascaded_union
from shapely import geometry
import matplotlib.pyplot as plt
from descartes import PolygonPatch
import cartopy.crs as ccrs

#Set up polygons
square = geometry.Polygon([(-3,-3),(3,-3),(3,3),(-3,3),(-3,-3)]) #blue square
track1 = geometry.Polygon([(-6,-0.5),(6,-0.5),(6,0.5),(-6,0.5),(-6,-0.5)]) 
#green track 1
track2 = geometry.Polygon([(-0.5,-6),(-0.5,6),(-2,6),(-2,-6),(-0.5,-6)]) #red 
track 2
track3 = geometry.Polygon([(-8.5,-3),(-7.5,-3),(8.5,4),(7.5,4),(-8.5,-3)]) 
#yellow track 3

绘制时看起来像这样: enter image description here

现在,要获得覆盖,我首先使用cascaded_union将三个轨道合并为一个多边形。之后,我得到了相交多边形:

casc = cascaded_union([track1,track2,track3]) #ISSUE 1
intersect = square.intersection(casc) #ISSUE 2

然后,为了得到重叠,我使用:

ratio = intersect.area/square.area*100.0
print(ratio)

哪个产生41.98598710317461的值。因此重叠约为42%。

问题是我必须计算重叠次数数百次。几何图形只需要制作一次,但是我知道(通过使用time.time()),这两行(由ISSUE 1和ISSUE 2表示)占据了运行时间的主要部分。有没有更快的方法来计算重叠?

0 个答案:

没有答案