Détecter les modifications apportées aux entités (Gestion des données)
Récapitulatif
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
- Remarque :
Toutes les entrées doivent être exprimées dans le même système de coordonnées.
-
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 - ID de l'entité de remplacement. La valeur est -1 pour une entité de base non appariée.
- BASE_FID - ID de l'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.
- 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 sur 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 aux valeurs de ces champs afin de déterminer la bonne correspondance. 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, celui-ci constitue 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 ID des entités de remplacement et les ID des entités de base, respectivement.
L'identification des modifications a lieu après l'appariement des entités. Les conditions spatiales et attributaires 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.
- Une partie de l'entité de remplacement n'est pas comprise dans la tolérance de modification.
La Tolérance de modification définit la largeur d'une zone tampon autour des entités de base. Toutes les entités de remplacement appariées sont comparées à cette tolérance. Une modification spatiale est détectée si une partie d'une entité de remplacement se trouve hors de la zone. 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. Chacune d'elles est calculée en comparant la longueur de la portion d'une entité de remplacement qui se trouve hors de la zone de tolérance de modification avec sa longueur totale. La valeur 0 signifie que toute l'entité de remplacement se trouve dans la zone de tolérance de modification, tandis que la valeur 100 indique qu'elle se trouve complètement hors de cette zone.
- LEN_ABS - Ce champ stocke des valeurs de longueur exprimées en unités d'entité. Chacune d'elles représente la longueur absolue de la partie d'une entité de remplacement qui se trouve hors de la tolérance de modification.
Une modification attributaire (type A) est détectée en fonction des champs de comparaison éventuellement spécifiés.
Si vous spécifiez une ou plusieurs paires de champs pour le paramètre Champs de comparaison, les entités appariées sont comparées à ces champs pour déterminer si elles présentent 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é.
-
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 Conflation_toolset peuvent vous aider à effectuer ces modifications.
Syntaxe
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 appariées sont comparées à cette tolérance. Une modification spatiale est détectée si une partie d'une entité de remplacement se trouve hors de la zone. 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 |
Exemple de code
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 Meterd",
["rdClass", "roadClass"])
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")