空間結合(Spatial Join) (解析)
サマリ
フィーチャクラスの属性を、空間リレーションシップに基づいて別のフィーチャクラスの属性に結合します。ターゲット フィーチャと、結合フィーチャの結合された属性は、出力フィーチャクラスに書き込まれます。
使用法
空間結合では、[結合フィーチャ] から [ターゲット フィーチャ] への行のマッチが、相対的な空間位置に基づいて行われます。デフォルトでは、結合フィーチャのすべての属性がターゲット フィーチャの属性に追加されます。出力に書き込む属性は、[結合フィーチャのフィールド マップ] パラメータで操作することで選択できます。
出力フィーチャクラスには、2 つの新しいフィールド(Join_Count および TARGET_FID)が常に追加されます。Join_Count は、各ターゲット フィーチャ(TARGET_FID)にマッチする結合フィーチャの数を表します。
[結合フィーチャのフィールド マップ] パラメータに指定したマージ ルールは、複数のフィーチャがターゲット フィーチャにマッチしたときに(Join_Count > 0)、結合フィーチャの属性にだけ適用されます。たとえば、「DEPTH」属性の値に 15.5、2.5、および 3.3 を持つ 3 つのフィーチャが結合され、マージ ルールとして [平均] が適用される場合、出力フィールドの値は 6.1 になります。
[結合方法] パラメータが JOIN_ONE_TO_MANY である場合、各ターゲット フィーチャの出力フィーチャクラスには複数の行が存在する場合があります。出力には新しいフィールドの JOIN_FID が追加されます。これにより、結合フィーチャ(JOIN_FID)がどのターゲット フィーチャ(TARGET_FID)に結合されるかを判断しやすくなります。
すべての入力ターゲット フィーチャは、次の両方の条件を満たす場合にのみ出力フィーチャクラスに書き込まれます。
- [結合方法] が JOIN_ONE_TO_ONE に設定されている。
- [すべてのターゲット フィーチャを保持する] がオンである(スクリプト中で JOIN_ALL に設定されている)。
[マッチ オプション] が CLOSEST に設定されているときに、2 つ以上の結合フィーチャがターゲット フィーチャから同じ距離に存在する場合があります。この場合は、結合フィーチャのいずれかが、マッチするフィーチャとしてランダムに選択されます(結合フィーチャの FID は、この選択に影響しません)。2 番目、3 番目、または N 番目に近いフィーチャを検索したい場合は、[近傍情報テーブルの作成(Generate Near Table)] ツールを使用します。
構文
パラメータ | 説明 | データ タイプ |
target_features |
ターゲット フィーチャの属性と結合されたフィーチャの属性は、出力フィーチャクラスに転送されます。ただし、フィールド マップ パラメータに属性のサブセットを定義することができます。ターゲット フィーチャには、ArcGIS によってサポートされるあらゆる空間データ ソースを使用できます。 | Feature Layer |
join_features |
結合フィーチャの属性は、ターゲット フィーチャの属性に結合されます。結合された属性の集約に結合操作がどのように影響するかについては、[結合方法] パラメータの説明をご参照ください。結合フィーチャには、ArcGIS によってサポートされるあらゆる空間データ ソースを使用できます。 | Feature Layer |
out_feature_class |
ターゲット フィーチャの属性と結合フィーチャの属性を含む、新しいフィーチャクラス。デフォルトでは、ターゲット フィーチャのすべての属性と結合されたフィーチャの属性が出力に書き込まれます。ただし、転送する属性のセットはフィールド マップ パラメータで設定できます。 | Feature Class |
join_operation (オプション) |
単一のターゲット フィーチャと同じ空間リレーションシップを持つ複数の結合フィーチャが検出された場合、ターゲット フィーチャと結合フィーチャの間の結合をどのように処理するかを決定します。
| String |
join_type (オプション) |
出力フィーチャクラスにすべてのターゲット フィーチャを保存するか(外部結合)、結合フィーチャとの空間リレーションシップが指定されたターゲット フィーチャのみを保存するか(内部結合)を指定します。
| Boolean |
field_mapping (オプション) |
出力フィーチャクラスでどの属性フィールドを使用するかを制御します。最初のリストには、ターゲット フィーチャおよび結合フィーチャの両方のすべてのフィールドが含まれます。フィールドの追加、削除、名前の変更や、フィールドのプロパティの変更が可能です。ターゲット フィーチャの選択したフィールドはそのまま転送されますが、結合フィーチャの選択したフィールドは、有効なマージ ルールに従って集約することができます。フィールド マッピングの詳細については、ヘルプ トピックの「フィールド マッピング コントロールの使用」と「入力フィールドから出力フィールドへのマッピング」をご参照ください。 | Field Mappings |
match_option (オプション) |
行の一致に使用される条件を定義します。次のような一致オプションがあります。
| String |
search_radius (オプション) |
ターゲット フィーチャのこの範囲内にある結合フィーチャが、空間結合の対象と見なされます。検索範囲は、[マッチ オプション] に INTERSECTS または CLOSEST が指定された場合のみ有効になります。検索範囲に 100 メートルを指定して、[マッチ オプション] に INTERSECTS を指定すると、結合フィーチャがターゲット フィーチャの 100 メートル以内にある場合に、結合フィーチャの属性がターゲット フィーチャに転送されます。検索範囲に 100 メートルを指定して、[マッチ オプション] に CLOSEST を指定すると、結合フィーチャがターゲット フィーチャの 100 メートル以内にあり、ターゲット フィーチャに最も近い場合に、結合フィーチャの属性がターゲット フィーチャに転送されます。 | Linear unit |
distance_field_name (オプション) |
出力フィーチャクラスに追加するフィールドの名前。ターゲット フィーチャと最も近い結合フィーチャの間の距離が含まれます。このオプションは、[マッチ オプション] で CLOSEST が指定されている場合にのみ有効です。出力フィールドが必要ない場合は、このパラメータは空のままで構いません。 | String |
コードのサンプル
次のスクリプトは、Python ウィンドウで SpatialJoin(空間結合)関数を使用する方法を示しています。
import arcpy target_features = "C:/data/usa.gdb/states" join_features = "C:/data/usa.gdb/cities" out_feature_class = "C:/data/usa.gdb/states_cities" arcpy.SpatialJoin_analysis(target_features, join_features, out_feature_class)
次のスタンドアロン スクリプトは、都市の属性を州に結合するために SpatialJoin(空間結合)関数を使用する方法を示しています。
# Name: SpatialJoin_Example2.py # Description: Join attributes of cities to states based on spatial relationships. # Requirements: os module # Import system modules import arcpy import os # Set local variables workspace = r"C:\gpqa\mytools\spatialjoin\usa.gdb" outWorkspace = r"C:\gpqa\mytools\spatialjoin\output.gdb" # Want to join USA cities to states and calculate the mean city population # for each state targetFeatures = os.path.join(workspace, "states") joinFeatures = os.path.join(workspace, "cities") # Output will be the target features, states, with a mean city population field (mcp) outfc = os.path.join(outWorkspace, "states_mcp2") # Create a new fieldmappings and add the two input feature classes. fieldmappings = arcpy.FieldMappings() fieldmappings.addTable(targetFeatures) fieldmappings.addTable(joinFeatures) # First get the POP1990 fieldmap. POP1990 is a field in the cities feature class. # The output will have the states with the attributes of the cities. Setting the # field's merge rule to mean will aggregate the values for all of the cities for # each state into an average value. The field is also renamed to be more appropriate # for the output. pop1990FieldIndex = fieldmappings.findFieldMapIndex("POP1990") fieldmap = fieldmappings.getFieldMap(pop1990FieldIndex) # Get the output field's properties as a field object field = fieldmap.outputField # Rename the field and pass the updated field object back into the field map field.name = "mean_city_pop" field.aliasName = "mean_city_pop" fieldmap.outputField = field # Set the merge rule to mean and then replace the old fieldmap in the mappings object # with the updated one fieldmap.mergeRule = "mean" fieldmappings.replaceFieldMap(pop1990FieldIndex, fieldmap) # Delete fields that are no longer applicable, such as city CITY_NAME and CITY_FIPS # as only the first value will be used by default x = fieldmappings.findFieldMapIndex("CITY_NAME") fieldmappings.removeFieldMap(x) y = fieldmappings.findFieldMapIndex("CITY_FIPS") fieldmappings.removeFieldMap(y) #Run the Spatial Join tool, using the defaults for the join operation and join type arcpy.SpatialJoin_analysis(targetFeatures, joinFeatures, outfc, "#", "#", fieldmappings)