照合によるラインの分割 (Split Line By Match) (編集)

サマリー

対応関係に優れたライン セグメンテーションを取得するために、一致リレーションシップに基づいて入力フィーチャを分割します。

2 つの異なるデータ セット (たとえば、市道と州道) のライン フィーチャを処理するとき、フィーチャが多対多 (m:n) ではなく 1:1 の一致リレーションシップにあると、ソースから他のソースへの属性割り当てなどの結合タスクに役立ちます。 このツールは、m:n の一致を複数の 1:1 のマッチに変換することを目的にしています。

入力フィーチャおよび一致するフィーチャは、[フィーチャの変更を検出 (Detect Feature Changes)] ツールなど、フィーチャの照合に基づく結合ツールのいずれかにより、生成された照合テーブルと事前に一致する必要があります。 照合テーブルに記録された一致リレーションシップは、ソース フィーチャとターゲット フィーチャの間のリレーションシップです。

一致グループごとに、ツールは一致するフィーチャのノード条件に基づいて入力フィーチャを分割します。 ノードは、ラインのダングル終点、2 つのライン間の疑似ノード、または複数ラインのジャンクションです。 たとえば、1:2 の一致グループは 1 つのソース フィーチャが 2 つのターゲット フィーチャに一致したことを意味し、2 つのターゲット フィーチャは疑似ノードで連結します。 ツールは、疑似ノード近くの位置で入力ラインを分割します。 これは、次のラウンドのフィーチャ照合が結合のニーズに合わせて複数の 1:1 のマッチを生成するように、ソース ラインとターゲット ラインの対応を向上させるためです。

照合によるラインの分割の図

使用法

  • 出力フィーチャクラスには、分割されたまたは変更されていない入力フィーチャとその属性がすべて含まれています。 以下のフィールドが追加されます。

    • ORIG_FID- 入力のフィーチャ ID。
    • SBM_LnFlag- 次の値を格納します。
      • Split - 分割されたライン。
      • Not split - 変更されていない入力ライン。
      • Short match group - [一致とする最小グループ長] パラメーター条件を満たしていないため、プロセスに追加できないライン。

    ラインが分割されたまたは分割されなかった位置を格納するために、オプションのポイント フィーチャクラスが生成されます。 これらのポイントを使用すると、必要に応じて、結果を検証できます。 この出力には、以下のフィールドが含まれます。

    • ORIG_FID- 分割位置にある入力のフィーチャ ID。
    • SBM_PtFlag- 次の値を格納します。
      • At vertex - 入力ラインが既存の頂点で分割された位置。
      • At nearest - 一致するフィーチャ上のノードから最も近い位置で入力ラインが分割された位置。
      • Short segment - 指定された [最小分割長] に従って入力ラインを分割できない位置。
      • Out of range - 候補の分割位置が検索距離を超えているため、入力ラインを分割できない位置。 このような位置の一部は、ポスト処理としてラインを分割するために引き続き使用される場合があります。

      検証時に、[ポイントでラインを分割 (Split Line at Point)] ツールを使用して、Short segment または Out of range としてフラグが付けられたポイントによって、追加のラインが分割されることがあります。

  • [検索距離] パラメーターは、一致するフィーチャ上のノードから入力ラインを分割する候補位置を見つけるために使用されます。 一致するフィーチャ上のノードにより近い分割位置を見つけられるようにするために、ノードが入力フィーチャにどの程度近いかによって、内部距離値が取得されます。 得られた距離が検索距離の 1/3 より短い場合、得られた距離は検索距離の 1/3 に設定されます。 得られた距離が検索距離より長い場合、得られた距離は検索距離に設定されます。 得られた距離値がそれらの間にある場合、その値が使用されます。 したがって、指定された検索距離は使用する最大値となります。 たとえば、検索距離として 90 メートルを指定すると、プロセスで使用される得られた距離値は、30 メートル、90 メートル、およびその間の値になります。

    適切な検索距離を設定することが重要です。 事前照合で使用した値を使用してもかまいません。 検索距離が長くなると、入力ラインの分割により遠くの頂点が使用され、より遠くの入力ノードが見つかり、分割されなくなる可能性が高くなります。

  • 内部で得られた検索距離は、一致するフィーチャ上のノードから入力フィーチャ上の候補位置を見つけるために使用されます。 入力ラインを分割するかどうか、分割する場合はどこで分割するかを決定するために、以下のルールが使用されます。

    • 疑似一致ノードが疑似入力ノードを見つけた場合、分割は発生しません。
    • 非疑似一致ノードが入力ノードを見つけた場合、分割は発生しません。 たとえば、ダングル一致ノードが T ジャンクションで入力ノードを見つけた場合、その入力ノードは分割されません。
    • それ以外の場合、入力フィーチャは、見つかった頂点、または見つかった最寄りの頂点で分割されます。頂点が見つからなかった場合は、入力ラインの最寄りの位置で分割されます。 ただし、疑似一致ノードが非疑似入力ノードを見つけた場合、入力ラインは常に分割されます。

  • ダングル ラインは、[ダングル フィーチャの分割] パラメーターを使用して分割できます。 入力ダングル ラインがダングル終点の一致するフィーチャを超える場合、デフォルトで分割されます。 後続するフィーチャの照合でソース フィーチャとターゲット フィーチャの実際の差異を特定するために、ダングル ラインを分割できます。

  • [一致とする最小グループ長] パラメーターを使用すると、指定された値を基準として、分割には短すぎる一致グループを除外できます。 指定した一致グループでは、入力フィーチャの全長および一致するフィーチャの全長が両方とも指定した値よりも小さい場合、グループが除外されます。 過剰または不十分な分割を防ぐために、短い一致グループ内のフィーチャの分割は避けてください。 短い一致グループ内の関係する入力ラインはすべて、出力に書き込まれ、SBM_LnFlag フィールドで Short match group のフラグが付けられます。

  • [最小分割長] パラメーターを使用すると、短いラインが生成されないようにすることができます。 入力ラインの分割によりこの値よりも短いラインが生成される場合、入力ラインは分割されません。 SBM_PtFlag フィールドで Short segment としてフラグが付けられた分割位置のポイントは、指定した場合は検証の参照として、ポイント フィーチャクラスに書き込まれます。

  • [スプリット フィールド] パラメーターを使用すると、長さを計測するフィールドなど、1 つ以上の数値フィールドを指定して、その値を分割ラインの割合に基づいて分割できます。

