Transférer des attributs (Mise à jour)
Récapitulatif
Détecte l'endroit où les entités linéaires source correspondent spatialement aux entités linéaires cible et transfère les attributs spécifiés des entités source vers les entités cible appariées.
Le transfert d'attributs est généralement utilisé pour copier des attributs à partir d'entités contenues dans un jeu de données vers des entités correspondantes dans un autre jeu de données. Vous pouvez, par exemple, l'utiliser pour transférer les noms d'entités routes d'une carte numérisée et d'un jeu de données géré vers des entités au sein d'un nouveau jeu de données qui ont été collectées récemment et qui sont plus précises. Les deux jeux de données sont généralement appelés entités source et entités cible. Cet outil détecte les entités source et les entités linéaires cible correspondantes au sein de la distance de recherche spécifiée et transfère les attributs spécifiés des lignes source vers les lignes cible.
Illustration
Utilisation
-
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.
-
Vous devez spécifier un ou plusieurs champs dans le paramètre Transférer des champs. Si un champ de transfert a le même nom qu'un champ de la table d'entités cible, le suffixe _1 (ou _2, _3, etc.) est ajouté au champ de transfert pour le rendre unique.
Si plusieurs entités source correspondent à une ou plusieurs entités cible, les valeurs des champs d'une seule des entités source sont transférées vers les entités cible. Si une valeur de champ source est manquante, aucun transfert d'attributs n'est effectué.
-
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.
-
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.
La précision de l'appariement des entités dépend 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.
Cet outil modifie les données en entrée. Reportez-vous à la rubrique Outils sans sortie pour obtenir plus d'informations, ainsi que des stratégies pour éviter les mouvements de données indésirables.
Toutes les entrées doivent être exprimées dans le même système de coordonnées.
Syntaxe
Paramètre | Explication | Type de données |
source_features |
Entités linéaires à partir desquelles transférer des attributs. | Feature Layer |
target_features |
Entités linéaires vers lesquelles transférer des attributs. Les champs de transfert spécifiés sont ajoutées aux entités cible. | Feature Layer |
transfer_fields [field,...] |
Liste des champs source à transférer vers des entités cible. Vous devez spécifier au moins un champ. | Field |
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 source et cible. Si elle 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 |
Exemple de code
Le script de fenêtre Python ci-dessous illustre l'utilisation de la fonction Transférer des attributs en mode immédiat.
import arcpy
arcpy.env.workspace = "C:/data"
arcpy.TransferAttributes_edit("source_Roads.shp",
"target_Roads.shp", "RoadName, PaveType"
"25 Feet")
Le script autonome suivant dessous est un exemple d'application de la fonction Transférer des attributs dans un environnement de scripts.
# Name: TransferAttributes_example_script2.py
# Description: Performs attribute transfer from newly updated roads (source) to existing
# base roads (target). Where the source and target features are matched in
# many-to-one or many-to-many (m:n) relationships, attributes are transferred
# from only one of the m source features to the n target features. This script
# includes a post-process that flags resulting target features with the m:n
# match relationships. You can inspect the flagged features and retrieve the
# attributes from the desired source features if necessary.
# 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
sourceFeatures = "updateRoads"
targetFeatures = "baseRoads"
transfer_fields = "RD_NAME; RD_ID"
search_distance = "300 Feet"
match_fields = "RD_NAME FULLNAME"
outMatchTable = "ta_mtbl"
# Make a copy of the targetFeatures for attribute transfer
targetCopy = targetFeatures + "_Copy"
arcpy.CopyFeatures_management(targetFeatures, targetCopy)
# Performs attribute transfer
arcpy.TransferAttributes_edit(sourceFeatures, targetCopy, transfer_fields, search_distance, match_fields, outMatchTable)
# ====================================================================================
# Note 1: The result of TransferAttributes may contain errors; see tool reference.
# Additional analysis steps may be necessary to check the results; these steps
# are not included in this script.
#
# The following process identifies m:n matches between source and target features
# and flag features in targetCopy for inspection.
# ====================================================================================
# Add a field srcM_inMN to the match table to store the m count of source features in m:n relationship
field_srcM_inMN = "srcM_inMN"
arcpy.AddField_management(outMatchTable, field_srcM_inMN)
codeblock = """
def getM(fld):
x = fld.split(\":\")[0]
if x.isnumeric():
if int(x) > 0:
return int(x)
return -1
"""
# Calculate values for srcM_inMN
arcpy.CalculateField_management(outMatchTable, field_srcM_inMN, "getM(!FM_MN!)", "PYTHON_9.3", codeblock)
# Make a table view of the match table, selecting srcM_inMN values greater than 1
# (excluding 1:n relationships which don't need to be inspected)
arcpy.MakeTableView_management(outMatchTable, "mtable_view", field_srcM_inMN + "> 1")
# For the selected records, transfer srcM_inMN and SRC_FID fields and values to the targetCopy
arcpy.JoinField_management(targetCopy, "OBJECTID", "mtable_view", "TGT_FID", field_srcM_inMN + "; SRC_FID")
# ====================================================================================
# Note 2: Now the fields srcM_inMN and SRC_FID are in the copy of the target features.
# The srcM_inMN values are the counts of matched source features; the SRC_FID
# values indicate the source feature IDs from which the transferred attributes
# come from.
#
# At this point you can interactively review the transferred attributes for the
# flagged features. If you want to replace any of them by those from a different
# source feature, you would need to make the edits as needed.
# ====================================================================================