Zusammenfassung
Eingabe-Features werden basierend auf Zuordnungsbeziehungen geteilt, um eine bessere übereinstimmende Liniensegmentierung zu erhalten.
Bei Linien-Features in zwei verschiedenen Datasets (z. B. Straßen innerorts und Bundesstraßen) ist es vorteilhaft, Features mit der Zuordnungsbeziehung 1:1 anstelle von Viele-zu-Viele (m:n) für eine Zuordnung zu verwenden, beispielsweise bei der Attributübertragung von einer Quelle in die andere. Dieses Werkzeug soll die Umwandlung von m:n-Zuordnungen in mehr 1:1-Zuordnungen unterstützen.
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:
- Geteilt: Linien, die geteilt wurden.
- Nicht geteilt: Eingabelinien, die nicht geändert wurden.
- Gruppen mit unzureichenden Linien: Linien, die nicht in den Prozess einbezogen werden können, weil sie die Bedingung des Parameters Minimale Länge von Zuordnungsgruppen nicht erfüllen.
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 ggf. ü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 nächstliegenden Stelle vom Knoten auf den zugeordneten Features geteilt wurde.
- Short segment: Positionen, an denen eine Eingabelinie aufgrund der festgelegten Einstellung für Minimale Teilungslänge 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 unzureichende oder außerhalb des Bereichs liegende Segmente 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. Deshalb ist die angegebene Suchentfernung der zu verwendende Maximalwert. Wenn Sie beispielsweise eine Suchentfernung von 90 Metern angeben, werden im Prozess abgeleitete Entfernungswerte von 30 Metern, 90 Metern und beliebigen Werten dazwischen 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 beliebiger 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 oder, falls kein Stützpunkt gefunden wird, an der nächstgelegenen Position auf der Eingabelinie geteilt. Wenn ein zugeordneter Pseudo-Node dagegen auf einen Nicht-Pseudo-Eingabe-Node trifft, wird die Eingabelinie stets 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 können Gruppen ausgeschlossen werden, 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 unbefriedigende Teilungen durchgeführt werden. Alle Eingabelinien in Gruppen mit unzureichenden Linien werden in die Ausgabe geschrieben und im Feld SBM_LnFlag mit "Gruppen mit unzureichenden Linien" 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 Segment mit unzureichender Länge gekennzeichnet wurde, wird als Referenz für die Überprüfung in die Point-Feature-Class geschrieben, falls angegeben.
Mit dem Parameter Split-Felder können ein oder mehrere numerische Felder angegeben werden (z. B. die Länge eines Feldes), um die zugehörigen Werte basierend auf den Proportionen der Teilungslinien zu teilen.
Syntax
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})
Parameter | Erklärung | Datentyp |
in_features | Das Eingabe-Linien-Feature, das geteilt werden soll. Sie müssen vorab mit den zugeordneten Features abgeglichen werden. | Feature Layer |
matched_features | Zugeordnete Features werden bei der Teilung der Eingabe-Features als Referenz verwendet. Sie müssen vorab mit den Eingabe-Features abgeglichen werden. | 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) | Eine bestimmte Zuordnungsgruppe wird nur dann in den Teilungsprozess einbezogen, wenn die Gesamtlänge des Eingabe-Features oder die Gesamtlänge des zugeordneten Features größer als der angegebene Wert ist. | Linear Unit |
min_split_length (optional) | 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 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.SplitLineByMatch_edit("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.
# 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.DetectFeatureChanges_management(sourceFeatures, targetFeatures, dfcOutput, searchDistance, dfcMatchTable)
# Use Split Line By Match tool twice to split source and then target features to improve spatial correspondence
arcpy.SplitLineByMatch_edit(sourceFeatures, targetFeatures, dfcMatchTable, slbmSourceOutput, searchDistance,
"AS_SOURCE", slbmSourceOutputPts, dangle, "", minSplitLength)
arcpy.SplitLineByMatch_edit(targetFeatures, sourceFeatures, dfcMatchTable, slbmTargetOutput, searchDistance,
"AS_TARGET", slbmTargetOutputPts, dangle, "", minSplitLength)
# Perform attribute transfer using the split results
arcpy.TransferAttributes_edit(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])
Umgebungen
Lizenzinformationen
- Basic: Nein
- Standard: Nein
- Advanced: Ja