フィーチャの変更を検出 (Detect Feature Changes) (データ管理)

サマリー

更新ライン フィーチャがベース ライン フィーチャと空間的にマッチするところを見つけ、空間的な変更または属性の変更 (あるいはその両方) および変更なしを検出します。 このツールは、その後、それらの変更に関する情報を伴うマッチした更新フィーチャ、マッチしない更新フィーチャ、およびマッチしないベース フィーチャが含まれる出力フィーチャクラスを作成します。

フィーチャの照合方法の詳細

[フィーチャの変更を検出 (Detect Feature Changes)] ツールの例

使用法

    注意:

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

  • このツールが一般的に使用されるのは、たとえば、ライン フィーチャ (道路) のセットを保持しながら、別の人から新しい道路フィーチャ セットとして更新を定期的に受け取る場合です。 更新フィーチャのうちのどれが既存のベース フィーチャに対する変更であるか、どれが追加の新しいフィーチャであるか、またはどのベース フィーチャが古く、削除すべきであるかを知りたい場合があります。 このツールは、更新ライン データセットとベース ライン データセット間のマッチするフィーチャを見つけ、空間的な変更、属性の変更 、空間的な変更と属性の変更の両方、または変更がないことを検出して、フィーチャ変更情報を含む出力フィーチャクラスを作成します。

  • 出力フィーチャクラスには、関係するすべての更新フィーチャ (マッチするものとしないもの)、およびマッチしないすべてのベース フィーチャが含まれます。 検出された変更に関する情報は、次のフィールドに書き込まれます。

    • UPDATE_FID- 更新フィーチャのフィーチャ ID。 マッチしないベース フィーチャでは、この値が -1 になります。
    • BASE_FID- ベース フィーチャのフィーチャ ID。 マッチしない更新フィーチャでは、この値が -1 になります。
    • CHANGE_TYPE - 次のような値を持つ、検出された変更のタイプ。
      • S - 空間的な変更を含む、マッチした更新フィーチャ。
      • A - 属性の変更を含む、マッチした更新フィーチャ。
      • SA - 空間的な変更と属性の変更の両方を含む、マッチした更新フィーチャ。
      • S_LD - 空間的な変更および反対のライン方向。
      • SA_LD - 空間と属性の変更、および反対のライン方向。
      • NC - 変更を含まない、マッチした更新フィーチャ。
      • N - ベース データにとって新しい、マッチしない更新フィーチャ。
      • D - ベース データからの削除が必要となる可能性がある、マッチしないベース フィーチャ。

  • フィーチャを照合するプロセスは、はじめに [検索距離]、そしてオプションの [照合フィールド] パラメーターの値に基づいて実行されます。 出力照合テーブルを生成して、照合情報を格納できます。

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

    照合候補が見つかると、その候補が地理計測値のセットによって評価され、空間的にマッチすると見なされるほど十分に似ているかどうか判断されます。

    [照合フィールド] パラメーターに 1 つまたは複数のフィールド ペアを指定すると、空間的にマッチすると思われる候補がこれらのフィールド値に対して比較されるため、正しい適合の特定に役立ちます。 たとえば、更新フィーチャとベース フィーチャが両方とも道路名を格納する STREET_NAME フィールドを含み、更新フィーチャが空間的に 2 つのベース フィーチャとマッチするが、1 つのベース候補だけが更新フィーチャと同じ STREET_NAME 値を持つ場合、そのベース候補がよりよい適合となります。 テキスト文字列の比較では、大文字と小文字が区別されません。つまり、「First St」は、「first st」と同じであると見なされます。

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

    出力照合テーブルにおいて、SRC_FID フィールドおよび TGT_FID フィールドの値は、それぞれ更新フィーチャ ID およびベース フィーチャ ID を示します。

  • フィーチャの照合の後、変更を識別するプロセスが実行されます。 マッチしたすべての更新フィーチャの空間的な条件および属性の条件とラインの方向が、対応するベース フィーチャと比較され、それらの CHANGE_TYPE 値が特定されます。

    空間的な変更 (変更タイプ S) は、次のいずれかまたは両方があてはまる場合に検出されます。

    • マッチした更新フィーチャは、トポロジ内の対応するベース フィーチャとは異なります。 たとえば、1 つの更新フィーチャが 2 つのベース フィーチャとマッチしていたりします。
    • それぞれの一致グループ内では、更新フィーチャまたはベース フィーチャの一部が [変更許容値] パラメーターの値に該当しない場合があります。

      [変更許容値] パラメーターの値は、更新フィーチャまたはベース フィーチャの周りのバッファー ゾーンの幅としての役割を果たします。 それぞれの一致グループ内で、すべての更新フィーチャの周りに更新バッファー、すべてのベース フィーチャの周りにベース バッファーが作成されます。 すべての更新フィーチャはベース バッファーに対して比較され、すべてのベース フィーチャは更新バッファーに対して比較されます。 更新フィーチャの一部がベース バッファーから外れる場合やベース フィーチャの一部が更新バッファーから外れる場合、あるいはその両方の場合、空間的な変更と見なされます。 入力データの XY 許容値より大きい値を指定すると、出力に次の新しいフィールドが含まれます。

      • LEN_PCT- このフィールドは、一致グループに基づき、長さのパーセンテージ値を格納します。
      • LEN_ABS- このフィールドは、一致グループに基づき、長さの絶対値をフィーチャ単位で格納します。

      これらのフィールドの値は、以下の条件に応じて、出力フィーチャが属する一致グループに基づいて決定されます。

      • 更新フィーチャのみがベース バッファーから外れる場合:
        • Lu = 更新フィーチャの外部部分の全長。
        • Pu (長さの割合) = Lu / 更新フィーチャの全長 * 100。
        • LEN_PCT = Pu
        • LEN_ABS = Lu
      • ベース フィーチャのみが更新バッファーから外れる場合:
        • Lb = ベース フィーチャの外部部分の全長。
        • Pb (長さの割合) = Lb / ベース フィーチャの全長 * 100。
        • LEN_PCT = Pb
        • LEN_ABS = Lb
      • 両方の場合:
        • LuLb の長さ、および関連するパーセンテージ値が書き込まれます。 Lb が書き込まれる場合、上記と同じ理由でマイナス記号が追加されます。

      パーセンテージ値は 0 ~ 100 です。0 は、一致グループ内の更新フィーチャとベース フィーチャが完全に変更許容ゾーン内にあることを意味し、100 は、すべての更新フィーチャまたはベース フィーチャが変更許容ゾーンから外れていることを意味します。

      LEN_PCTLEN_ABS の値は、変更が大幅であるかどうかを判断するために役立ちます。 値が大きいほど、変更が大幅です。 空間的な変更を持つフィーチャのみに、これらの値が割り当てられます。他のフィーチャには -1 が割り当てられます。

    属性の変更 (変更タイプ A) は、[比較するフィールド] パラメーターの値に基づいて検出されます。 [比較するフィールド] パラメーターに 1 つまたは複数のフィールド ペアを指定すると、マッチしたフィーチャがこれらのフィールドに対して比較され、属性の変更があるかどうかが判断されます。 テキスト文字列の比較では、大文字と小文字が区別されません。つまり、「First St」は、「first st」と同じであると見なされます。 マッチした更新フィーチャに対して空間的な変更と属性の変更の両方が検出された場合、そのフィーチャに、変更タイプ SA が割り当てられます。 マッチした更新フィーチャに対して空間的な変更および属性の変更が検出されない場合、そのフィーチャは変更がないと見なされ、変更タイプ NC が割り当てられます。

    ラインの方向の変更 (S_LD または SA_LD の変更タイプ) は空間的な変更と見なされ、オプションとして検出できます。

    • マッチした更新フィーチャは、前述の空間的な変更の有無に関係なく、1 つまたは複数のマッチしたベース フィーチャとラインの方向が反対の場合、変更タイプ S_LD が割り当てられます。 言い換えれば、方向が比較されない場合は、S または NC タイプになります。
    • マッチした更新フィーチャは、前述の属性の変更、または空間的な変更と属性の変更の両方に加えて、1 つまたは複数のマッチしたベース フィーチャとラインの方向が反対の場合、変更タイプ SA_LD が割り当てられます。 言い換えれば、方向が比較されない場合は、A または SA タイプになります。

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

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

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

  • 出力フィーチャクラスで、検出された変更を確認できます。 2 つのデータ ソース間の空間的な相違が大きいことがわかり、一方のデータ ソースをもう一方によりマッチするように調整すべきだと判断することもあります。 更新フィーチャとベース フィーチャの間で属性を割り当てることもできます。 [補正] ツールセット内のラバーシート処理および属性割り当てのツールを使用して、このような変更を行うことができます。

