区域制表 (空间分析)

摘要

计算两个数据集之间交叉制表的区域并输出表。

插图

区域制表图示
TabulateArea(ZoneRas, "VALUE", ClassRas, "VALUE", Tabarea1.dbf, 1)

使用情况

  • 区域定义为输入中具有相同值的所有区域。 各区域无需相连。 栅格和要素都可用于区域输入。

  • 如果输入中的任一项为栅格,则必须具有整型数据类型。

  • 如果输入数据集中的任一项为要素类,则在执行分析之前,会将其内部转换为栅格,使用另一输入栅格的像元大小和像元对齐。

  • 如果两个输入均为栅格且它们的像元未对齐,则在分析过程中将对输入进行重采样。 如果环境捕捉栅格未明确指定,则将使用输入栅格或要素类数据(Python 中的 in_class_data)进行内部对齐。 如果两个栅格具有相同的像元大小且像元对齐,则不进行重采样。

  • 如果两个输入数据集均为要素类,则在使用处理像元大小(Python 中的 processing_cell_size)或从栅格分析环境(如果指定)执行分析之前,它们会在内部转换为栅格。

  • 如果输入栅格或要素区域数据(Python 中的 in_zone_data)为要素,对于不与类栅格的任何像元中心重叠的任何区域要素,这些区域将不会转换为内部区域栅格。 因此,这些区域将不会在输出中表示。 您可以通过为保留要素区域所需细节层次的像元大小环境指定适当的值来管理这些区域并在分析环境中指定这些区域。

  • 如果输入具有重叠要素,则将针对每个单独的要素执行区域分析。

  • 如果将点或线数据用作输入要素类,则将报告由那些要素相交的区域。

  • 在指定输入区域或类数据时,默认字段将为第一个可用的整型或文本字段。 如果不存在其他有效字段,则 ObjectID 字段(例如 OIDFID)将成为默认字段。

  • 处理像元大小参数可以通过数值进行定义,也可以从现有栅格数据集获取。 如果没有将像元大小明确指定为参数值,则将从像元大小环境获取相应值(前提是已指定环境)。 如果参数像元大小和环境像元大小均未指定,则默认的输出像元大小会根据输入数据集的类型并按照如下方式进行确定。

    • 如果输入数据集是栅格,则使用数据集的像元大小。
    • 如果输入数据集为要素,且设置了捕捉栅格环境,则使用捕捉栅格的像元大小。 如果未设置捕捉栅格,则像元大小会通过使用范围的宽度或高度中的较小值除以 250 来计算,其中范围位于在环境中指定的输出坐标系内。
  • 如果使用数值指定了像元大小,工具将直接将其用于输出栅格。

    如果使用栅格数据集指定了像元大小,则参数将显示栅格数据集的路径而不是像元大小值。 该栅格数据集的像元大小将直接用于分析,前提是数据集的空间参考与输出空间参考相同。 如果数据集的空间参考与输出空间参考不同,将根据指定的像元大小方法值进行投影。

  • 作为输出表中行的类参数(Python 中的 classes_as_rows)允许您选择输出表模式的类型。 选中此参数(Python 中的 CLASSES_AS_ROWS)将类表示为行,或取消选中(Python 中的 CLASSES_AS_FIELDS)将类表示为字段。

    当类表示为行时,可以通过区域或类栅格提取区域信息来关联和查询表输出。

  • 该工具的输出为表。

    在此表中,如果未选中作为输出表中行的类参数(Python 中的 CLASSES_AS_FIELDS),则将发生以下情况:

    • 对于区域数据集的每个唯一值,都会存在一个相应的记录。
    • 对于类数据集的每个唯一值,都会存在一个相应的字段。
    • 各个记录将存储各个区域内每个类的面积。

    当选中作为输出表中行的类参数时(Python 中的 CLASSES_AS_ROWS),则将发生以下情况:

    • 区域数据集的每个唯一值都会有一条记录,该区域数据集具有类数据集的唯一值。
    • 将使用单独字段来标识区域字段、类字段、计数和每个区域内每个类的面积。

  • 有关适用于此工具的地理处理环境的详细信息,请参阅分析环境和 Spatial Analyst

