Beschriftung | Erläuterung | Datentyp |
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.
| 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.
| 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 |
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
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
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})
Name | Erläuterung | Datentyp |
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.
| 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.
| 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
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")
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)