Résumé
Fractionne des entités en entrée en fonction des relations d’appariement pour obtenir une meilleure segmentation de ligne correspondante.
Lorsque des entités linéaires se trouvent dans deux jeux de données différents (par exemple, des routes de ville et des routes d’état), le fait d’avoir des entités dans des relations d’appariement 1:1 au lieu de plusieurs vers plusieurs (M:N) facilite les tâches de regroupement, telles que le transfert d’attributs d’une source vers l’autre. Cet outil a pour objectif de transformer les appariements M:N en un plus grand nombre d’appariements 1:1.
Les entités en entrée et les entités appariées doivent être préalablement appariées par l’un des outils de regroupement basés sur l’appariement des entités, tels que Détecter les modifications apportées aux entités et une table d'appariement doit être générée. Les relations d’appariement enregistrées dans la table d’appariement se situent entre les entités source et cible.
Pour chaque groupe d’appariement, l’outil fractionne les entités en entrée en fonction des conditions de nœud dans les entités appariées. Un nœud peut être l’extrémité pendante d’une ligne, un pseudo nœud entre deux lignes ou une jonction de plusieurs lignes. Par exemple, un groupe apparié 1:2 signifie qu’une entité source est appariée à deux entités cible et que les deux entités cible sont jointes à un pseudo nœud. L’outil fractionne la ligne en entrée à un emplacement proche du pseudo nœud cible. Ceci améliore les correspondances entre les lignes source et cible afin que la prochaine série d’appariement d’entités produise plusieurs d’appariements 1:1 pour répondre aux besoins en regroupement.
Illustration
Utilisation
La classe d’entités en sortie contient toutes les entités en entrée qui ont été fractionnées ou qui sont restées intactes, ainsi que tous leurs attributs. Les champs suivants sont ajoutés :
- ORIG_FID : ID des entités de l’entrée.
- SBM_LnFlag : stocke les valeurs suivantes :
- Fractionnées : lignes qui ont été fractionnées.
- Non fractionnées : lignes en entrée qui n’ont pas été modifiées.
- Groupe d’appariement court : lignes qui ne peuvent pas faire partie du processus, car elles ne répondent pas à la condition du paramètre Minimum Match Group Length (Longueur minimale du groupe d’appariement).
Une classe d’entités ponctuelles facultative peut être générée pour stocker les emplacements dans lesquels des lignes ont été fractionnées ou n’ont pas pu être fractionnées. Ces points peuvent servir à inspecter le résultat, le cas échéant. Cette sortie comprend les champs suivants :
- ORIG_FID : ID des entités de l’entrée aux emplacements de fractionnement.
- SBM_PtFlag : stocke les valeurs suivantes :
- At vertex : emplacements où une ligne en entrée a été fractionnée à un sommet existant.
- At nearest : emplacements où une ligne en entrée a été fractionnée à l’emplacement le plus proche du nœud dans les entités appariées.
- Short segment : emplacements où une ligne en entrée n’a pas pu être fractionnée conformément au paramètre Minimum Split Length (Longueur minimale de fractionnement) spécifié.
- Out of range : emplacements où une ligne en entrée n’a pas pu être fractionnée, car l’emplacement de fractionnement candidat se situe au-delà de la distance de recherche. Certains de ces emplacements peuvent toujours être utilisés pour fractionner les lignes après le processus.
Lors de l’inspection, il est possible de fractionner des lignes supplémentaires en fonction d’un des points signalés comme Segment court ou Hors plage à l’aide de l’outil Fractionner une ligne sur un point.
Le paramètre Search Distance (Distance de recherche) permet de rechercher les emplacements candidats pour fractionner une ligne en entrée à partir d’un nœud dans les entités appariées. Pour optimiser les chances de trouver un emplacement de fractionnement plus proche d’un nœud dans les entités appariées, une valeur de distance interne est dérivée en fonction de la proximité d’un nœud par rapport à une entité en entrée. Si la distance dérivée est inférieure au tiers de la distance de recherche, la distance dérivée est définie sur un tiers de la distance de recherche. Si la distance dérivée est supérieure à la distance de recherche, la valeur de la distance dérivée est définie sur la distance de recherche. Les valeurs des distances dérivées situées entre les deux sont utilisées en l’état. Par conséquent, la distance de recherche spécifiée est la valeur maximale à utiliser. Par exemple, si vous spécifiez une distance de recherche de 90 mètres, les valeurs des distances dérivées utilisées dans le processus sont de 30 mètres, 90 mètres et toutes les valeurs comprises entre les deux.
Il est important de définir une distance de recherche appropriée. La valeur que vous avez utilisée avant l’appariement peut convenir. Plus la distance de recherche est importante et plus il est probable qu’un sommet plus éloigné soit utilisé pour fractionner une ligne en entrée et qu’un nœud en entrée plus éloigné soit trouvé, ce qui empêche tout fractionnement.
La distance de recherche dérivée en interne permet de rechercher les emplacements candidats sur l’entité en entrée à partir d’un nœud dans les entités appariées. Les règles suivantes servent à déterminer si la ligne en entrée doit être fractionnée et si tel est le cas, où la fractionner.
- Si un pseudo nœud d’appariement trouve un pseudo nœud en entrée, aucun fractionnement n’a lieu.
- Si un non pseudo nœud d’appariement trouve un nœud en entrée, aucun fractionnement n’a lieu. Par exemple, si un nœud d’appariement d’arc pendant trouve un nœud en entrée à une jonction en Té, la ligne en entrée n’est pas fractionnée.
- Sinon, l’entité en entrée est fractionnée au seul sommet trouvé, ou au sommet le plus proche trouvé. Si aucun sommet n’est trouvé, elle est fractionnée à l’emplacement le plus proche de la ligne en entrée. Toutefois, si un pseudo nœud d’appariement trouve un non pseudo nœud en entrée, la ligne en entrée est toujours fractionnée.
Les lignes pendantes peuvent être fractionnées avec le paramètre Fractionner les entités d’arc pendant. Si une ligne pendante en entrée s’étend au-delà de l’entité appariée à l’extrémité de l’arc pendant, elle est fractionnée par défaut. Une ligne pendante peut être fractionnée pour identifier la différence réelle entre les entités source et cible dans l’appariement d’entités suivant.
Le paramètre Minimum Match Group Length (Longueur minimale du groupe d’appariement) peut être utilisé pour exclure les groupes d’appariement qui sont trop courts pour être fractionnés par rapport à la valeur spécifiée. Dans un groupe d’appariement donné, si la longueur totale des entités en entrée et la longueur totale des entités appariées sont toutes les deux inférieures à la valeur spécifiée, le groupe est exclu. Le fractionnement des entités doit être évité dans les groupes d’appariement courts afin d’éviter un fractionnement trop récurrent et non satisfaisant. Toutes les lignes en entrée qui font partie de groupes d’appariement courts sont écrites dans la sortie et signalées par la mention Short match group (Groupe d’appariement court) dans le champ SBM_LnFlag.
Le paramètre Minimum Split Length (Longueur minimale de fractionnement) permet d’éviter les lignes courtes. Si le fractionnement d’une ligne en entrée génère une ligne de longueur inférieure à cette valeur, la ligne en entrée n’est pas fractionnée. Un point à l’emplacement de fractionnement signalé par la mention Short segment (Segment court) dans le champ SBM_PtFlag est enregistré dans la classe d’entités ponctuelles, le cas échéant, en tant que référence pour l’inspection.
Le paramètre Split Fields (Champs de fractionnement) permet de spécifier que les valeurs d’un ou de plusieurs champs numériques (champ mesurant la longueur, par exemple) doivent être fractionnées en fonction des proportions des lignes de fractionnement.
Syntaxe
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})
Paramètre | Explication | Type de données |
in_features | Entités linéaires en entrée à fractionner. Elles doit être préalablement appariées avec les entités appariées. | Feature Layer |
matched_features | Les entités appariées servent de référence lors du fractionnement des entités en entrée. Elles doit être préalablement appariées avec les entités en entrée. | Feature Layer |
in_match_table | Table qui comprend les informations d’appariement entre les entités en entrée et appariées. | Table View |
out_feature_class | Classe d’entités en sortie contenant les lignes de fractionnement et les lignes d’origine qui ne sont pas fractionnées. | Feature Class |
search_distance | Valeur de distance servant à déterminer les emplacements de fractionnement. La valeur doit être supérieure à 0. Si aucune unité n'est renseignée, les unités de l’entrée sont utilisées. | Linear Unit |
in_features_as (Facultatif) | Indique si les entités en entrée dans la table d’appariement sont des entités source ou cible, afin de fractionner les entités appropriées.
| String |
out_point_feature_class (Facultatif) | Classe d’entités ponctuelles en sortie contenant les points qui représentent les emplacements de fractionnement. | Feature Class |
split_dangle (Facultatif) | Indique si les lignes pendantes sont fractionnées.
| Boolean |
min_match_group_length (Facultatif) | Un groupe d’appariement donné fait uniquement partie du fractionnement si la longueur totale des entités en entrée ou la longueur totale des entités appariées est supérieure à la valeur spécifiée. | Linear Unit |
min_split_length (Facultatif) | Si le fractionnement risque de générer un ou deux composants de longueur inférieure à la valeur spécifiée, le fractionnement n’a pas lieu. | Linear Unit |
split_fields [split_field,...] (Facultatif) | Liste des champs numériques à partir des entités en entrée. Leurs valeurs de champ reposent sur les proportions des lignes de fractionnement. | Field |
Exemple de code
Exemple 1 d’utilisation de l’outil SplitLineByMatch (fenêtre Python)
Le script de fenêtre Python ci-dessous illustre l'utilisation de la fonction SplitLineByMatch en mode immédiat.
import arcpy
arcpy.env.workspace = "C:/data/roads.gdb"
arcpy.SplitLineByMatch_edit("city_Roads", "county_Roads", "match_table",
"city_roads_split", "50 Meters")
Exemple 2 d’utilisation de l’outil SplitLineByMatch (script autonome)
Le script autonome suivant est un exemple d'application de la fonction SplitLineByMatch dans un environnement de scripts.
# 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])
Environnements
Informations de licence
- Basic: Non
- Standard: Non
- Advanced: Oui