属性の割り当て (Transfer Attributes) (編集)

サマリー

ソース ライン フィーチャが空間的にターゲット ライン フィーチャと一致している場所を検索し、指定された属性をソース フィーチャから一致するターゲット フィーチャに割り当てます。

属性の割り当ては、通常、あるデータセット内のフィーチャの属性を別のデータセット内の対応するフィーチャにコピーするために使用されます。 たとえば、道路フィーチャの名前を、以前にデジタイズして保持しているデータセットから、新たに収集した精度の高い新しいデータセット内のフィーチャに割り当てる場合に使用されます。 これら 2 つのデータセットは、通常、ソース フィーチャおよびターゲット フィーチャと呼ばれます。 このツールは、指定された検索距離の範囲内で対応するソース ライン フィーチャとターゲット ライン フィーチャを検索し、指定された属性をソース ラインからターゲット ラインに割り当てます。

属性の割り当て

使用法

    注意:

    このツールを実行すると、入力データが変更されます。 詳細と不要なデータの変更を回避するための方法については、「入力データを変更または更新するツール」をご参照ください。

    注意:

    すべての入力は、同じ座標系に存在する必要があります。

  • 入力データのすべての領域の範囲が、処理範囲として使用されます。使用されるソース フィーチャとターゲット フィーチャの数は、処理メッセージにレポートされます。

  • [割り当てフィールド] パラメーターで、1 つ以上のフィールドを指定する必要があります。 割り当てフィールドの名前がターゲット フィーチャ テーブルのフィールドと同じである場合、割り当てフィールドの名前が他と重複することのないように、名前の末尾に _1 (あるいは _2_3 など) が付加されます。

    複数のソース フィーチャが 1 つ以上のターゲット フィーチャと一致した場合、ソース フィーチャのうちの 1 つのフィールド値のみがターゲット フィーチャに割り当てられます。 ソース フィールドに値がない場合、属性の割り当ては行われません。

  • [検索距離] パラメーターは、一致候補の検索で使用されます。対応するフィーチャ間のずれの大部分を捉えることができるほど十分な大きさの距離を使用しますが、候補が多くなって不必要な処理が発生し、不正な一致が得られる場合があるため、この値を大きくし過ぎないでください。

  • [出力照合テーブル] の指定は任意です。この照合テーブルには、ソース FID とターゲット FID、一致グループ、一致関係、空間と属性の一致条件から得られた一致の信頼度など、フィーチャの完全な一致情報が含まれています。この情報によって、一致状況を理解し、照合後の検査、編集、および解析を容易に行うことができます。詳細は、「フィーチャの照合と照合テーブルについて」をご参照ください。

  • [割り当てルール フィールド] パラメーターは、複数のソース フィーチャが 1 つ以上のターゲット フィーチャと一致した場合に、m:n の一致における属性の割り当て方法を制御するルールを設定します。 ルールが設定されていない場合、一致した最も長いソース フィーチャから属性が割り当てられます。 ただし、割り当てが適切に行われるように、属性ベースのルールを使用できます。それぞれのルールは、フィールド名と値で定義されます。

    次のフィールド タイプとルール値がサポートされています。

    フィールド タイプルール値

    Text

    ソース フィーチャ内に存在する可能性がある文字列値。

    Integer

    ソース フィーチャ内に存在する可能性がある整数、または最大値と最小値を表す [MAX][MIN]

    Date

    最も新しい日付と古い日付を表す [MAX][MIN]

    フィールドとルール値の組は、必要な数だけ指定できます。 ルールは、リストされた順序で適用されます。

    m:n の一致が見つかった場合、ツールは指定されたフィールドとルール値を確認して、次の方法で属性の割り当て元を決定します。

    • m ソース フィーチャの 1 つだけがルール リストの最初のフィールドにあるルール値を持つ場合、そのソース フィーチャが割り当てに使用されます。
    • m ソース フィーチャの複数がルール値を持つ場合や、ルール値を持つソース フィーチャがない場合は、このルールで割り当て元は決まりません。 他のルールが指定されていない場合、最も長いソース フィーチャが割り当てに使用されます。 他のルールが指定されている場合、リスト内の次のルールが確認され、割り当て元が決定されます。
    • すべてのルールが評価されるまで、このプロセスが続けられます。 割り当てに使用するソース フィーチャを決定できない場合、最も長いソース フィーチャが使用されます。

    次の例では、このプロセスの仕組みについて説明します。 ソースとターゲットは 3:1 の一致で、ROAD_NAME フィールドをソースからターゲットに割り当てる必要があります。 デフォルトでは、ソース フィーチャ 3 が 3 つのソース フィーチャの中で最も長いため、割り当てに使用されます。以下の表に示すように、ターゲット フィーチャには ROAD_NAME の値として「West Ave」が割り当てられます。

    次に、フィールド TRAVEL_DIRECTION にルール「One way」、フィールド SPEED_LIMIT にルール「MAX」が設定されていると仮定します。割り当て元になるソース フィーチャを決定するために、ツールは最初に 3 つすべてのソース フィーチャの TRAVEL_DIRECTION の値を評価し、2 つが「One way」と一致していることを見つけます。 次にツールは、これら 2 つのフィーチャの SPEED_LIMIT の値を確認し、最大値が 40 である OBJECTID1」に決定します。 そのため、以下の表に示すように、このフィーチャから ROAD_NAME として「East Ave」がターゲット フィーチャに割り当てられます。

    割り当てルール フィールドの例
  • フィーチャの照合の精度は、データの品質、複雑さ、および 2 つの入力の類似性に依存します。

    前処理でデータ エラーを最小化し、関連するフィーチャを入力として選択する必要があります。一般に、入力データセット内のフィーチャがトポロジ的に正しく、有効なジオメトリを有しており、シングルパートであって重複していないことは、常に役立ちます。そうでない場合、予期しない結果が発生するおそれがあります。