パラメーター

ラベル説明データ タイプ
更新フィーチャ

ベース フィーチャと比較されるライン フィーチャ。

Feature Layer
ベース フィーチャ

変更を検出するために更新フィーチャと比較されるライン フィーチャ。

Feature Layer
出力フィーチャクラス

変更情報を含む出力ライン フィーチャクラス。 出力には、関係するすべての更新フィーチャ (マッチするものとしないもの)、およびマッチしないすべてのベース フィーチャが含まれます。

Feature Class
検索距離

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

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

更新フィーチャとベース フィーチャからの照合フィールド。 これを指定すると、照合候補に関してフィールドの各対が比較されるため、正しい適合の特定に役立ちます。

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

完全なフィーチャ マッチング情報を含む出力テーブル。

Table
変更許容値
(オプション)

空間的な変更があるかどうかを判断するために使用される距離。 マッチしたすべての更新フィーチャとベース フィーチャが、この許容範囲に対して比較されます。 更新フィーチャまたはベース フィーチャの一部がマッチしたフィーチャの周囲のゾーン外にある場合、空間的な変更と見なされます。 このプロセスを実行するには、入力データの XY 許容値より大きい値を指定する必要があり、出力に LEN_PCT フィールドおよび LEN_ABS フィールドが含まれます。 デフォルトは 0 です。つまり、このプロセスは実行されません。 0 とデータの XY 許容値の間 (0 および XY 許容値を含む) のすべての値は、プロセスを不適切にするため、0 に置き換えられます。 単位を選択することができます。デフォルトはフィーチャ単位です。