パラメーター

ラベル説明データ タイプ
入力フィーチャ

分割される入力ライン フィーチャ。 一致するフィーチャと事前に一致する必要があります。

Feature Layer
一致するフィーチャ

一致するフィーチャは、入力フィーチャの分割時に参照として使用されます。 入力フィーチャと事前に一致する必要があります。

Feature Layer
入力照合テーブル

入力フィーチャと一致するフィーチャの間の照合情報を含むテーブル。

Table View
出力フィーチャクラス

分割ラインおよび分割されない元のラインを含む出力フィーチャクラス。

Feature Class
検索距離

分割位置を決定するために使用される距離値。 0 より大きい値を指定する必要があります。 単位を指定しない場合、入力の単位が使用されます。

Linear Unit
照合する入力フィーチャ
(オプション)

照合テーブル内の入力フィーチャがソース フィーチャかターゲット フィーチャかを指定します。したがって、正しいフィーチャが分割されます。

  • ソース フィーチャとして入力フィーチャは、ソース フィーチャとして照合テーブルに格納されます。 これがデフォルトです。
  • ターゲット フィーチャとして入力フィーチャは、ターゲット フィーチャとして照合テーブルに格納されます。
String
出力分割ポイント
(オプション)

分割位置を表すポイントを含む出力ポイント フィーチャクラス。

Feature Class
ダングル フィーチャの分割
(オプション)

ダングル ラインを分割するかどうかを指定します。

  • オン - ツールの分割ルールに従って、ダングルを分割します。 これがデフォルトです。
  • オフ - ダングル ラインを分割しません
Boolean
一致とする最小グループ長
(オプション)

指定した一致グループは、入力フィーチャの全長または一致するフィーチャの全長のいずれかが指定した値よりも大きい場合に、分割プロセスに追加されます。

Linear Unit
最小分割長
(オプション)

分割により分割部分の 1 つまたは両方が指定した値より短くなる場合は、分割は発生しません。

Linear Unit
スプリット フィールド
(オプション)

入力フィーチャからの数値フィールドのリスト。 フィールド値は分割ラインの割合に基づきます。

Field

arcpy.edit.SplitLineByMatch(in_features, matched_features, in_match_table, out_feature_class, search_distance, {in_features_as}, {out_point_feature_class}, {split_dangle}, {min_match_group_length}, {min_split_length}, {split_fields})
名前説明データ タイプ
in_features

