Résumé
Recherche les entités linéaires de remplacement qui correspondent spatialement aux entités linéaires de base, puis détecte les modifications spatiales et/ou attributaires, ainsi que l'absence de modification. Cet outil crée ensuite une classe d'entités en sortie contenant les entités de remplacement ou de base non appariées, ainsi que les entités de remplacement appariées avec les informations concernant leurs modifications.
En savoir plus sur le fonctionnement de l'appariement d'entités
Illustration
Utilisation
Cet outil sert généralement à mettre jour un jeu d'entités linéaires, comme des routes, et à recevoir périodiquement des mises à jour envoyées par les partenaires sous forme de nouveau jeu d'entités routes. Vous voulez savoir quelles entités mises à jour sont des entités de base modifiées ou de nouvelles entités à ajouter, puis identifier les anciennes entités de base à supprimer. Cet outil recherche les correspondances d'entités entre les jeux de données linéaires de base et de remplacement, détecte les modifications spatiales et/ou attributaires, ainsi que l'absence de modification, puis crée une classe d'entités en sortie contenant les informations sur les modifications apportées aux entités.
La classe d'entités en sortie contient toutes les entités de remplacement participantes (appariées ou non) et les éventuelles entités de base non appariées. Les informations sur les modifications détectées sont stockées dans les champs suivants :
- UPDATE_FID : identifiant d'entité de remplacement. La valeur est -1 pour une entité de base non appariée.
- BASE_FID : identifiant d'entité de base. La valeur est -1 pour une entité de remplacement non appariée.
- CHANGE_TYPE : type de modification détectée, à savoir :
- S pour Spatial, désignant une entité de remplacement appariée comportant une modification spatiale.
- A pour Attribut, désignant une entité de remplacement appariée comportant une modification attributaire.
- SA pour Spatial et Attribut, désignant une entité de remplacement appariée comportant des modifications spatiales et attributaires.
- S_LD pour une modification spatiale, ainsi que des directions de lignes opposées.
- SA_LD pour des modifications spatiales et attributaires, ainsi que des directions de lignes opposées.
- NC pour No Change (aucune modification), désignant une entité de remplacement appariée sans modification.
- N pour Nouveau, désignant une nouvelle entité de remplacement non appariée dans les données de base.
- D pour Deletion (Suppression), désignant une entité de base non appariée qui devra éventuellement être supprimée des données de base.
Le processus d'appariement des entités se base tout d'abord sur la Distance de recherche et les Champs d'appariement facultatifs. Une table d'appariement en sortie peut être générée pour stocker les informations d'appariement.
Le paramètre Distance de recherche est utilisé dans la recherche de candidats d'appariement. Utilisez une distance suffisamment importante pour détecter la plupart des décalages entre entités correspondantes, mais pas trop importante, afin de ne pas entraîner un traitement superflu d'un trop grand nombre de candidats et de ne pas obtenir des correspondance erronées.
Une évaluation plus approfondie des candidats d'appariement trouvés est effectuée à l'aide d'un ensemble de mesures géométriques pour déterminer si leurs similitudes sont suffisantes pour qu'ils soient considérés comme des candidats appariés spatialement.
Si vous spécifiez une ou plusieurs paires de champs pour le paramètre Champs d'appariement, les candidats appariés spatialement sont comparés à ces valeurs de champs afin de déterminer la correspondance exacte. Supposons, par exemple, que les entités de remplacement et de base possèdent toutes deux un champ STREET_NAME contenant des noms de rues. Si une entité de remplacement correspond spatialement à deux entités de base, mais qu'un seul candidat de base possède la même valeur STREET_NAME que l'entité de remplacement, il s'agit de la meilleure correspondance. La comparaison de chaînes de texte ne respecte pas la casse : First St est égal à first st.
La Table d'appariement en sortie est facultative. Cette table d'appariement fournit des informations d'appariement d'entités complètes, notamment les FID source et cible, les groupes d'appariement, les relations d'appariement et le niveau de confiance de l'appariement dérivé des conditions d'appariement spatiales et d'attributs. Ces informations peuvent vous aider à comprendre les situations d'appariement et faciliter l'inspection a posteriori, la post-édition et l'analyse supplémentaire. Pour plus d'informations, reportez-vous à la rubrique À propos de l'appariement d'entités et de la table d'appariement.
Dans la table d'appariement en sortie, les valeurs des champs SRC_FID et TGT_FID représentent les identifiants d'entités de remplacement et de base, respectivement.
L'identification des modifications a lieu après l'appariement des entités. Les conditions spatiales et attributaires, ainsi que les directions de lignes, de toutes les entités de remplacement appariées sont comparées aux entités de base correspondantes pour déterminer leurs valeurs CHANGE_TYPE.
Une modification spatiale (type S) est détectée dans un ou deux des cas suivants :
- Les entités de remplacement appariées diffèrent de leurs entités de base correspondantes dans la topologie. Par exemple une entité de remplacement correspond à deux entités de base.
- Dans chaque groupe de correspondance, des portions quelconques des entités de remplacement ou de base figurent en dehors de la Tolérance de modification.
La tolérance de modification représente la largeur d'une zone tampon autour des entités de remplacement ou de base. Pour chaque groupe d'appariement, une zone tampon de remplacement est créée autour de toutes les entités de remplacement et une zone tampon de base autour de toutes les entités de base. Toutes les entités de remplacement sont alors comparées à la zone tampon de base et toutes les entités de base à la zone tampon de remplacement. Si une portion des entités de remplacement se trouve en dehors de la zone tampon de base ou qu'une portion des entités de base se trouve en dehors de la zone tampon de remplacement, ou si les deux situations se produisent, on constate alors une modification spatiale. Lorsqu'une valeur supérieure à 0 est spécifiée, la sortie contient deux champs supplémentaires :
- LEN_PCT : ce champ stocke des valeurs de pourcentage de longueur qui dépendent de groupes d'appariement.
- LEN_ABS : ce champ stocke des valeurs de longueur absolues dans des unités d'entités qui dépendent de groupes d'appariement.
Les valeurs de ces champs sont déterminées en fonction du groupe d'appariement auquel l'entité en sortie appartient, selon les conditions suivantes :
- Si seules des entités de remplacement se trouvent en dehors de la zone tampon de base :
- Lu = longueur totale des portions extérieures des entités de remplacement.
- Pu (pourcentage de longueur) = Lu / longueur totale de toutes les entités de remplacement * 100.
- LEN_PCT = Pu
- LEN_ABS = Lu
- Si seules les entités de base se trouvent en dehors de la zone tampon de remplacement :
- Lb = longueur totale des portions extérieures des entités de base.
- Pb (pourcentage de longueur) = Lb / longueur totale de toutes les entités de base * 100.
- LEN_PCT = Pb
- LEN_ABS = Lb
- Si les deux conditions précédentes sont vérifiées :
- La valeur de Lu et Lb la plus importante et sa valeur de pourcentage associée sont consignées. Si Lb est consigné, un signe négatif est ajouté pour la raison susmentionnée.
La valeur de pourcentage est comprise entre 0 et 100. 0 indique que les entités de remplacement et de base d'un groupe d'appariement figurent entièrement dans les zones de tolérance de modification. 100 signifie que toutes les entités de remplacement ou de base figurent en dehors des zones de tolérance de modification.
Les valeurs LEN_PCT et LEN_ABS permettent de déterminer l'importance d'une modification. Plus les valeurs sont élevées, plus la modification est importante. Ces valeurs sont uniquement attribuées aux entités présentant des modifications spatiales ; les autres ont la valeur -1.
Une modification attributaire (type A) est détectée en fonction du paramètre Champs de comparaison. Si vous spécifiez une ou plusieurs paires de champs comme champs de comparaison, les entités appariées sont comparées à ces champs pour déterminer s'il existe une modification attributaire. La comparaison de chaînes de texte ne respecte pas la casse : First St est égal à first st. Si des modifications spatiales et attributaires sont détectées dans une entité de remplacement appariée, le type de modification SA lui est attribué. Si aucune modification spatiale ou attributaire n'est détectée dans une entité de remplacement appariée, le type de modification NC (aucune modification) lui est attribué.
La modification de la direction des lignes (types de modification avec _LD) est considérée comme une modification spatiale et peut être détectée comme une option.
- Les entités de remplacement appariées sont associées au type de modification S_LD si la direction de certaines de leurs lignes est opposée à une ou plusieurs entités de base appariées, avec ou sans les modifications spatiales décrites ci-dessus. Autrement dit, il s'agit des types S ou NC si les directions de lignes ne sont pas comparées.
- Les entités de remplacement appariées sont associées au type de modification SA_LD si la direction de certaines de leurs lignes est opposée à une ou plusieurs entités de base appariées, en plus de la modification attributaire ou des modifications attributaires et spatiales décrites ci-dessus. Autrement dit, il s'agit des types A ou SA si les directions de lignes ne sont pas comparées.
L’union des étendues en entrée est utilisée comme étendue de traitement. Le nombre d'entités source et cible participantes est indiqué dans les messages de traitement.
La précision de l'appariement des entités dépend beaucoup de la qualité et de la complexité des données, ainsi que des similitudes entre les deux entrées.
Vous devez réduire les erreurs de données et sélectionner des entités pertinentes en entrée grâce à un pré-traitement. En général, il est toujours utile que, au sein d'un jeu de données en entrée, les entités soient correctes sur le plan topologique, possèdent une géométrie valide, et qu'elles soient monoparties et non dupliquées ; dans le cas contraire, des résultats inattendus pourraient survenir.
Vous pouvez analyser les modifications détectées dans la classe d’entités en sortie. Si les différences spatiales entre les deux sources de données sont importantes, vous pouvez modifier l'une d'elles pour obtenir une meilleure correspondance entre les deux. Vous pouvez également transférer des attributs entre les entités de remplacement et les entités de base. Les outils d'étirement caoutchouté et de transfert d'attributs du jeu d'outils Fusion multisource peuvent vous aider à effectuer ces modifications.
Syntaxe
DetectFeatureChanges_management (update_features, base_features, out_feature_class, search_distance, {match_fields}, {out_match_table}, {change_tolerance}, {compare_fields}, {compare_line_direction})
Paramètre | Explication | Type de données |
update_features | Entités linéaires à comparer aux entités de base. | Feature Layer |
base_features | Entités linéaires à comparer aux entités de remplacement pour détecter les modifications. | Feature Layer |
out_feature_class | Classe d'entités linéaires en sortie comportant des informations de modification. La sortie contient toutes les entités de remplacement participantes (appariées ou non) et les éventuelles entités de base non appariées. | Feature Class |
search_distance | Distance utilisée pour rechercher des candidats d'appariement. La distance doit être indiquée et elle doit être supérieure à zéro.Vous pouvez choisir une unité préférée. Par défaut, l'unité de l'entité est spécifiée. | Linear unit |
match_fields [[source_field, target_field],...] (Facultatif) | Liste des champs des entités de remplacement et de base. Si cette option est renseignée, des candidats à l'appariement sont recherchés dans chaque paire de champs afin de déterminer la correspondance adéquate. | Value Table |
out_match_table (Facultatif) | Table en sortie contenant des informations d'appariement d'entités complètes. | Table |
change_tolerance (Facultatif) | Distance utilisée pour déterminer la présence éventuelle d'une modification spatiale. Toutes les entités de remplacement et de base appariées sont comparées à cette tolérance. Si une portion des entités de remplacement ou de base se trouve hors de la zone qui entoure l'entité appariée, on constate alors une modification spatiale. Une distance peut être supérieure ou égale à zéro. La valeur par défaut est 0. Lorsqu'une valeur supérieure à 0 est spécifiée, la sortie inclut les champs LEN_PCT et LEN_ABS. Vous pouvez choisir une unité préférée. Par défaut, l'unité de l'entité est spécifiée. | Linear unit |
compare_fields [[source_field, target_field],...] (Facultatif) | Champs permettant de déterminer la présence éventuelle d'une modification attributaire entre les entités de remplacement et les entités de base appariées. | Value Table |
compare_line_direction (Facultatif) | Spécifie si vous souhaitez ou non comparer les directions des lignes des entités appariées.
| Boolean |
Exemple de code
Exemple 1 d'utilisation de l'outil DetectFeatureChanges (fenêtre Python)
Le script de fenêtre Python ci-dessous illustre l'utilisation de la fonction DetectFeatureChanges en mode immédiat.
import arcpy
arcpy.env.workspace = "C:/data"
arcpy.DetectFeatureChanges_edit("update_Roads.shp",
"base_Roads.shp", "output_changes.shp"
"25 Feet", #, #, "7.6 Meters",
["rdClass", "roadClass"])
Exemple 2 d'utilisation de la fonction DetectFeatureChanges (script Python autonome)
Le script autonome suivant est un exemple d'application de la fonction DetectFeatureChanges dans un environnement de script.
# Name: DetectFeatureChanges_example_script2.py
# Description: Perform change detection between newly received road data and
# existing road data and find the number of new roads and the
# total length of them.
# Author: Esri
# -----------------------------------------------------------------------
# Import system modules
import arcpy
from arcpy import env
# Set environment settings
env.overwriteOutput = True
env.workspace = r"D:\conflationTools\ScriptExamples\data.gdb"
# Set local variables
updateFeatures = "updateRoads"
baseFeatures = "baseRoads"
dfcOutput = "dfc_out"
search_distance = "300 Feet"
match_fields = "RD_NAME FULLNAME"
statsTable = "new_roads_stats"
# Perform spatial change detection
arcpy.DetectFeatureChanges_management(updateFeatures, baseFeatures, dfcOutput, search_distance, match_fields)
# ====================================================================================
# Note 1: The result of DetectFeatureChanges may contain errors; see tool reference.
# Inspection and editing may be necessary to ensure correct CHANGE_TYPE N, which
# represents un-matched update feautres, before further calculations.
#
# One of the quick ways of checking whether the CHANGE_TYPE N features have
# matching base features is to find their mid-points and use them to search for
# features in base data, as processed below.
# ====================================================================================
# ======== Check update roads with CHANGE_TYPE N for potential match
# Make Feature Layer with selection of CHANGE_TYPE = 'N' (un-matched update features)
arcpy.MakeFeatureLayer_management(dfcOutput, "sel_N_layer", "CHANGE_TYPE = 'N'")
# Get mid-points of the selected features; the mid-points carry all the attributes.
arcpy.FeatureVerticesToPoints_management("sel_N_layer", "in_memory\midPts", "MID")
# Find nearest base features from the mid-points
arcpy.Near_analysis("in_memory\midPts", baseFeatures, "300 Feet")
# ====================================================================================
# Note 2: At this point you can manually inspect the midPts by the NEAR_DIST values;
# the lower the values, the higher chance (not always) a match was missed in the
# dfc process. Delete features from midPts that have found matching base features
# before further process.
# ====================================================================================
# Transfer CHANGE_TYPE values from features of midPts to update features
arcpy.JoinField_management(updateFeatures, "OBJECTID", "in_memory\midPts", "UPDATE_FID", "CHANGE_TYPE")
# Get the count of new roads and the total length; the remaining roads have
# Null values for CHANGE_TYPE.
arcpy.Frequency_analysis(updateFeatures, statsTable, "CHANGE_TYPE", "Shape_Length")
Environnements
Informations de licence
- ArcGIS Desktop Basic: Non
- ArcGIS Desktop Standard: Non
- ArcGIS Desktop Advanced: Oui