Transférer des attributs (Mise à jour)

Résumé

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

Transférer des attributs

Utilisation

    Attention :

    Cet outil modifie les données en entrée. Reportez-vous à la rubrique Outils qui ne génèrent pas de jeux de données en sortie pour obtenir plus d’informations, ainsi que des stratégies pour éviter les modifications de données indésirables.

    Remarque :

    Toutes les entrées doivent être exprimées dans le même système de coordonné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.

  • 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 des entités cible, le suffixe _1 (ou _2 ou _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.

  • Le paramètre Champ(s) de transfert de règles définit les règles de contrôle du transfert des attributs pour les correspondances m:n où plusieurs entités source correspondent à une ou plusieurs entités cible. Si aucune règle n'est définie, les attributs sont transférés à partir de l'entité source correspondante la plus longue. Cependant, pour mieux guider le transfert, des règles basées sur des attributs peuvent être utilisées, chacune étant définie par un nom de champ et une valeur.

    Les types de champs et valeurs de règles suivants sont pris en charge :

    Type de champValeurs de règles

    Texte

    Valeur de chaîne pouvant exister dans vos entités source.

    Entier

    Valeur d'entier pouvant exister dans vos entités source, ou MAX ou MIN pour la valeur maximum ou minimum.

    Date

    MAX ou MIN pour la date la plus récente ou la plus ancienne.

    Vous pouvez spécifier autant de paires de champs/valeurs de règles que nécessaire. Les règles s'appliquent dans l'ordre dans lequel elles sont répertoriées.

    Lorsqu'une correspondance m:n est trouvée, l'outil vérifie les champs et valeurs de règles spécifiés, puis détermine à partir desquels transférer des attributs des façons suivantes :

    • Si une seule des entités source m possède la valeur de règle dans le premier champ de la liste de règles, cette entité source est utilisée pour le transfert.
    • Si plusieurs entités source m, ou aucune, possèdent la valeur de règle, il s'agit d'un rattachement. Si plus aucune règle n'est spécifiée, la plus longue d'entre elles est utilisée pour le transfert. Autrement, la règle suivante de la liste est vérifiée pour rompre le rattachement.
    • Le processus se poursuit jusqu'à ce que toutes les règles aient été évaluées. Si aucune entité source ne peut être déterminée pour le transfert, l'entité source la plus longue est utilisée.

    L'exemple suivant explique le fonctionnement de ce processus. Le champ ROAD_NAME doit être transféré de la source vers la cible pour une correspondance 3:1. Par défaut, l’entité source 3, la plus longue des trois entités source, est utilisée pour le transfert, et l’entité cible reçoit la valeur ROAD_NAME West Ave comme indiqué dans le tableau (a) ci-dessous.

    Supposons maintenant que les règles suivantes soient définies : le champ TRAVEL_DIRECTION avec la règle One way (Unidirectionnel) et le champ SPEED_LIMIT avec la règle MAX. Pour déterminer l’entité source appropriée pour le transfert, l’outil commence par évaluer les valeurs de TRAVEL_DIRECTION pour les trois entités source et détermine que deux d’entre elles ont une correspondance pour One way. L’outil vérifie ensuite les valeurs SPEED_LIMIT entre ces deux entités et choisit OBJECTID 1 qui possède la valeur maximum 40. Par conséquent, le champ ROAD_NAME ayant la valeur East Ave est transféré à partir de cette entité vers l’entité cible comme indiqué dans le tableau (b) ci-dessous.

    Exemple de champs de transfert de règles
  • La précision de la correspondance 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.

Syntaxe

TransferAttributes(source_features, target_features, transfer_fields, search_distance, {match_fields}, {out_match_table}, {transfer_rule_fields})
ParamètreExplicationType 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 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
transfer_rule_fields
[[field, rule],...]
(Facultatif)

Définit des règles pour contrôler l'entité source à partir de laquelle transférer des attributs lorsque plusieurs entités source correspondent aux entités cible. L'entité source à utiliser pour le transfert est déterminée par les champs et les valeurs de règles spécifiques, classés de la priorité la plus élevée à la plus faible telles qu'elles apparaissent dans la liste spécifiée. Si aucune règle n'est définie, la plus longue des entités source correspondantes est utilisée pour le transfert.

Les types de règles disponibles sont les suivants :

  • MIN : valeur minimum du champ d'entier ou de date. En cas de champ de date, la date la plus récente.
  • MAX : valeur maximum du champ d'entier ou de date. En cas de champ de date, la date la plus ancienne.
  • Valeur de texte ou d'entier pouvant exister dans vos entités source.
Value Table

Sortie dérivée

NomExplicationType de données
out_feature_class

Entités cible mises à jour.

Classe d’entités

Exemple de code

Exemple 1 d'utilisation de l'outil Transférer des attributs (fenêtre Python)

Le script de fenêtre Python ci-dessous illustre l'utilisation de la fonction TransferAttributes en mode immédiat.

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.TransferAttributes_edit("source_Roads.shp",
                              "target_Roads.shp", ["RoadName", "PaveType"],
                              "25 Feet")
Exemple 2 d'utilisation de l'outil Transférer des attributs (script autonome)

Le script autonome suivant est un exemple d'application de la fonction TransferAttributes 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.
# ====================================================================================
Exemple 3 d'utilisation de l'outil Transférer des attributs (script autonome)

Le script autonome suivant est un exemple d’application de la fonction TransferAttributes à l’aide de règles de transfert dans un environnement de scripts.

# Name:        TransferAttributes_example_script3.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 can be transferred based on transfer
#              rules. This script shows how transfer rules are set.
# ------------------------------------------------------------------------------

# Import system modules
import arcpy

# Set environment settings
arcpy.env.overwriteOutput = True
arcpy.env.workspace = r"D:\conflationTools\ScriptExamples\data.gdb"

try:
    # Set local variables
    sourceFeatures = "updateRoads"
    targetFeatures = "baseRoads"
    transfer_fields = "RD_NAME"

    search_distance = "300 Feet"
    match_fields = ""
    outMatchTable = ""
    transfer_rules = ["TRAVEL_DIRECTION One-Way", "SPEED_LIMIT MAX"]

    # 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,
                                  transfer_rules)

except arcpy.ExecuteError as aex:
    print(arcpy.GetMessages(2))
    
except Exception as ex:
    print(ex.args[0])

Informations de licence

  • Basic: Non
  • Standard: Non
  • Advanced: Oui

Rubriques connexes