Linear Unit
比較するフィールド
(オプション)

マッチした更新フィーチャとベース フィーチャの間に属性の変更が存在するかどうかを決定するフィールド。

Value Table
ラインの方向の比較
(オプション)

マッチしたフィーチャのラインの方向を比較するかどうかを指定します。

  • オフ - マッチしたフィーチャのラインの方向を比較しません。 これがデフォルトです。
  • オン - マッチしたフィーチャのラインの方向を比較します。
Boolean

arcpy.management.DetectFeatureChanges(update_features, base_features, out_feature_class, search_distance, {match_fields}, {out_match_table}, {change_tolerance}, {compare_fields}, {compare_line_direction})
名前説明データ タイプ
update_features

ベース フィーチャと比較されるライン フィーチャ。

Feature Layer
base_features

変更を検出するために更新フィーチャと比較されるライン フィーチャ。

Feature Layer
out_feature_class

変更情報を含む出力ライン フィーチャクラス。 出力には、関係するすべての更新フィーチャ (マッチするものとしないもの)、およびマッチしないすべてのベース フィーチャが含まれます。

Feature Class
search_distance

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

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

更新フィーチャとベース フィーチャからの照合フィールド。 これを指定すると、照合候補に関してフィールドの各対が比較されるため、正しい適合の特定に役立ちます。

Value Table
out_match_table
(オプション)

完全なフィーチャ マッチング情報を含む出力テーブル。

Table
change_tolerance
(オプション)

