摘要
创建显示各唯一区域值输入中的像元值频数分布的表和直方图。
插图
Zonal Histogram for land use zones and classified slope values
用法
· 您可以通过区域直方图对一个数据集中的值在另一个数据集类中的频数分布进行研究。例如,土地利用类中的坡度分布、高程类中的降雨分布或警务区附近的犯罪分布。
· 区域定义为输入中具有相同值的所有区。各区无需相连。栅格和要素数据集都可用于区域输入。
· 如果区域输入和值输入均为具有相同分辨率的栅格,则可直接使用它们。
如果分辨率不同,则可先应用内部重采样以使其相一致,然后再执行区域操作。
倘若输入中存在任何 NoData 像元,重采样就可能在输出中产生比您预期更大的 NoData 区域。要避免此种情况,或者重新采样粗糙输入栅格,提高输入栅格的分辨率,或者在“栅格分析”环境下将像元大小设置为输入的最小值。
· 如果区域输入为栅格数据集,则该输入必须具有属性表。通常会自动为整型栅格数据创建属性表,但是某些情况下可能不会这样做。您可以使用构建栅格属性表来创建一个属性表。
· 建议您仅使用栅格作为区域输入,因为这可使您更好地控制“矢量至栅格”转换。这将有助于确保您始终获得预期的结果。
· 如果区域输入是要素数据集,则可在内部对其应用“矢量至栅格”转换。要确保转换结果与值栅格完全对齐,建议您检查环境设置和栅格设置中的范围和捕捉栅格是否设置正确。
由于内部栅格必须具有属性表,因此在转换中不创建属性表的情况下将会发生错误。如果发生此错误,则使用要素转栅格、面转栅格、点转栅格或折线转栅格直接转换要素数据集。按先前提示中所述内容为其生成属性表,然后使用生成的栅格作为“区域”输入。
· 如果区域输入为要素相对较小的要素数据集,则需要牢记,信息的分辨率需要适合于值栅格的分辨率。如果单个要素的区域相似于或小于值栅格中单个像元的区域,则在要素转栅格转换过程中,某些区域可能不会显示。
要对此进行显示,需尝试使用适当的要素转栅格转换工具将要素数据集转换为栅格,然后将分辨率指定为值栅格的分辨率。通过此转换产生的结果会指明区域操作的默认输出将是什么。
如果输出中的结果比您可能已预期的少,则需要确定表示要素输入细节的适当的栅格分辨率,然后使用此分辨率作为“栅格分析环境设置”的像元大小。
· 如果区域输入为点要素数据集,则其可能具有值输入栅格的任何特定像元内所含的多个点。对于这种像元,区域值将通过具有最高要素 ID 的点来确定。
· 如果区域要素输入具有叠置的面,则无法为每一个单独的面执行区域分析。因为要素输入已转换为栅格,所以每个位置只能拥有一个值。
另一种方法就是要为每个面区域反复进行分区统计并核对结果。
· 区域字段必须为整型或字符串类型。
在指定输入区域数据时,默认区域字段将为第一个可用的有效字段。如果无其他有效字段存在,则 ObjectID 字段(如OID 或 FID)将为默认字段。
· 输入值栅格上的像元属于像元中心所在的区域。在此情况下,这些区域是在向栅格和重新采样进行了任何必要转换后的区域。
· 在直方图中,每个区域的类(条柱)的数量由输入赋值栅格确定。
如果指定图层,则图层的符号系统定义类的数量。
如果指定数据集,则在默认情况下将有 256 个类,除非输入是具有少于 26 个唯一值的整型(在此情况下,它将是唯一值的总数)。
· 默认情况下不生成区域直方图。要在工具运行时创建区域直方图,可指定输出图形名称。
该图形只是临时图形(在内存中)。要创建该图形的永久版本,可使用保存图表工具创建 .grf 图形文件,或者以该工具中提供的一种其他格式进行创建。
代码实例
ZonalHistogram 示例 1(Python 窗口)
本示例创建了分区直方图 .dbf 表。
import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data"
outZonHisto = ZonalHistogram("zoneras", "zonfield", "valueras", "znhist_tbl.dbf")
ZonalHistogram 示例 2(独立脚本)
本示例创建了分区直方图 .dbf 表和图形文件。
# Name: ZonalHistogram_Ex_02.py
# Description: Creates a zonal histogram output table and
# a graph showing the amount of value cells
# for each unique input zone.
# 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"
# Set local variables
inZoneData = "zonras"
zoneField = "zonfield"
inValueRaster = "valueras"
outTable = "C:/sapyexamples/output/zonehist_tbl.dbf"
outGraph = "zonehist_gra"
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
# Execute ZonalHistogram
ZonalHistogram(inZoneData, zoneField, inValueRaster, outTable, outGraph)