フィーチャの変更を検出(Detect Feature Changes) (データ管理)
サマリ
アップデート ライン フィーチャがベース ライン フィーチャと空間的にマッチするところを見つけ、空間的な変更または属性の変更(あるいはその両方)および変更なしを検出して、それらの変更に関する情報を伴うマッチしたアップデート フィーチャ、マッチしないアップデート フィーチャ、およびマッチしないベース フィーチャが含まれる出力フィーチャクラスを作成します。
図
![Detect Feature Changes Detect Feature Changes](0017/GUID-93EDC20D-0657-4291-A3D6-6839C73F0A28-web.png)
使用法
-
注意:
すべての入力は、同じ座標系に存在する必要があります。
-
このツールが一般的に使用されるのは、たとえば、ライン フィーチャ(道路)のセットを保持しながら、パートナーから新しい道路フィーチャ セットとしてアップデートを定期的に受け取る場合です。アップデート フィーチャのうちのどれが既存のベース フィーチャに対する変更であるか、どれが追加の新しいフィーチャであるか、どのベース フィーチャが古く、削除すべきであるかを知りたいと思います。このツールは、アップデート ライン データセットとベース ライン データセット間のマッチするフィーチャを見つけ、空間的な変更または属性の変更(あるいはその両方)および変更なしを検出して、フィーチャ変更情報を含む出力フィーチャクラスを作成します。
-
出力フィーチャクラスには、関係するすべてのアップデート フィーチャ(マッチするものとしないもの)、およびマッチしないすべてのベース フィーチャが含まれます。検出された変更に関する情報は、次のフィールドに書き込まれます。
- UPDATE_FID - アップデート フィーチャのフィーチャ ID。マッチしないベース フィーチャでは、この値が -1 になります。
- BASE_FID - ベース フィーチャのフィーチャ ID。マッチしないアップデート フィーチャでは、この値が -1 になります。
- CHANGE_TYPE- 次のような、検出された変更のタイプ。
- 空間の場合は S で、空間的な変更を含む、マッチしたアップデート フィーチャを示します。
- 属性の場合は A で、属性の変更を含む、マッチしたアップデート フィーチャを示します。
- 空間と属性の場合は SA で、空間的な変更と属性の変更の両方を含む、マッチしたアップデート フィーチャを示します。
- 変更なしの場合は 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 つのベース フィーチャとマッチする場合。
- アップデート フィーチャの一部が変更許容範囲から外れている場合。
[変更許容範囲] は、ベース フィーチャの周りのバッファ ゾーンの幅としての役割を果たします。マッチしたすべてのアップデート フィーチャが、この許容範囲に対してチェックされます。アップデート フィーチャのいずれかの部分がこのゾーンから外れている場合は、空間的な変更と見なされます。0 より大きい値を指定すると、出力には次の 2 つの追加フィールドが含まれます。
- LEN_PCT - このフィールドには、パーセント値が格納されます。各パーセント値の計算は、変更許容ゾーンから外れているアップデート フィーチャ部分の長さと、アップデート フィーチャ全体の長さを比較することによって行われます。値 0 はアップデート フィーチャが完全に変更許容ゾーン内にあることを意味し、値 100 はアップデート フィーチャ全体が変更許容ゾーン外にあることを意味します。
- LEN_ABS - このフィールドには、長さの値がフィーチャ単位で格納されます。各値は、変更許容範囲から外れているアップデート フィーチャ部分の絶対長を示します。
属性の変更(変更タイプ A)は、[フィールドの比較] に基づいて検出されます(指定されている場合)。
[フィールドの比較] パラメータに 1 つまたは複数のフィールド ペアを指定すると、マッチしたフィーチャがこれらのフィールドに対してチェックされ、属性の変更があるかどうかが判断されます。テキスト文字列の比較では、大文字と小文字が区別されないため、First St は first st と同じであると見なされます。
マッチしたアップデート フィーチャに対して空間的な変更と属性の変更の両方が検出された場合、そのフィーチャは変更タイプ SA を取得します。マッチしたアップデート フィーチャに対して空間的な変更も属性の変更も検出されない場合、そのフィーチャは変更なしと見なされ、変更タイプ NC を取得します。
-
入力データのすべての領域の範囲は、処理範囲として使用されます。使用されるソース フィーチャとターゲット フィーチャの数は、処理メッセージにレポートされます。
-
フィーチャの照合の精度は、2 つの入力のデータ品質、複雑さ、および類似性に大きく依存します。
前処理でデータ エラーを最小化し、関連するフィーチャを入力として選択する必要があります。一般に、入力データセット内のフィーチャがトポロジ的に正しく、有効なジオメトリを有しており、シングルパートであって重複していないことは、常に役立ちます。そうでない場合、予期しない結果が発生するおそれがあります。
-
出力フィーチャクラスで、検出された変更を確認できます。2 つのデータ ソース間の空間的な相違が大きいことがわかり、一方のデータ ソースをもう一方によりマッチするように調整すべきだと判断することもあります。また、アップデート フィーチャとベース フィーチャ間での属性の割り当てが必要な場合もあります。[結合] ツールセット内のラバーシート処理および属性割り当てのツールは、このような変更を行うために役立ちます。
構文
パラメータ | 説明 | データ タイプ |
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 (オプション) |
空間的な変更があるかどうかを判断するために使用される距離。マッチしたすべてのアップデート フィーチャが、この許容範囲に対してチェックされます。アップデート フィーチャのいずれかの部分がこのゾーンから外れている場合は、空間的な変更と見なされます。0 以上の距離を指定できます。デフォルトは 0 です。0 より大きい値を指定すると、出力に LEN_PCT フィールドと LEN_ABS フィールドが含まれます。優先的に適用される単位を選択することができます。デフォルトはフィーチャ単位です。 | Linear unit |
compare_fields [[source_field, target_field],...] (オプション) |
マッチしたアップデート フィーチャとベース フィーチャの間で属性の変更があるかどうかを判断するためのフィールド。 | Value Table |
コードのサンプル
次の 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 Meterd",
["rdClass", "roadClass"])
次のスタンドアロン スクリプトは、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")