概要
更新ライン フィーチャがベース ライン フィーチャと空間的にマッチするところを見つけ、空間的な変更または属性の変更 (あるいはその両方) および変更なしを検出して、それらの変更に関する情報を伴うマッチした更新フィーチャ、マッチしない更新フィーチャ、およびマッチしないベース フィーチャが含まれる出力フィーチャクラスを作成します。
図
使用法
このツールが一般的に使用されるのは、たとえば、ライン フィーチャ (道路) のセットを保持しながら、別の人から新しい道路フィーチャ セットとして更新を定期的に受け取る場合です。更新フィーチャのうちのどれが既存のベース フィーチャに対する変更であるか、どれが追加の新しいフィーチャであるか、またはどのベース フィーチャが古く、削除すべきであるかを知りたい場合があります。このツールは、更新ライン データセットとベース ライン データセット間のマッチするフィーチャを見つけ、空間的な変更または属性の変更 (あるいはその両方) および変更がないかを検出して、フィーチャ変更情報を含む出力フィーチャクラスを作成します。
出力フィーチャクラスには、関係するすべての更新フィーチャ (マッチするものとしないもの)、およびマッチしないすべてのベース フィーチャが含まれます。検出された変更に関する情報は、次のフィールドに書き込まれます。
- 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 つのベース フィーチャとマッチしていたりします。
- それぞれの一致グループ内では、更新フィーチャまたはベース フィーチャの一部が [変更許容値] に該当しない場合があります。
[変更許容値] は、更新フィーチャまたはベース フィーチャの周りのバッファー ゾーンの幅としての役割を果たします。それぞれの一致グループ内で、すべての更新フィーチャの周りに更新バッファー、すべてのベース フィーチャの周りにベース バッファーが作成されます。すべての更新フィーチャはベース バッファーに対して、すべてのベース フィーチャは更新バッファーに対してチェックされます。更新フィーチャの一部がベース バッファーから外れる場合やベース フィーチャの一部が更新バッファーから外れる場合、あるいはその両方の場合、空間的な変更と見なされます。0 より大きい値を指定すると、出力には次の 2 つの追加フィールドが含まれます。
- LEN_PCT - このフィールドは、一致グループに基づき、長さのパーセンテージ値を格納します。
- LEN_ABS - このフィールドは、一致グループに基づき、長さの絶対値をフィーチャ単位で格納します。
これらのフィールドの値は、以下の条件に応じて、出力フィーチャが属する一致グループに基づいて決定されます。
- 更新フィーチャのみがベース バッファーから外れる場合
- Lu = 更新フィーチャの外部部分の全長。
- Pu (長さの割合) = Lu / 更新フィーチャの全長 * 100。
- LEN_PCT = Pu
- LEN_ABS = Lu
- ベース フィーチャのみが更新バッファーから外れる場合
- Lb = ベース フィーチャの外部部分の全長。
- Pb (長さの割合) = Lb / ベース フィーチャの全長 * 100。
- LEN_PCT = Pb
- LEN_ABS = Lb
- 両方の場合
- Lu と Lb の長さ、および関連するパーセンテージ値が書き込まれます。Lb が書き込まれる場合、上記と同じ理由でマイナス記号が追加されます。
パーセンテージ値は 0 ~ 100 です。0 は、一致グループ内の更新フィーチャとベース フィーチャが完全に変更許容ゾーン内にあることを意味し、100 は、すべての更新フィーチャまたはベース フィーチャが変更許容ゾーンから外れていることを意味します。
LEN_PCT と LEN_ABS の値は、変更が大幅であるかどうかを判断するために役立ちます。値が大きいほど、変更が大幅です。空間的な変更を持つフィーチャだけがこれらの値を取得します。他のフィーチャは -1 を取得します。
属性の変更 (変更タイプ A) は、[比較するフィールド] パラメーターに基づいて検出されます。[比較するフィールド] に 1 つまたは複数のフィールド ペアを指定すると、マッチしたフィーチャがこれらのフィールドに対してチェックされ、属性の変更があるかどうかが判断されます。テキスト文字列の比較では、大文字と小文字が区別されません。つまり、「First St」は、「first st」と同じであると見なされます。マッチした更新フィーチャに対して空間的な変更と属性の変更の両方が検出された場合、そのフィーチャは変更タイプ SA を取得します。マッチした更新フィーチャに対して空間的な変更も属性の変更も検出されない場合、そのフィーチャは変更なしと見なされ、変更タイプ NC を取得します。
ラインの方向の変更 (_LD が付いた変更タイプ) は空間的な変更と見なされ、オプションとして検出できます。
- マッチした更新フィーチャは、前述の空間的な変更の有無に関係なく、1 つまたは複数のマッチしたベース フィーチャとラインの方向が反対の場合、変更タイプ S_LD を取得します。言い換えれば、方向が比較されない場合は、S または NC タイプになります。
- マッチした更新フィーチャは、前述の属性の変更、または空間的な変更と属性の変更の両方に加えて、1 つまたは複数のマッチしたベース フィーチャとラインの方向が反対の場合、変更タイプ SA_LD を取得します。言い換えれば、方向が比較されない場合、A または SA タイプになります。
入力データのすべての領域の範囲が、処理範囲として使用されます。使用されるソース フィーチャとターゲット フィーチャの数は、処理メッセージにレポートされます。
フィーチャの照合の精度は、2 つの入力のデータ品質、複雑さ、および類似性に大きく依存します。
前処理でデータ エラーを最小化し、関連するフィーチャを入力として選択する必要があります。一般に、入力データセット内のフィーチャがトポロジ的に正しく、有効なジオメトリを有しており、シングルパートであって重複していないことは、常に役立ちます。そうでない場合、予期しない結果が発生するおそれがあります。
出力フィーチャクラスで、検出された変更を確認できます。2 つのデータ ソース間の空間的な相違が大きいことがわかり、一方のデータ ソースをもう一方によりマッチするように調整すべきだと判断することもあります。また、更新フィーチャとベース フィーチャ間での属性の割り当てが必要な場合もあります。[結合] ツールセット内のラバーシート処理および属性割り当てのツールは、このような変更を行うために役立ちます。
メモ:
すべての入力は、同じ座標系に存在する必要があります。
構文
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 (オプション) | 空間的な変更があるかどうかを判断するために使用される距離。マッチしたすべての更新フィーチャとベース フィーチャが、この許容範囲に対してチェックされます。更新フィーチャまたはベース フィーチャの一部がマッチしたフィーチャの周囲のゾーン外にある場合、空間的な変更と見なされます。0 以上の距離を指定できます。デフォルトは 0 です。0 より大きい値を指定すると、出力に LEN_PCT フィールドと LEN_ABS フィールドが含まれます。優先的に適用される単位を選択することができます。デフォルトはフィーチャ単位です。 | Linear Unit |
compare_fields [[source_field, target_field],...] (オプション) | マッチした更新フィーチャとベース フィーチャの間で属性の変更があるかどうかを判断するためのフィールド。 | Value Table |
compare_line_direction (オプション) | マッチしたフィーチャのラインの方向を比較するかどうかを指定します。
| Boolean |
コードのサンプル
次の 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 関数をスクリプティング環境で適用する方法の例を示しています。
# 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")
ライセンス情報
- Basic: いいえ
- Standard: いいえ
- Advanced: はい