パラメーター

ラベル説明データ タイプ
ソース フィーチャ

属性の割り当て元のライン フィーチャ。

Feature Layer
ターゲット フィーチャ

属性の割り当て先のライン フィーチャ。 指定した割り当てフィールドが、ターゲット フィーチャに追加されます。

Feature Layer
割り当てフィールド

ターゲット フィーチャに割り当てられるソース フィールドのリスト。 1 つ以上のフィールドを指定する必要があります。

Field
検索距離

一致候補の検索に使用される距離。ゼロより大きい距離を指定する必要があります。 優先的に適用される単位を選択することができます。デフォルトはフィーチャ単位です。

Linear Unit
照合フィールド
(オプション)

ソース フィーチャおよびターゲット フィーチャのフィールドのリスト。これを指定すると、照合候補に対して各フィールド ペアがチェックされるため、正しい適合を特定するために役立ちます。

Value Table
出力照合テーブル
(オプション)

完全なフィーチャ照合情報を含む出力テーブル。

Table
割り当てルール フィールド
(オプション)

複数のソース フィーチャがターゲット フィーチャと一致する場合に、属性の割り当てに使用するソース フィーチャを制御するルールを設定します。 割り当てに使用するソース フィーチャは、指定したルール フィールドとルール値によって決定されます。これらは、指定されたリストに表示される順序で、優先度が高から低にランク付けされます。 ルールが指定されていない場合、一致した複数のソース フィーチャの中で最も長いものが割り当てに使用されます。

使用できるルール タイプは次のとおりです。

  • 最小 - 整数または日付フィールドの最小値。 日付フィールドの場合は、最も新しい日付。
  • 最大 - 整数または日付フィールドの最大値。 日付フィールドの場合は、最も古い日付。
  • ソース フィーチャ内に存在する可能性があるテキストまたは整数値。
Value Table

派生した出力

ラベル説明データ タイプ
更新されたターゲット フィーチャ

更新されたターゲット フィーチャ。

Feature Class

arcpy.edit.TransferAttributes(source_features, target_features, transfer_fields, search_distance, {match_fields}, {out_match_table}, {transfer_rule_fields})
名前説明データ タイプ
source_features

属性の割り当て元のライン フィーチャ。

Feature Layer
target_features

属性の割り当て先のライン フィーチャ。 指定した割り当てフィールドが、ターゲット フィーチャに追加されます。

Feature Layer
transfer_fields
[field,...]

ターゲット フィーチャに割り当てられるソース フィールドのリスト。 1 つ以上のフィールドを指定する必要があります。

Field
search_distance

一致候補の検索に使用される距離。ゼロより大きい距離を指定する必要があります。 優先的に適用される単位を選択することができます。デフォルトはフィーチャ単位です。

Linear Unit
match_fields
[[source_field, target_field],...]
(オプション)

ソース フィーチャおよびターゲット フィーチャのフィールドのリスト。これを指定すると、照合候補に対して各フィールド ペアがチェックされるため、正しい適合を特定するために役立ちます。

Value Table
out_match_table
(オプション)

完全なフィーチャ照合情報を含む出力テーブル。

Table
transfer_rule_fields
[[field, rule],...]
(オプション)

複数のソース フィーチャがターゲット フィーチャと一致する場合に、属性の割り当てに使用するソース フィーチャを制御するルールを設定します。 割り当てに使用するソース フィーチャは、指定したルール フィールドとルール値によって決定されます。これらは、指定されたリストに表示される順序で、優先度が高から低にランク付けされます。 ルールが指定されていない場合、一致した複数のソース フィーチャの中で最も長いものが割り当てに使用されます。

使用できるルール タイプは次のとおりです。

  • 最小 - 整数または日付フィールドの最小値。 日付フィールドの場合は、最も新しい日付。
  • 最大 - 整数または日付フィールドの最大値。 日付フィールドの場合は、最も古い日付。
  • ソース フィーチャ内に存在する可能性があるテキストまたは整数値。
Value Table

派生した出力

名前説明データ タイプ
out_feature_class

更新されたターゲット フィーチャ。

Feature Class

コードのサンプル

TransferAttributes の例 1 (Python ウィンドウ)

次の Python ウィンドウ スクリプトは、イミディエイト モードで TransferAttributes 関数を使用する方法を示しています。

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.edit.TransferAttributes("source_Roads.shp",
                              "target_Roads.shp", ["RoadName", "PaveType"],
                              "25 Feet")
