ゾーン統計をテーブルに出力(Zonal Statistics as Table) (Spatial Analyst)
図
使用法
-
ゾーンは、入力データ内において、同じ値を持つすべてのエリアとして定義されます。エリアは連続していなくてもかまいません。ラスタ データセットとフィーチャ データセットのどちらも入力ゾーンとして使用できます。
-
入力ゾーンと入力値がどちらも同じ解像度を持つラスタである場合は、その解像度が直接使用されます。
解像度が異なる場合、ゾーン演算を実行する前に解像度が一致するように内部でリサンプリングが行われます。
入力に NoData セルが存在する場合は、リサンプリングによって、予想よりも大きな NoData エリアが出力に生じることがあります。これを回避するには、粗い方の入力ラスタに [リサンプル(Resample)] を実行して、高解像度の方の入力ラスタに解像度を合わせます。または、ラスタ解析環境の [セル サイズ] を [入力データの最小セルサイズ] に設定します。
-
ゾーン入力がラスタ データセットの場合、属性テーブルを持つ必要があります。属性テーブルは通常、整数ラスタに対して自動的に作成されますが、特定の状況下では作成されない場合があります。属性テーブルを作成するには、[ラスタ属性テーブルの構築(Build Raster Attribute Table)] を使用します。
-
入力ゾーンがフィーチャ データセットの場合、ベクタからラスタへの変換が内部で適用されます。変換結果が値ラスタと適合するように、[範囲] および [スナップ対象ラスタ] が環境設定とラスタ設定で適切に設定されているかを確認することをお勧めします。
内部ラスタは属性テーブルを持つ必要があるため、変換時に属性テーブルが作成されなかった場合はエラーが発生します。そのような場合は、[フィーチャ → ラスタ(Feature to Raster)]、[ポリゴン → ラスタ(Polygon to Raster)]、[ポイント → ラスタ(Point to Raster)]、[ポリライン → ラスタ(Polyline to Raster)] のいずれかを使用してフィーチャ データセットを直接変換します。先のヒントで説明したように属性テーブルを生成して、作成されたラスタを入力ゾーンとして使用します。
-
比較的小さなフィーチャを持つフィーチャ データセットが入力ゾーンである場合、データの解像度を値ラスタの解像度に対して適切なものにする必要があることを忘れないでください。単一フィーチャのエリアが値ラスタの単一セルのエリアと類似しているか小さい場合、フィーチャからラスタへの変換時に、それらのゾーンの一部が表現されないことがあります。
これを実際に確かめるには、フィーチャをラスタに変換する適切なツールを使用し、解像度が値ラスタの解像度になるように指定して、フィーチャ データセットをラスタに変換します。この変換の結果は、ゾーン演算によるデフォルト出力の状態がどのようなものかを示してくれます。
出力ゾーンが予想より少ない場合は、フィーチャ入力の詳細を表す適切なラスタ解像度を決定し、この解像度を環境のラスタ解析設定の [セル サイズ] として使用する必要があります。
-
入力ゾーンがポイント フィーチャ データセットである場合、値入力ラスタの特定のセルが複数のポイントを含むことが可能です。そのようなセルの場合、ゾーンの値は最大のフィーチャ ID を持つポイントによって決まります。
-
入力フィーチャ ゾーンが重なり合うポリゴンを持つ場合、個別のポリゴンに対してゾーン解析は実行されません。フィーチャ入力はラスタに変換されるため、各位置は 1 つの値しか持てません。
別の方法として考えられるのは、それぞれのポリゴン ゾーンについてゾーン統計情報を反復処理して、その結果を適用することです。
-
ベクタからラスタへの変換を伴う場合よりも、制御できることが多いため、ゾーン入力としてはラスタのみを使用することをお勧めします。これにより、予測される結果を常に得ることができます。
-
入力ゾーン データを指定する場合、デフォルトのゾーン フィールドは 1 つ目の有効なフィールドになります。他に有効なフィールドが存在しないとき、ObjectID フィールド(たとえば、OID あるいは FID)がデフォルトになります。
-
[ゾーン フィールド] に予約済みフィールド(たとえば、OBECTID、FID、または OID など)を選択すると、結果があいまいになることがあります。結果には、指定された [ゾーン フィールド] だけでなく、特定の出力形式のタイプに必要な特定の予約済みフィールド名が含まれます。指定されたフィールドに、特定の出力形式の予約済みフィールドと同じ名前がある場合、出力では、結果内のすべてのフィールド名が一意になるように、ゾーン フィールドの名前を変更します。
注意:予約済みの名前ではない一意の値を持つフィールドにするには、[フィールドの追加(Add Field)] および [フィールド演算(Calculate Field)] ジオプロセシング ツールを使用します。
-
入力値ラスタは、整数または浮動小数。ただし、浮動小数点タイプの場合、最頻値、中央値、最少頻値、種類のゾーン計算は実行されません。
-
最頻値と最少頻値の計算では、同一頻度の値が複数ある場合、ゾーンには同一頻度の値の中で最も小さい値が出力されます。
-
[統計情報の種類(オプション)] の設定に応じて、フィールドまたは一連のフィールドが出力テーブルに作成されます。入力の値が整数の場合、すべての統計情報(面積、最小値、最大値、範囲、平均値、標準偏差、合計、種類、最頻値、最少頻値、中央値)が計算されます。入力の値が浮動小数の場合、最頻値、最少頻値、平均値、種類の統計情報は計算されません。
-
出力テーブルのアイテムの下にある各値のデータ タイプは、実行されるゾーン統計によって変わります。統計情報の特定の振舞いについては、「ゾーン統計(Zonal Statistics)の詳細」をご参照ください。
-
出力テーブルの行数は、ゾーンの数です。
-
デフォルトでは、このツールはマルチコア プロセッサを利用します。使用できるコアの最大数は 4 が上限です。
ツールが使用するコア数を減らしたい場合、並列処理ファクタ環境設定を使用します。
構文
パラメータ | 説明 | データ タイプ |
in_zone_data |
ゾーンを定義するデータセット。 ゾーンは、整数ラスタまたはフィーチャ レイヤによって定義できます。 | Raster Layer | Feature Layer |
zone_field |
各ゾーンを定義する値を保持するフィールド。 ゾーン データセットの整数フィールドまたは文字列フィールドを使用できます。 | Field |
in_value_raster |
統計情報を計算する値を含むラスタ。 | Raster Layer |
out_table |
各ゾーンの値のサマリを含む出力テーブル。 テーブルの形式は、出力先とパスによって決定されます。拡張子を指定しない場合、INFO テーブルになります。位置がジオデータベース内の場合、出力テーブルはその特定のタイプで作成されます(ファイルまたは ArcSDE ジオデータベースなど)。名前に *.dbf 拡張子を付けると、出力が dBASE 形式になります。 | Table |
ignore_nodata (オプション) |
入力値内の NoData 値が、属するゾーンの結果に影響をおよぼすかどうかを指定します。
| Boolean |
statistics_type (オプション) |
計算する統計情報の種類。
| String |
コードのサンプル
次の例では、ポリゴン シェープファイルに定義されたゾーン内のラスタの値を集計し、結果をテーブルに記録しています。
import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data"
outZSaT = ZonalStatisticsAsTable("zones.shp", "Classes", "valueforzone",
"zonalstattblout", "NODATA", "SUM")
次の例では、ポリゴン シェープファイルに定義されたゾーン内のラスタの値を集計し、結果を *.dbf ファイルに記録しています。
# Name: ZonalStatisticsAsTable_Ex_02.py
# Description: Summarizes values of a raster within the zones of
# another dataset and reports the results to a table.
# 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 = "zones.shp"
zoneField = "Classes"
inValueRaster = "valueforzone"
outTable = "zonalstattblout02.dbf"
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
# Execute ZonalStatisticsAsTable
outZSaT = ZonalStatisticsAsTable(inZoneData, zoneField, inValueRaster,
outTable, "NODATA", "MEAN")