分割される入力ライン フィーチャ。 一致するフィーチャと事前に一致する必要があります。

Feature Layer
matched_features

一致するフィーチャは、入力フィーチャの分割時に参照として使用されます。 入力フィーチャと事前に一致する必要があります。

Feature Layer
in_match_table

入力フィーチャと一致するフィーチャの間の照合情報を含むテーブル。

Table View
out_feature_class

分割ラインおよび分割されない元のラインを含む出力フィーチャクラス。

Feature Class
search_distance

分割位置を決定するために使用される距離値。 0 より大きい値を指定する必要があります。 単位を指定しない場合、入力の単位が使用されます。

Linear Unit
in_features_as
(オプション)

照合テーブル内の入力フィーチャがソース フィーチャかターゲット フィーチャかを指定します。したがって、正しいフィーチャが分割されます。

  • AS_SOURCE入力フィーチャは、ソース フィーチャとして照合テーブルに格納されます。 これがデフォルトです。
  • AS_TARGET入力フィーチャは、ターゲット フィーチャとして照合テーブルに格納されます。
String
out_point_feature_class
(オプション)

分割位置を表すポイントを含む出力ポイント フィーチャクラス。

Feature Class
split_dangle
(オプション)

ダングル ラインを分割するかどうかを指定します。

  • SPLIT_DANGLEツールの分割ルールに従って、ダングルを分割します。 これがデフォルトです。
  • NO_SPLIT_DANGLEダングル ラインを分割しません。
Boolean
min_match_group_length
(オプション)

指定した一致グループは、入力フィーチャの全長または一致するフィーチャの全長のいずれかが指定した値よりも大きい場合に、分割プロセスに追加されます。

Linear Unit
min_split_length
(オプション)

分割により分割部分の 1 つまたは両方が指定した値より短くなる場合は、分割は発生しません。

Linear Unit
split_fields
[split_field,...]
(オプション)

入力フィーチャからの数値フィールドのリスト。 フィールド値は分割ラインの割合に基づきます。

Field

コードのサンプル

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

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

import arcpy
arcpy.env.workspace = "C:/data/roads.gdb"
arcpy.edit.SplitLineByMatch("city_Roads", "county_Roads", "match_table",
                            "city_roads_split", "50 Meters")
SplitLineByMatch の例 2 (スタンドアロン スクリプト)

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

# Name:        SplitLineByMatch_example_script2.py
# Description: Use DetectFeatureChanges to get initial matching and then use
#              SplitLineByMatch to split the source and target to improve spatial
#              correspondence. 
#              Finally use TransferAttributes to transfer a field value from the
#              split source to the split target features.
# Author:      Esri
# -----------------------------------------------------------------------

# Import system modules
import arcpy
from arcpy import env

# Set environment settings
env.overwriteOutput = True
env.workspace = r"D:\conflation\Tools\splitlinebym\roads.gdb" #r"D:\conflation\roads.gdb"

try:
    # Set local variables
    sourceFeatures = "sourceRoads"
    targetFeatures = "targetRoads"

    dfcOutput = "DFC"
    searchDistance = "100 Feet"
    dfcMatchTable = "DFC_mtable"

    slbmSourceOutput = "out_source"
    slbmSourceOutputPts = "out_sourcePoints"
    slbmTargetOutput = "out_target"
    slbmTargetOutputPts = "out_targetPoints"
    dangle = "SPLIT_DANGLE"
    minSplitLength = "300 Feet"

    transfer_fields = "Mile_Length"

    # User Detect Feature Changes tool to generate the needed match table
    arcpy.management.DetectFeatureChanges(sourceFeatures, targetFeatures, dfcOutput, searchDistance, dfcMatchTable)

    # Use Split Line By Match tool twice to split source and then target features to improve spatial correspondence
    arcpy.edit.SplitLineByMatch(sourceFeatures, targetFeatures, dfcMatchTable, slbmSourceOutput, searchDistance,
                                "AS_SOURCE", slbmSourceOutputPts, dangle, "", minSplitLength)

    arcpy.edit.SplitLineByMatch(targetFeatures, sourceFeatures, dfcMatchTable, slbmTargetOutput, searchDistance,
                                "AS_TARGET", slbmTargetOutputPts, dangle, "", minSplitLength)

    # Perform attribute transfer using the split results
    arcpy.edit.TransferAttributes(slbmSourceOutput, slbmTargetOutput, transfer_fields, searchDistance)

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

ライセンス情報

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

関連トピック