空間的な変更があるかどうかを判断するために使用される距離。 マッチしたすべての更新フィーチャとベース フィーチャが、この許容範囲に対して比較されます。 更新フィーチャまたはベース フィーチャの一部がマッチしたフィーチャの周囲のゾーン外にある場合、空間的な変更と見なされます。 このプロセスを実行するには、入力データの XY 許容値より大きい値を指定する必要があり、出力に LEN_PCT フィールドおよび LEN_ABS フィールドが含まれます。 デフォルトは 0 です。つまり、このプロセスは実行されません。 0 とデータの XY 許容値の間 (0 および XY 許容値を含む) のすべての値は、プロセスを不適切にするため、0 に置き換えられます。 単位を選択することができます。デフォルトはフィーチャ単位です。

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

マッチした更新フィーチャとベース フィーチャの間に属性の変更が存在するかどうかを決定するフィールド。

Value Table
compare_line_direction
(オプション)

マッチしたフィーチャのラインの方向を比較するかどうかを指定します。

  • NO_COMPARE_DIRECTIONマッチしたフィーチャのラインの方向を比較しません。 これがデフォルトです。
  • COMPARE_DIRECTIONマッチしたフィーチャのラインの方向を比較します。
Boolean

コードのサンプル

DetectFeatureChanges (フィーチャの変更を検出) の例 1 (Python ウィンドウ)

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

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.DetectFeatureChanges_edit("update_Roads.shp",
                                "base_Roads.shp", "output_changes.shp"
                                "25 Feet", #, #, "7.6 Meters",
                                ["rdClass", "roadClass"])
DetectFeatureChanges (フィーチャの変更を検出) の例 2 (スタンドアロン スクリプト)

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

# Name:        DetectFeatureChanges_example_script2.py
# Description: Perform change detection between newly received road data and
#              existing road data and find the number of new roads and the
#              total length of them.
# 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
updateFeatures = "updateRoads"
baseFeatures = "baseRoads"
dfcOutput = "dfc_out"

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

statsTable = "new_roads_stats"

# Perform spatial change detection
arcpy.DetectFeatureChanges_management(updateFeatures, baseFeatures, dfcOutput, search_distance, match_fields)

# ====================================================================================
# Note 1:  The result of DetectFeatureChanges may contain errors; see tool reference.
#          Inspection and editing may be necessary to ensure correct CHANGE_TYPE N, which
#          represents un-matched update feautres, before further calculations.
#
#          One of the quick ways of checking whether the CHANGE_TYPE N features have
#          matching base features is to find their mid-points and use them to search for
#          features in base data, as processed below.
# ====================================================================================

# ======== Check update roads with CHANGE_TYPE N for potential match
# Make Feature Layer with selection of CHANGE_TYPE = 'N' (un-matched update features)
arcpy.MakeFeatureLayer_management(dfcOutput, "sel_N_layer", "CHANGE_TYPE = 'N'")

# Get mid-points of the selected features; the mid-points carry all the attributes.
arcpy.FeatureVerticesToPoints_management("sel_N_layer", "in_memory\midPts", "MID")

# Find nearest base features from the mid-points
arcpy.Near_analysis("in_memory\midPts", baseFeatures, "300 Feet")

# ====================================================================================
# Note 2:  At this point you can manually inspect the midPts by the NEAR_DIST values; 
#          the lower the values, the higher chance (not always) a match was missed in the 
#          dfc process. Delete features from midPts that have found matching base features 
#          before further process.
# ====================================================================================

# Transfer CHANGE_TYPE values from features of midPts to update features
arcpy.JoinField_management(updateFeatures, "OBJECTID", "in_memory\midPts", "UPDATE_FID", "CHANGE_TYPE")

# Get the count of new roads and the total length; the remaining roads have
# Null values for CHANGE_TYPE.
arcpy.Frequency_analysis(updateFeatures, statsTable, "CHANGE_TYPE", "Shape_Length")

関連トピック