Linie nach Zuordnung teilen (Editing)

Zusammenfassung

Features werden basierend auf Zuordnungsbeziehungen geteilt, um eine besser übereinstimmende Liniensegmentierung zu erhalten.

Bei der Arbeit mit Linien-Features in zwei verschiedenen Datasets (z. B. Straßen innerorts und Bundesstraßen) ist es vorteilhaft, Features mit der Zuordnungsbeziehung Eins-zu-Eins (1:1) anstelle von Viele-zu-Viele (m:n) für Zusammenführungen zu verwenden, beispielsweise bei der Attributübertragung von einer Quelle in die andere. Mit diesem Werkzeug können m:n-Zuordnungen in mehr 1:1-Zuordnungen umgewandelt werden.

Die Eingabe-Features und die zugeordneten Features müssen vorab von einem auf Feature-Zuordnung basierenden Zusammenführungswerkzeug zugeordnet werden, z. B. Feature-Änderungen erkennen. Dabei muss auch eine Zuordnungstabelle erstellt werden. Die Zuordnungsbeziehungen, die in der Zuordnungstabelle aufgezeichnet werden, bestehen zwischen Quell- und Ziel-Features.

Das Werkzeug teilt die Eingabe-Features für jede Zuordnungsgruppe basierend auf den Knotenbedingungen in den zugeordneten Features. Bei einem Knoten kann es sich um ein unverbundenes Linienende, einen Pseudo-Node zwischen zwei Linien oder um den Schnittpunkt von mehreren Linien handeln. Eine 1:2-Zuordnungsgruppe etwa bedeutet, dass ein Quellen-Feature zwei Ziel-Features zugeordnet wird und die zwei Ziel-Features an einem Pseudo-Node miteinander verbunden sind. Mit diesem Werkzeug wird die Eingabelinie an einer Position in der Nähe des Ziel-Pseudo-Nodes geteilt. Dadurch ergeben sich bessere Entsprechungen von Quell- und Ziellinien, sodass bei der nächsten Feature-Zuordnung mehr 1:1-Zuordnungen für die Zusammenführung erzeugt werden.

Abbildung

Abbildung zum Werkzeug "Linie nach Zuordnung teilen"