参数

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

定义区域的数据集。

可通过整型栅格或要素图层来定义区域。

Raster Layer; Feature Layer
区域字段

包含定义每个区域的值的字段。

该字段可以是区域数据集的整型字段或字符串型字段。

Field
输入栅格数据或要素类数据

定义类的数据集将在各个区域内对类的面积进行汇总。

类输入可以是整型栅格图层或要素图层。

Raster Layer; Feature Layer
类字段

用于保存类值的字段。

该字段可以是输入类数据的整型或字符串型字段。

Field
输出表
(可选)

将包含各区域中各个类面积的汇总的输出表。

表的格式由输出位置和路径确定。 默认情况下,如果在地理数据库工作空间中,则输出将是一个地理数据库表;如果在文件工作空间中,则输出将为 dBASE 表。

Table
处理像元大小
(可选)

将创建的输出栅格的像元大小。

该参数可以通过数值定义,也可以从现有的栅格数据集获取。 在像元大小未明确指定为参数值的情况下,如果指定了环境像元大小值,则将使用该值;否则,将使用附加规则,根据其他输入来计算该值。 有关详细信息,请参阅使用方法部分。

Analysis Cell Size
作为输出表中行的类
(可选)

指定输入类栅格中的值在输出表中的表示方式。

  • 未选中 - 类将表示为字段。 这是默认设置。
  • 选中 - 类将表示为行。
Boolean

TabulateArea(in_zone_data, zone_field, in_class_data, class_field, {out_table}, {processing_cell_size}, {classes_as_rows})
名称说明数据类型
in_zone_data

定义区域的数据集。

可通过整型栅格或要素图层来定义区域。

Raster Layer; Feature Layer
zone_field

包含定义每个区域的值的字段。

该字段可以是区域数据集的整型字段或字符串型字段。

Field
in_class_data

定义类的数据集将在各个区域内对类的面积进行汇总。

类输入可以是整型栅格图层或要素图层。

Raster Layer; Feature Layer
class_field

用于保存类值的字段。

该字段可以是输入类数据的整型或字符串型字段。

Field
out_table
(可选)

将包含各区域中各个类面积的汇总的输出表。

表的格式由输出位置和路径确定。 默认情况下,如果在地理数据库工作空间中,则输出将是一个地理数据库表;如果在文件工作空间中,则输出将为 dBASE 表。

Table
processing_cell_size
(可选)

将创建的输出栅格的像元大小。

该参数可以通过数值定义,也可以从现有的栅格数据集获取。 在像元大小未明确指定为参数值的情况下,如果指定了环境像元大小值,则将使用该值;否则,将使用附加规则,根据其他输入来计算该值。 有关详细信息,请参阅使用方法部分。

Analysis Cell Size
classes_as_rows
(可选)

指定输入类栅格中的值在输出表中的表示方式。

  • CLASSES_AS_FIELDS类将表示为字段。 这是默认设置。
  • CLASSES_AS_ROWS类将表示为行。
Boolean

代码示例

TabulateArea 示例 1(Python 窗口)

本例返回包含各区域中各个类值面积的表。

import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data"
TabulateArea("zonedata.shp", "IDStr", "valueraster", "VALUE",
             "C:/sapyexamples/output/areatable.dbf", 2)
TabulateArea 示例 2(独立脚本)

本例返回包含各区域中各个类值面积的表。

# Name: TabulateArea_Ex_02.py
# Description: Calculates cross tabulated areas between two datasets.
# Requirements: Spatial Analyst Extension

# Import system modules
import arcpy
from arcpy import env
from arcpy.sa import *

# Set environment settings
env.workspace = "C:/sapyexamples/data"
env.extent = "classgrid"
env.snapRaster = "classgrid"

# Set local variables
inZoneData = "zonedata.shp"
zoneField = "IDStr"
inClassData = "valueraster"
classField = "VALUE"
outTable = "C:/sapyexamples/output/areatable02.dbf"
processingCellSize = 2

# Execute TabulateArea
TabulateArea(inZoneData, zoneField, inClassData, classField, outTable,
             processingCellSize)