交集制表 (分析)

摘要

计算两个要素类之间的交集并对相交要素的面积、长度或数量进行交叉制表。

插图

交集制表工具图示

使用情况

  • 区域由输入区域要素参数中与区域字段参数值相同的所有要素组成。 同样,类由输入类要素参数中与类字段参数值相同的所有要素组成。 在同一区域或类中要素不必相连。 此工具用于按每个类计算相交区域的大小(面积和区域面积百分比)。

  • 如果未指定类字段值,则输入类要素参数中的所有要素都将被视为单个类。 输出表值对每一区域都将包含一条记录。

  • 如果已指定类字段值,则输出表值将包含各区域的 n 条记录,其中 n 表示该区域内类的数目。 例如,如果某个区域包含四个类,则输出表值中对于该区域将有四条记录。

  • 使用求和字段参数可按区域对输入类要素参数的数值属性进行求和。 类的总和值表示总和值基于类与区域相交的百分比的比例。

    警告:

    将具有绝对值(百分比或密度等非相对的正态值)的字段用作求和字段,因为可对这些值进行分割或将其分配到不同区域。

  • 不支持使用比输入区域要素值的维度更高的输入类要素值。

    • 如果输入区域要素值是点,则输入类要素不能是面或线。
    • 如果输入区域要素值是线,则输入类要素不能是面。

  • 输入区域要素输入类要素值都为面时,输出表将基于面积计算的结果进行统计。

    输入类要素值为线时,输出表将基于线性计算的结果进行统计。

    输入类要素值为点时,输出表将基于要素计数进行统计。

  • 输入区域要素输入类要素值具有相同的维度(同为面、同为线或同为点)时,输出 PERCENTAGE 字段记录区域要素与类相交的百分比。

    如果输入区域要素输入类要素值具有不同的维度(面区域具有线类、面区域具有点类或线区域具有点类),则输出 PERCENTAGE字段记录类与区域面相交的百分比。

    如果输入区域要素输入类要素中存在重叠要素,则 PERCENTAGE 字段中要记录的百分比值可能大于 100。

  • 输入区域要素输入类要素值为面时,输出表中仅包括 AREA 字段。 AREA 字段包含输入区域要素值与输入类要素值相交的面积。

    输入类要素值为线时,输出表中包括 LENGTH 字段。 LENGTH 字段包含输入区域要素输入类要素之间相交的长度。

    输入类要素值为线时,输出表中包括 PNT_COUNT 字段。 PNT_COUNT 字段包含输入类要素点与输入区域要素相交的次数。

  • 使用要素图层时,如果选中了任何要素,则计算中将只使用选中的要素。

  • 确定区域和类要素的相交部分所遵循的规则与相交工具的规则相同。

  • 使用数据透视表工具可将输出表转换成包含每个区域的一条记录并将类属性作为单独的属性字段的表。 按下列方式填充数据透视表工具的参数:

    • 输入表 - 交集制表输出表
    • 输入字段 - 交集制表区域字段
    • 透视表字段 - 交集制表类字段
    • 值字段 - 交集制表求和字段 或 AREA、AREALENGTHPERCENTAGE
    数据透视表输出示例

参数

标注说明数据类型
输入区域要素

用于标识区域的要素。

Feature Layer
区域字段

将用于定义区域的属性字段。

Field
输入类要素

用于标识类的要素。

Feature Layer
输出表

将包含区域和类之间交集的交叉表的表。

Table
类字段
(可选)

用于定义类的属性字段。

Field
求和字段
(可选)

输入类要素参数中用于求和的字段。

Field
XY 容差
(可选)

确定要素或其顶点被视作相同的范围的距离。 默认情况下,为输入区域要素的 XY 容差。

警告:

更改此参数的值可能会导致出现故障或意外结果。 建议不要修改此参数。 已将其从工具对话框的视图中移除。 默认情况下,将使用输入要素类的空间参考 x,y 容差属性。

Linear Unit
输出单位
(可选)

指定计算面积或长度测量值所使用的单位。 当输入类要素为点时,不支持设置输出单位。

  • 未知未知单位。
  • 英寸将以英寸为单位。
  • 英尺单位将为英尺。
  • 将以码为单位。
  • 英里单位将为英里。
  • 海里单位将为海里。
  • 毫米将以毫米为单位。
  • 厘米将以厘米为单位。
  • 分米将以分米为单位。
  • 单位将为米。
  • 千米单位将为公里。
  • 十进制度单位将为十进制度。
  • 将以磅为单位。
  • 公亩将以公亩为单位。
  • 英亩将以英亩为单位。
  • 公顷将以公顷为单位。
  • 平方英寸将以平方英寸为单位。
  • 平方英尺将以平方英尺为单位。
  • 平方码将以平方码为单位。
  • 平方英里将以平方英里为单位。
  • 平方毫米将以平方毫米为单位。
  • 平方厘米将以平方厘米为单位。
  • 平方分米将以平方分米为单位。
  • 平方米将以平方米为单位。
  • 平方千米将以平方公里为单位。
String

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,...]
(可选)

in_class_features素参数中用于求和的字段。

Field
xy_tolerance
(可选)

确定要素或其顶点被视作相同的范围的距离。 默认情况下,此为 in_zone_features 参数的 XY 容差。

警告:

更改此参数的值可能会导致出现故障或意外结果。 建议不要修改此参数。 已将其从工具对话框的视图中移除。 默认情况下,将使用输入要素类的空间参考 x,y 容差属性。

Linear Unit
out_units
(可选)

指定计算面积或长度测量值所使用的单位。 当输入类要素为点时,不支持设置输出单位。

  • UNKNOWN未知单位。
  • INCHES将以英寸为单位。
  • FEET单位将为英尺。
  • YARDS将以码为单位。
  • MILES单位将为英里。
  • NAUTICAL_MILES单位将为海里。
  • MILLIMETERS将以毫米为单位。
  • CENTIMETERS将以厘米为单位。
  • DECIMETERS将以分米为单位。
  • METERS单位将为米。
  • KILOMETERS单位将为公里。
  • DECIMAL_DEGREES单位将为十进制度。
  • POINTS将以磅为单位。
  • ARES将以公亩为单位。
  • ACRES将以英亩为单位。
  • HECTARES将以公顷为单位。
  • SQUARE_INCHES将以平方英寸为单位。
  • SQUARE_FEET将以平方英尺为单位。
  • SQUARE_YARDS将以平方码为单位。
  • SQUARE_MILES将以平方英里为单位。
  • SQUARE_MILLIMETERS将以平方毫米为单位。
  • SQUARE_CENTIMETERS将以平方厘米为单位。
  • SQUARE_DECIMETERS将以平方分米为单位。
  • SQUARE_METERS将以平方米为单位。
  • SQUARE_KILOMETERS将以平方公里为单位。
String

代码示例

交集制表 (TabulateIntersection) 示例 1(Python 窗口)

在 Python 窗口中使用 TabulateIntersection 可查找各区域中每种植被的面积。

import arcpy
arcpy.TabulateIntersection_analysis("Zones", "zone_id", "Vegetation", 
                                    r"C:\Esri\veganalysis.gdb\vegtypeAreas", 
                                    "VEGTYPE")
交集制表 (TabulateIntersection) 示例 2(独立脚本)

脚本对 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 TabulateIntersection
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: 是

相关主题