Verwendung

  • Die Ausgabe-Feature-Class enthält alle Eingabe-Features, die geteilt oder unverändert gelassen wurden, sowie alle zugehörigen Attribute. Die folgenden Felder werden hinzugefügt:

    • ORIG_FID: Die Feature-IDs der Eingabe.
    • SBM_LnFlag: Speichert die folgenden Werte:
      • Split: Linien, die geteilt wurden.
      • Not split: Eingabelinien, die nicht geändert wurden.
      • Short match group: Linien, die nicht in den Prozess einbezogen werden können, weil sie nicht dem Wert des Parameters Minimale Länge von Zuordnungsgruppen entsprechen.

    Optional kann eine Point-Feature-Class generiert werden, um Positionen zu speichern, an denen Linien geteilt wurden oder nicht geteilt werden konnten. Anhand dieser Punkte kann das Ergebnis überprüft werden. Die Ausgabe enthält die folgenden Felder:

    • ORIG_FID: Die Feature-IDs der Eingabe an den Teilungspositionen.
    • SBM_PtFlag: Speichert die folgenden Werte:
      • At vertex: Positionen, an denen eine Eingabelinie an einem vorhandenen Stützpunkt geteilt wurde.
      • At nearest: Positionen, an denen eine Eingabelinie an der Stelle, die dem Knoten auf den zugeordneten Features am nächsten liegt, geteilt wurde.
      • Short segment: Positionen, an denen eine Eingabelinie aufgrund des für Minimale Teilungslänge festgelegten Wertes nicht geteilt werden kann.
      • Out of range: Positionen, an denen eine Eingabelinie nicht geteilt werden kann, da sich die potenzielle Teilungsposition außerhalb der Suchentfernung befindet. Einige dieser Positionen können verwendet werden, um die Linien zu einem späteren Zeitpunkt zu teilen.

      Bei einer Überprüfung kann sich herausstellen, dass weitere Linien an Punkten, die als Short segment oder Out of range gekennzeichnet wurden, mit dem Werkzeug Linie an Punkt teilen geteilt werden können.

  • Der Parameter Suchentfernung dient dazu, potenzielle Positionen für die Teilung einer Eingabelinie an einem Knoten in den zugeordneten Features zu ermitteln. Damit eher eine Teilungsposition möglichst nahe an einem Knoten in den zugeordneten Features gefunden werden kann, wird ein interner Entfernungswert abgeleitet, der davon abhängt, wie nahe ein Knoten bei einem Eingabe-Feature liegt. Wenn die abgeleitete Entfernung weniger als ein Drittel der Suchentfernung beträgt, wird die abgeleitete Entfernung auf ein Drittel der Suchentfernung festgelegt. Wenn die abgeleitete Entfernung mehr als ein Drittel der Suchentfernung beträgt, wird als abgeleiteter Entfernungswert die Suchentfernung festgelegt. Alle abgeleiteten Entfernungswerte, die dazwischen liegen, werden unverändert verwendet. Die angegebene Suchentfernung ist der zu verwendende Maximalwert. Wenn Sie beispielsweise eine Suchentfernung von 90 Metern angeben, werden abgeleitete Entfernungswerte von 30 Metern, 90 Metern und beliebigen Werten dazwischen im Vorgang verwendet.

    Es ist wichtig, eine geeignete Suchentfernung festzulegen. Der Wert, der in der vorab erfolgten Zuordnung verwendet wurde, kann eine gute Wahl darstellen. Je größer die Suchentfernung, desto eher wird ein weiter weg liegender Stützpunkt zur Teilung einer Eingabelinie verwendet oder ein weiter entfernter Eingabeknoten gefunden, was dazu führt, dass keine Teilung stattfinden kann.

  • Die intern abgeleitete Suchentfernung wird verwendet, um potenzielle Positionen im Eingabe-Feature an einem Knoten in den zugeordneten Features zu ermitteln. Mit den folgenden Regeln wird bestimmt, ob und ggf. wo die Eingabelinie geteilt werden soll:

    • Wenn von einem zugeordneten Pseudo-Node ein Eingabe-Pseudo-Node gefunden wird, findet keine Teilung statt.
    • Wenn von einem zugeordneten Nicht-Pseudo-Node ein Eingabeknoten gefunden wird, findet keine Teilung statt. Wenn beispielsweise von einem freien Zuordnungsknoten ein Eingabeknoten an einem T-Knoten gefunden wird, findet keine Teilung der Eingabelinie statt.
    • Das Eingabe-Feature wird dagegen am einzigen bzw. nächstgelegenen ermittelten Stützpunkt geteilt oder, falls kein Stützpunkt gefunden wird, an der nächstgelegenen Position auf der Eingabelinie. Wenn ein zugeordneter Pseudo-Node dagegen auf einen Nicht-Pseudo-Eingabe-Node trifft, wird die Eingabelinie geteilt.

  • Unverbundene Linien können mit dem Parameter Dangle-Features teilen geteilt werden. Wenn eine unverbundene Eingabelinie über das zugeordnete Feature am freien Ende hinausreicht, wird es standardmäßig geteilt. Eine unverbundene Linie kann geteilt werden, um die tatsächliche Entfernung zwischen den Quell- und Ziel-Features in der folgenden Feature-Zuordnung zu identifizieren.

  • Mit dem Parameter Minimale Länge von Zuordnungsgruppen werden Gruppen ausgeschlossen, wenn diese Linien enthalten, die zu kurz sind, um relativ zum angegebenen Wert geteilt zu werden. Wenn in einer bestimmten Zuordnungsgruppe sowohl die Gesamtlänge des Eingabe-Features als auch die Gesamtlänge des zugeordneten Features kleiner als der angegebene Wert ist, wird die Gruppe ausgeschlossen. Eine Teilung von Features sollte in Gruppen mit unzureichenden Linien vermieden werden, damit nicht zu viele oder fehlerhafte Teilungen durchgeführt werden. Alle Eingabelinien in Gruppen mit unzureichenden Linien werden in die Ausgabe geschrieben und im Feld SBM_LnFlag mit Short match group gekennzeichnet.

  • Mit dem Parameter Minimale Teilungslänge kann die Erzeugung unzureichender Linien verhindert werden. Wenn die Teilung einer Eingabelinie eine Linie ergibt, die kürzer als dieser Wert ist, wird die Eingabelinie nicht geteilt. Ein Punkt an der Teilungsposition, der im Feld SBM_PtFlag als Short segment gekennzeichnet wurde, wird als Referenz für die Überprüfung in die Point-Feature-Class geschrieben, falls angegeben.

  • Mit dem Parameter Teilungsfeld(er) werden ein oder mehrere numerische Felder angegeben (z. B. eine Feldlänge), um die zugehörigen Werte basierend auf den Proportionen der Teilungslinien zu teilen.

