交差部分のクロス集計(Tabulate Intersection) (解析)
サマリ
2 つのフィーチャクラス間の交差部分を計算し、交差しているフィーチャの面積、長さ、個数をクロス集計します。
図
使用法
-
ゾーンは [ゾーン フィールド] と同じ値を持つ [入力ゾーン フィーチャ] のすべてのフィーチャで構成されます。同様に、クラスは [クラス フィールド] と同じ値を持つ [入力クラス フィーチャ] のすべてのフィーチャで構成されます。フィーチャは、同じゾーンまたはクラス内で隣接している必要はありません。このツールは、ゾーンがクラス毎にどの程度交差しているかを、面積とゾーン面積に対する割合から計算します。
[クラス フィールド] を指定しないと、[入力クラス フィーチャ] のすべてのフィーチャが、単一のクラスと見なされます。そのため、[出力テーブル] の各ゾーンには、1 レコードが含まれます。
[クラス フィールド] を指定すると、ゾーンに含まれるクラスの数を n とした場合、[出力テーブル] には各ゾーンに対して n レコードが含まれます。たとえば、あるゾーンに 4 つのクラスがある場合、[出力テーブル] のそのゾーンの部分には 4 レコードが含まれます。
[フィールドの合計] パラメータを使用することで、[入力クラス フィーチャ] の数値属性について、ゾーン毎に合計することができます。クラスの合計値は、ゾーンを交差するクラスの割合に基づく合計値の比率を表します(比率ポリシーの仕組みと同様)。
注意:[フィールドの合計] に指定できるのは、比率や密度などの相対的な値または正規化された値ではなく、分割してゾーン間で分配することが可能な絶対的な値を持つフィールドのみです。
[入力ゾーン フィーチャ] よりも高い次元の [入力クラス フィーチャ] を使用することはできません。サポートされていない組み合わせは、以下のとおりです。
- ゾーン = ポイント、クラス = ポリゴンまたはライン
- ゾーン = ライン、クラス = ポリゴン
[入力ゾーン フィーチャ] と [入力クラス フィーチャ] がポリゴンである場合、出力テーブルの統計情報は面積の計算に基づきます。
[入力クラス フィーチャ] がラインである場合、出力テーブルの統計情報は長さの計算に基づきます。
[入力クラス フィーチャ] がポイントである場合、出力テーブルの統計情報はフィーチャ数に基づきます。
[入力ゾーン フィーチャ] と [入力クラス フィーチャ] が同じディメンション(両方ポリゴン、両方ライン、または両方ポイント)である場合、出力テーブルの [PERCENTAGE] フィールドはクラスが交差するゾーン フィーチャの割合を記録します。
[入力ゾーン フィーチャ] と [入力クラス フィーチャ] が異なるディメンション(ポリゴン ゾーンとライン クラス、ポリゴン ゾーンとポイント クラス、またはライン ゾーンとポイント クラス)である場合、出力テーブルの [PERCENTAGE] フィールドはゾーン ポリゴンと交差するクラスの割合を記録します。
[PERCENTAGE] フィールドは、[入力ゾーン フィーチャ] または [入力クラス フィーチャ] のフィーチャが重なり合ってる場合は 100% より大きい値を記録します。
[入力ゾーン フィーチャ] と [入力クラス フィーチャ] がポリゴンである場合にのみ、[AREA] フィールドが出力テーブルに追加されます。[AREA] フィールドは、[入力クラス フィーチャ] が交差する [入力ゾーン フィーチャ] の面積を記録します。
[入力クラス フィーチャ] がラインである場合、[LENGTH] フィールドが出力テーブルに追加されます。[LENGTH] フィールドは、[入力ゾーン フィーチャ] と [入力クラス フィーチャ] の間の交差の長さを記録します。
[入力クラス フィーチャ] がポイントである場合、[PNT_COUNT] フィールドが出力テーブルに追加されます。[PNT_COUNT] フィールドは、[入力ゾーン フィーチャ] と交差する [入力クラス フィーチャ] のポイントの数の集計を記録します。
フィーチャ レイヤを使用していて、フィーチャが選択されている場合は、選択されたフィーチャのみが計算に使用されます。
ゾーンおよびクラスのフィーチャの交差部分の判定は、[インターセクト(Intersect)] ツールと同じルールに従って行われます。
[ピボット テーブル(Pivot Table)] ツールを使用して [出力テーブル] を変換すると、各ゾーンにつき 1 つのレコードを含む、クラス属性を属性フィールドに分けたテーブルに変換できます。[ピボット テーブル(Pivot Table)] ツールのパラメータには、次の値を入力します。
- 入力テーブル - [交差部分のクロス集計(Tabulate Intersection)] の [出力テーブル] の値
- 入力フィールド - [交差部分のクロス集計(Tabulate Intersection)] の [ゾーン フィールド] の値
- ピボット フィールド - [交差部分のクロス集計(Tabulate Intersection)] の [クラス フィールド] の値
- 値フィールド - [交差部分のクロス集計(Tabulate Intersection)] の [フィールドの合計] の値、または、「AREA」、「LENGTH」、「PERCENTAGE」
構文
パラメータ | 説明 | データ タイプ |
in_zone_features | ゾーンの特定に使用するフィーチャです。 | Feature Layer |
zone_fields [zone_fields,...] |
ゾーンの定義に使用する 1 つまたは複数の属性フィールドです。 | Field |
in_class_features |
クラスの特定に使用するフィーチャです。 | Feature Layer |
out_table |
ゾーンとクラス間の交差部分のクロス集計が含まれるテーブルです。 | Table |
class_fields [class_fields,...] (オプション) |
クラスの定義に使用される 1 つまたは複数の属性フィールドです。 | Field |
sum_fields [sum_fields,...] (オプション) |
[入力クラス フィーチャ] を集計するためのフィールドです。 | Field |
xy_tolerance (オプション) |
フィーチャまたはその頂点が同一と見なされる範囲を決定する距離です。[入力ゾーン フィーチャ] の [XY 許容値] がデフォルト値となります。 | Linear Unit |
out_units (オプション) |
面積計測または長さの計測の計算に使用する単位です。[入力クラス フィーチャ] がポイントである場合に [出力単位] を設定することはできません。 | String |
コードのサンプル
Python ウィンドウで TabulateIntersection(交差部分のクロス集計)を使用して、ゾーンごとに各植生タイプの面積を求めます。
arcpy.TabulateIntersection_analysis("Zones","zone_id","Vegetation",r"C:\Esri\veganalysis.gdb\vegtypeAreas","VEGTYPE")
簡単なTabulateArea(クロス集計)スクリプト ツールを作成するために、TabulateIntersection(交差部分のクロス集計)をラップするスクリプトです。TabulateArea(クロス集計)スクリプト ツールに入力できるのは、ポリゴン フィーチャのみです。
ゾーン フィールドおよびクラス フィールドは、それぞれ 1 つに制限されています。
'''
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, sys, 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 TI with restricted parameters
try:
arcpy.TabulateIntersection_analysis(zoneFC, zoneFld, classFC, outTab, classFld, sum_Fields, xy_tol, outUnits)
except:
arcpy.AddMessage("Tabulate Intersection Failed.")
AddMsgAndPrint(arcpy.GetMessages(), 0)