TransferAttributes の例 2 (スタンドアロン スクリプト)

次のスタンドアロン スクリプトは、TransferAttributes 関数をスクリプティング環境で適用する方法の例を示しています。

# Name:        TransferAttributes_example_script2.py
# Description: Performs attribute transfer from newly updated roads (source) to existing
#              base roads (target). Where the source and target features are matched in
#              many-to-one or many-to-many (m:n) relationships, attributes are transferred 
#              from only one of the m source features to the n target features. This script
#              includes a post-process that flags resulting target features with the m:n
#              match relationships. You can inspect the flagged features and retrieve the
#              attributes from the desired source features if necessary.
# Author:      Esri
# -----------------------------------------------------------------------

# Import system modules
import arcpy
from arcpy import env

# Set environment settings
env.overwriteOutput = True
env.workspace = r"D:\conflationTools\ScriptExamples\data.gdb"

# Set local variables
sourceFeatures = "updateRoads"
targetFeatures = "baseRoads"
transfer_fields = "RD_NAME; RD_ID"

search_distance = "300 Feet"
match_fields = "RD_NAME FULLNAME"

outMatchTable = "ta_mtbl"

# Make a copy of the targetFeatures for attribute transfer
targetCopy = targetFeatures + "_Copy"
arcpy.CopyFeatures_management(targetFeatures, targetCopy)

# Performs attribute transfer
arcpy.TransferAttributes_edit(sourceFeatures, targetCopy, transfer_fields, search_distance, match_fields, outMatchTable)

# ====================================================================================
# Note 1:  The result of TransferAttributes may contain errors; see tool reference.
#          Additional analysis steps may be necessary to check the results; these steps
#          are not included in this script.
#
#          The following process identifies m:n matches between source and target features 
#          and flag features in targetCopy for inspection.
# ====================================================================================

# Add a field srcM_inMN to the match table to store the m count of source features in m:n relationship
field_srcM_inMN = "srcM_inMN"
arcpy.AddField_management(outMatchTable, field_srcM_inMN)

codeblock = """
def getM(fld):
    x = fld.split(\":\")[0]
    if x.isnumeric():
        if int(x) > 0:
            return int(x)
    return -1
"""

# Calculate values for srcM_inMN
arcpy.CalculateField_management(outMatchTable, field_srcM_inMN, "getM(!FM_MN!)", "PYTHON_9.3", codeblock)

# Make a table view of the match table, selecting srcM_inMN values greater than 1 
# (excluding 1:n relationships which don't need to be inspected)
arcpy.MakeTableView_management(outMatchTable, "mtable_view", field_srcM_inMN + "> 1")

# For the selected records, transfer srcM_inMN and SRC_FID fields and values to the targetCopy
arcpy.JoinField_management(targetCopy, "OBJECTID", "mtable_view", "TGT_FID", field_srcM_inMN + "; SRC_FID")

# ====================================================================================
# Note 2:  Now the fields srcM_inMN and SRC_FID are in the copy of the target features.
#          The srcM_inMN values are the counts of matched source features; the SRC_FID
#          values indicate the source feature IDs from which the transferred attributes
#          come from.
#
#          At this point you can interactively review the transferred attributes for the
#          flagged features. If you want to replace any of them by those from a different
#          source feature, you would need to make the edits as needed.
# ====================================================================================
TransferAttributes の例 3 (スタンドアロン スクリプト)

次のスタンドアロン スクリプトは、割り当てルールを使用して TransferAttributes 関数をスクリプティング環境で適用する方法の例を示しています。

# Name:        TransferAttributes_example_script3.py
# Description: Performs attribute transfer from newly updated roads (source) to
#              existing base roads (target). Where the source and target
#              features are matched in many-to-one or many-to-many (m:n)
#              relationships, attributes can be transferred based on transfer
#              rules. This script shows how transfer rules are set.
# ------------------------------------------------------------------------------

# Import system modules
import arcpy

# Set environment settings
arcpy.env.overwriteOutput = True
arcpy.env.workspace = r"D:\conflationTools\ScriptExamples\data.gdb"

try:
    # Set local variables
    sourceFeatures = "updateRoads"
    targetFeatures = "baseRoads"
    transfer_fields = "RD_NAME"

    search_distance = "300 Feet"
    match_fields = ""
    outMatchTable = ""
    transfer_rules = ["TRAVEL_DIRECTION One-Way", "SPEED_LIMIT MAX"]

    # Make a copy of the targetFeatures for attribute transfer
    targetCopy = targetFeatures + "_Copy"
    arcpy.management.CopyFeatures(targetFeatures, targetCopy)

    # Performs attribute transfer
    arcpy.edit.TransferAttributes(sourceFeatures, targetCopy, transfer_fields,
                                  search_distance, match_fields, outMatchTable,
                                  transfer_rules)

except arcpy.ExecuteError as aex:
    print(arcpy.GetMessages(2))
    
except Exception as ex:
    print(ex.args[0])

ライセンス情報

  • Basic: No
  • Standard: No
  • Advanced: Yes

関連トピック