Parameter

BeschriftungErläuterungDatentyp
Eingabe-Features

Die Eingabe-Linien-Features, die geteilt werden sollen. Sie müssen vorab mit den zugeordneten Features abgeglichen werden.

Feature Layer
Zugeordnete Features

Die Features, die vorab mit den Eingabe-Features abgeglichen wurden. Zugeordnete Features werden bei der Teilung der Eingabe-Features als Referenz verwendet.

Feature Layer
Eingabe-Zuordnungstabelle

Eine Tabelle mit Informationen zu Zuordnungsbeziehungen zwischen Eingabe- und Zuordnungs-Features.

Table View
Ausgabe-Feature-Class

Die Ausgabe-Feature-Class mit geteilten Linien und ursprünglichen ungeteilten Linien.

Feature Class
Suchentfernung

Der Entfernungswert, mit dem Teilungspositionen ermittelt werden. Der Wert muss größer als 0 sein. Falls keine Einheiten angegeben sind, werden die Eingabeeinheiten verwendet.

Linear Unit
Eingabe-Features in Zuordnung
(optional)

Gibt an, ob es sich bei den Eingabe-Features in der Zuordnungstabelle um Quell-Features oder Ziel-Features handelt, damit die richtigen Features geteilt werden.

  • Als Quell-FeaturesDie Eingabe-Features werden als Quell-Features in der Zuordnungstabelle gespeichert. Dies ist die Standardeinstellung.
  • Als Ziel-FeaturesDie Eingabe-Features werden als Ziel-Features in der Zuordnungstabelle gespeichert.
String
Ausgabe-Teilungspunkte
(optional)

Die Ausgabe-Point-Feature-Class mit Punkten, die Teilungspositionen darstellen.

Feature Class
Dangle-Features teilen
(optional)

Gibt an, ob unverbundene Linien geteilt werden sollen.

  • Aktiviert: Unverbundene Linien werden gemäß den Teilungsregeln des Werkzeugs geteilt. Dies ist die Standardeinstellung.
  • Deaktiviert: Unverbundene Linien werden nicht geteilt.
Boolean
Minimale Länge von Zuordnungsgruppen
(optional)

Die minimale Länge, die eine Zuordnungsgruppe aufweisen darf. Eine bestimmte Zuordnungsgruppe wird nur dann in den Teilungsprozess einbezogen, wenn die Gesamtlänge der Eingabe-Features oder die Gesamtlänge der zugeordneten Features größer als der angegebene Wert ist.

Linear Unit
Minimale Teilungslänge
(optional)

