交集制表 (Analysis)
摘要
计算两个要素类之间的交集并对相交要素的面积、长度或数量进行交叉制表。
插图
用法
-
区域由输入区域要素中区域字段值相同的所有要素组成。同样,类由输入类要素中类字段值相同的所有要素组成。在同一区域或类中要素不必相连。此工具用于按每个类计算相交区域的大小(面积和区域面积百分比)。
如果未指定类字段,输入类要素内的所有要素都将被视为单个类。输出表对每一区域都将包含一条记录。
如果已指定类字段,则输出表将包含各区域的 n 条记录,其中 n 表示该区域内类的数目。例如,如果某个区域包含四个类,则输出表中对于该区域将有四条记录。
使用求和字段参数可按区域对输入类要素的数值属性进行求和。类的总和值表示总和值基于类与区域相交的百分比的比例(类似于比率策略的工作原理)。
警告:只应将具有绝对值(百分比或密度等非相对的正态值)的字段用作求和字段,因为可对这些值进行分割或将其分配到不同区域。
不支持使用比输入区域要素的维度更高的输入类要素。不支持的组合:
- 区域 = 点,类 = 面或线
- 区域 = 线,类 = 面
当输入区域要素和输入类要素都为面时,输出表将基于面积计算的结果进行统计。
当输入类要素为线时,输出表将基于线性计算的结果进行统计。
当输入类要素为点时,输出表将基于要素计数进行统计。
当输入区域要素和输入类要素具有相同的维度(同为面、同为线或同为点)时,输出“百分比”字段记录区域要素与类相交的百分比。
如果输入区域要素和输入类要素具有不同的维度(面区域具有线类、面区域具有点类或线区域具有点类),则输出“百分比”字段记录类与区域面相交的百分比。
如果输入区域要素或输入类要素中存在重叠要素,则“百分比”字段中要记录的百分比值可能大于 100%。
当输入区域要素和输入类要素为面时,输出表中仅包括“面积”字段。“面积”字段包含输入区域要素与输入类要素相交的面积。
当输入类要素为线时,输出表中包括“长度”字段。“长度”字段包含输入区域要素和输入类要素之间相交的长度。
当输入类要素为点时,输出表中包括 PNT_COUNT 字段。PNT_COUNT 字段包含输入类要素点与输入区域要素相交的次数计数。
使用要素图层时,如果选中了任何要素,则计算中将只使用选中的要素。
确定区域和类要素的相交部分所遵循的规则与相交工具的规则相同。
使用数据透视表工具可将输出表转换成包含每个区域的一条记录并将类属性作为单独的属性字段的表。按下列方式填充数据透视表工具的参数:
- 输入表 - 制表交集 输出表
- 输入字段 - 制表交集区域字段
- 透视表字段 - 制表交集类字段
- 值字段 - 制表交集求和字段或面积、长度、百分比
语法
参数 | 说明 | 数据类型 |
in_zone_features | 用于标识区域的要素。 | Feature Layer |
zone_fields [zone_fields,...] |
将用于定义区域的属性字段。 | Field |
in_class_features |
用于标识类的要素。 | Feature Layer |
out_table |
将包含区域和类之间交集的交叉表的表。 | Table |
class_fields [class_fields,...] (可选) |
用于定义类的属性字段。 | Field |
sum_fields [sum_fields,...] (可选) |
输入类要素中用于求和的字段。 | Field |
xy_tolerance (可选) |
确定要素或其折点被视作相同的范围的距离。默认情况下,为输入区域要素的 XY 容差。 | Linear Unit |
out_units (可选) |
计算面积或长度测量值所使用的单位。当输入类要素为点不受支持时,设置输出单位。 | String |
代码实例
在 Python 窗口中使用制表交集 (TabulateIntersection) 可查找各区域中每种植被的面积。
arcpy.TabulateIntersection_analysis("Zones","zone_id","Vegetation",r"C:\Esri\veganalysis.gdb\vegtypeAreas","VEGTYPE")
对制表交集 (TabulateIntersection) 进行打包以创建简单的 TabulateArea 脚本工具的脚本。TabulateArea 脚本工具仅采用面要素作为输入。
“区域”和“类”字段各自限制为一个。
'''
TabulateArea.py
Description: Shows how to wrap the TabulateIntersection tool to create a TabulateArea script tool
Requirements: Polygon Zone Feature Class, Polygon Class Feature Class
'''
import arcpy, sys, os
def AddMsgAndPrint(msg, severity=0):
# Adds a Message (in case this is run as a tool)
# and also prints the message to the screen (standard output)
#
print msg
# Split the message on \n first, so that if it's multiple lines,
# a GPMessage will be added for each line
try:
for string in msg.split('\n'):
# Add appropriate geoprocessing message
#
if severity == 0:
arcpy.AddMessage(string)
elif severity == 1:
arcpy.AddWarning(string)
elif severity == 2:
arcpy.AddError(string)
except:
pass
## Get Parameters
zoneFC = arcpy.GetParameterAsText(0)
zoneFld = arcpy.GetParameterAsText(1) # Only allow one field
classFC = arcpy.GetParameterAsText(2)
outTab = arcpy.GetParameterAsText(3)
classFld = arcpy.GetParameterAsText(4) # Optional and only allow one field
sum_Fields = ""
xy_tol = ""
outUnits = arcpy.GetParameterAsText(5)
## Validate parameters
# Inputs can only be polygons
zoneDesc = arcpy.Describe(zoneFC)
classDesc = arcpy.Describe(classFC)
if zoneDesc.shapeType != "Polygon" or classDesc.shapeType != "Polygon":
AddMsgAndPrint("Inputs must be of type polygon.", 2)
sys.exit()
# Only one zone field and class field
if zoneFld != "":
if zoneFld.find(";") > -1 or classFld.find(";") > -1:
AddMsgAndPrint("A maximum of one zone and/or class field is allowed.", 2)
sys.exit()
## Run TI with restricted parameters
try:
arcpy.TabulateIntersection_analysis(zoneFC, zoneFld, classFC, outTab, classFld, sum_Fields, xy_tol, outUnits)
except:
arcpy.AddMessage("Tabulate Intersection Failed.")
AddMsgAndPrint(arcpy.GetMessages(), 0)