描述
计算两个要素类之间的交集并对相交要素的面积、长度或数量进行交叉制表。
插图
使用方法
区域由输入区域要素中与区域字段值相同的所有要素组成。同样,类由输入类要素中与类字段值相同的所有要素组成。在同一区域或类中要素不必相连。此工具用于按每个类计算相交区域的大小(面积和区域面积百分比)。
如果未指定类字段值,则输入类要素内的所有要素都将被视为单个类。输出表对每一区域都将包含一条记录。
如果已指定类字段值,则输出表将包含各区域的 n 条记录,其中 n 表示该区域内类的数目。例如,如果某个区域包含四个类,则输出表中对于该区域将有四条记录。
使用求和字段参数可按区域对输入类要素的数值属性进行求和。类的总和值表示总和值基于类与区域相交的百分比的比例。
警告:
将具有绝对值(百分比或密度等非相对的正态值)的字段用作求和字段,因为可对这些值进行分割或将其分配到不同区域。
不支持使用比输入区域要素的维度更高的输入类要素。
- 如果输入区域要素是点,则输入类要素不能是面或线。
- 如果输入区域要素是线,则输入类要素不能是面。
当输入区域要素和输入类要素都为面时,输出表将基于面积计算的结果进行统计。
当输入类要素为线时,输出表将基于线性计算的结果进行统计。
当输入类要素为点时,输出表将基于要素计数进行统计。
当输入区域要素和输入类要素具有相同的维度(同为面、同为线或同为点)时,输出 PERCENTAGE 字段记录区域要素与类相交的百分比。
如果输入区域要素和输入类要素具有不同的维度(面区域具有线类、面区域具有点类或线区域具有点类),则输出 PERCENTAGE 字段记录类与区域面相交的百分比。
如果输入区域要素或输入类要素中存在重叠要素,则 PERCENTAGE 字段中要记录的百分比值可能大于 100。
当输入区域要素和输入类要素为面时,输出表中仅包括 AREA 字段。AREA 字段包含输入区域要素与输入类要素相交的面积。
当输入类要素为线时,输出表中包括 LENGTH 字段。LENGTH 字段包含输入区域要素和输入类要素之间相交的长度。
当输入类要素为点时,输出表中包括 PNT_COUNT 字段。PNT_COUNT 字段包含输入类要素点与输入区域要素相交的次数。
使用要素图层时,如果选中了任何要素,则计算中将只使用选中的要素。
确定区域和类要素的相交部分所遵循的规则与相交工具的规则相同。
使用数据透视表工具可将输出表转换成包含每个区域的一条记录并将类属性作为单独的属性字段的表。按下列方式填充数据透视表工具的参数:
- 输入表 - 交集制表输出表
- 输入字段 - 交集制表区域字段
- 透视表字段 - 交集制表类字段
- 值字段 - 交集制表求和字段或 AREA、LENGTH、PERCENTAGE
语法
arcpy.analysis.TabulateIntersection(in_zone_features, zone_fields, in_class_features, out_table, {class_fields}, {sum_fields}, {xy_tolerance}, {out_units})
参数 | 说明 | 数据类型 |
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 容差。 警告:更改此参数的值可能会导致出现故障或意外结果。建议不要修改此参数。已将其从工具对话框的视图中移除。默认情况下,将使用输入要素类的空间参考 x,y 容差属性。 | Linear Unit |
out_units (可选) | 计算面积或长度测量值所使用的单位。当输入类要素为点时,不支持设置输出单位。
| String |
代码示例
在 Python 窗口中使用 TabulateIntersection 可查找各区域中每种植被的面积。
import arcpy
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
import sys
import 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)
许可信息
- Basic: 否
- Standard: 否
- Advanced: 是