Die minimale Länge, die ein geteiltes Feature aufweisen darf. Wenn eine Teilung dazu führt, dass ein oder beide geteilten Features kürzer als der angegebene Wert sind, findet die Teilung nicht statt.

Linear Unit
Teilungsfeld(er)
(optional)

Eine Liste von numerischen Feldern aus den Eingabe-Features. Die Feldwerte basieren auf den Proportionen der geteilten Linien.

Field

arcpy.management.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})
NameErläuterungDatentyp
in_features

Die Eingabe-Linien-Features, die geteilt werden sollen. Sie müssen vorab mit den zugeordneten Features abgeglichen werden.

Feature Layer
matched_features

Die Features, die vorab mit den Eingabe-Features abgeglichen wurden. Zugeordnete Features werden bei der Teilung der Eingabe-Features als Referenz verwendet.

Feature Layer
in_match_table

Eine Tabelle mit Informationen zu Zuordnungsbeziehungen zwischen Eingabe- und Zuordnungs-Features.

Table View
out_feature_class

Die Ausgabe-Feature-Class mit geteilten Linien und ursprünglichen ungeteilten Linien.

Feature Class
search_distance

Der Entfernungswert, mit dem Teilungspositionen ermittelt werden. Der Wert muss größer als 0 sein. Falls keine Einheiten angegeben sind, werden die Eingabeeinheiten verwendet.

Linear Unit
in_features_as
(optional)

Gibt an, ob es sich bei den Eingabe-Features in der Zuordnungstabelle um Quell-Features oder Ziel-Features handelt, damit die richtigen Features geteilt werden.

  • AS_SOURCEDie Eingabe-Features werden als Quell-Features in der Zuordnungstabelle gespeichert. Dies ist die Standardeinstellung.
  • AS_TARGETDie Eingabe-Features werden als Ziel-Features in der Zuordnungstabelle gespeichert.
String
out_point_feature_class
(optional)

Die Ausgabe-Point-Feature-Class mit Punkten, die Teilungspositionen darstellen.

Feature Class
split_dangle
(optional)

Gibt an, ob unverbundene Linien geteilt werden sollen.

  • SPLIT_DANGLEUnverbundene Linien werden gemäß den Teilungsregeln des Werkzeugs geteilt. Dies ist die Standardeinstellung.
  • NO_SPLIT_DANGLEUnverbundene Linien werden nicht geteilt.
Boolean
min_match_group_length
(optional)

Die minimale Länge, die eine Zuordnungsgruppe aufweisen darf. Eine bestimmte Zuordnungsgruppe wird nur dann in den Teilungsprozess einbezogen, wenn die Gesamtlänge der Eingabe-Features oder die Gesamtlänge der zugeordneten Features größer als der angegebene Wert ist.

Linear Unit
min_split_length
(optional)

Die minimale Länge, die ein geteiltes Feature aufweisen darf. Wenn eine Teilung dazu führt, dass ein oder beide geteilten Features kürzer als der angegebene Wert sind, findet die Teilung nicht statt.

Linear Unit
split_fields
[split_field,...]
(optional)

Eine Liste von numerischen Feldern aus den Eingabe-Features. Die Feldwerte basieren auf den Proportionen der geteilten Linien.

Field

Codebeispiel

SplitLineByMatch: Beispiel 1 (Python-Fenster)

Das folgende Skript für das Python-Fenster veranschaulicht, wie die Funktion SplitLineByMatch im unmittelbaren Modus verwendet wird.

import arcpy
arcpy.env.workspace = "C:/data/roads.gdb"
arcpy.edit.SplitLineByMatch("city_Roads", "county_Roads", "match_table",
                            "city_roads_split", "50 Meters")
SplitLineByMatch: Beispiel 2 (eigenständiges Skript)

Das folgende eigenständige Skript ist ein Beispiel für die Anwendung der Funktion SplitLineByMatch in einer Skriptumgebung.

"""
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.
"""

# Import system modules
import arcpy

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

# 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"

# Use 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)