# 问题所在
一个要素类(也就是一个图层内)中有两类,比如地块
和建筑
。
我们想要统计一个数据,即地块
内的建筑面积总数
,这可能存在两种情况:
- 情形1:建筑完全在地块内,面积可直接加到建筑面积总数上
- 情形2:建筑和地块边缘相交,我们要判断建筑和建筑相交面积站建筑自身面积的百分比,若相交面积大于建筑面积50%,则加到建筑面积上,否则忽略
通过分析可以发现,判定两个要素是否相交并且计算他们相交面积占建筑要素的百分比是难点所在。
按正常思路,我们需要做双重循环,逐个遍历地块和建筑要素,判断他们是包含关系还是相交关系,在此基础上再计算相交面积百分比。问题是,如果建筑要素数量极大,比如超过10000个,这种双重循环将耗费大量时间。
另一个问题是,如何在一个要素类中求得两个要素之间的相交部分?
# 解决方案
通过多次试验探索,总结出一条可行的思路:
- 基于空间位置选择要素:使用
arcpy.SelectLayerByLocation_management
,以地块要素图形为界限,选择其周围的建筑要素; - 判定要素空间关系:步骤1已经选出要素类中所有和地块存在重叠、包含、相交等关系的要素,可以使用
geometry
的contains
、equals
方法做条件判定,过滤出相交情形; - 相交要素插入临时要素类,做相交分析:把相交的的两个要素分别插入(
insertRow
)事先建立的临时要素类,使用相交分析(Intersect_analysis
),得到相交要素类,获得相交要素类和建筑要素类的面积并计算比例;相交分析完成后,分别清空临时要素类并删去相交要素类; - 面积汇总及更新地块要素。