区域制表 (空间分析)

需要 Spatial Analyst 许可。

摘要

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

插图

区域制表图示
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)