Calculer un champ (Gestion des données)

Synthèse

Calcule les valeurs d'un champ pour une classe d'entités, une couche d'entités ou un raster.

Utilisation

    Attention :

    Cet outil modifie les données en entrée. Pour plus d’informations et connaître les stratégies permettant d’empêcher les modifications de données indésirables, reportez-vous à la rubrique Outils qui modifient ou mettent à jour les données en entrée.

  • Pour en savoir plus sur les expressions Python, consultez les exemples d’utilisation de l’outil Python Calculer un champ.

    Pour en savoir plus sur les expressions Arcade, reportez-vous à la rubrique ArcGIS Arcade de l’aide pour les développeurs.

    Pour en savoir plus sur les expressions SQL, reportez-vous à la rubrique Calculer des valeurs de champ.

    Pour en savoir plus sur les expressions VBScript, consultez les exemples d’utilisation de l’outil VBScript Calculate Field (Calculer un champ).

  • Les expressions Arcade de cet outil utilisent le profil Arcade Field Calculation (Calcul de champ). Un profil Arcade est le contexte dans lequel une expression Arcade est évaluée et interprétée. Lorsqu’une expression Arcade est évaluée, la valeur renvoyée est convertie dans le type de champ de la valeur en sortie.

  • S’il est utilisé avec un ensemble de sélection d’entités, telles que celles créées à partir d’une requête dans l’outil Générer une couche ou Sélectionner une couche par attributs, cet outil ne met à jour que les enregistrements sélectionnés.

  • Le calcul ne peut être appliqué qu'à un seul champ par opération. Pour appliquer plusieurs calculs, utilisez l’outil Calculer des champs.

  • Les valeurs de champs existantes seront écrasées. Pour conserver les valeurs d’origine, créez une copie de la table en entrée comme sauvegarde ou utilisez l’option Enable Undo (Activer l’annulation) de la fenêtre Geoprocessing (Géotraitement).

  • Dans le cas des calculs Python, les noms de champs doivent être délimités par des points d’exclamation (!fieldname!, par exemple).

    Pour les calculs Arcade, les noms de champs doit avoir comme préfixe $feature. ($feature.fieldname, par exemple).

  • Remarque :

    Pour transférer des valeurs temporelles entre les types de champs (Date [Date], Date Only [Date uniquement], Time Only [Heure uniquement], Timestamp Offset [Décalage de l’horodatage] et Text [Texte]), utilisez l’outil Convert Temporal Field (Convertir un champ temporel) à la place.

  • Pour que vous puissiez calculer des chaînes dans des champs de type texte ou caractère, dans la boîte de dialogue, celles-ci doivent être placées entre guillemets doubles (par exemple "chaîne"). Dans les scripts, les chaînes entre guillemets doubles doivent, à leur tour, être placées entre guillemets simples (par exemple '"string"').

  • Pour calculer un champ afin qu’il corresponde à une valeur numérique, spécifiez la valeur en question dans le paramètre Expression (Expression) sans guillemet.

  • Héritage :

    arcgis.rand() n’est plus pris en charge dans la version ArcGIS Pro 2.0. Des fonctions comparables à l'aide du random module Python doivent être utilisées en lieu et place. Pour utiliser le random module avec succès, importez-le dans le paramètre Bloc de code.

  • Vous pouvez créer des expressions complexes à l’aide du paramètre Code Block (Bloc de code). Spécifiez directement le bloc de code dans la boîte de dialogue ou sous la forme de chaîne dans des scripts. L'expression et le code de bloc sont connectés. Le code de bloc doit relier l’expression ; le résultat du code de bloc doit être transmis à l’expression.

    Le paramètre Code Block (Bloc de code) est uniquement pris en charge pour les expressions Python.

  • Vous pouvez utiliser la mise en forme et le module Python math dans le paramètre Code Block (Bloc de code). Vous pouvez importer des modules supplémentaires. Le module math fournit des fonctions de représentation des nombres et d’arithmétique formelle, des fonctions logarithmiques et de puissance, des fonctions trigonométriques, des fonctions de conversion angulaire, des fonctions hyperboliques et des constantes mathématiques. Pour en savoir plus sur le module math, consultez l’aide de Python.

  • Pour calculer les informations de géométrie dans Python, utilisez des propriétés d’objet Geometry. Par exemple, utilisez une expression de !shape.pointCount! pour calculer le nombre de sommets d’une entité.

    Remarque :

    L’outil Calculer des attributs géométriques prend en charge des calculs similaires.

    Pour calculer la surface et la longueur dans Python, utilisez les méthodes getArea et getLength avec un type de méthode et d’unité.

    • Pour calculer la surface géodésique de polygones en kilomètres carrés, utilisez l’expression suivante :
      !shape.getArea('GEODESIC', 'SQUAREKILOMETERS')!
    • Pour calculer la longueur plane de polylignes (ou de polygones) en yards, utilisez l’expression suivante :
      !shape.getLength('PLANAR', 'YARDS')

    Pour plus d’informations, reportez-vous aux objets ArcPy Polygon et Polyline.

    En savoir plus sur les outils de géotraitement et les unités linéaires et surfaciques

  • Les applications ArcGIS utilisent le codage UTF-16-LE pour lire et écrire les fichiers .cal. D’autres applications (par exemple, Notepad) peuvent servir à créer ou à modifier les fichiers .cal, tant que le fichier est écrit à l’aide du codage UTF-16-LE. Un fichier utilisant un autre codage ne sera pas chargé dans le bloc de code.

  • Si vous utilisez des données jointes, vous ne pouvez modifier que les champs de la table d’origine. Vous ne pouvez pas modifier les champs de la table jointe. Pour effectuer un calcul sur la table jointe, effectuez-le directement sur cette table.

  • Les expressions Python qui tentent de concaténer des champs de type chaîne comprenant une valeur nulle ou de division par zéro renvoient une valeur nulle pour cette valeur de champ.

  • Les expressions SQL effectuent des calculs plus rapides pour les services d’entités et géodatabases d’entreprise. Au lieu d’effectuer les calculs entité par entité ou ligne par ligne, une requête unique est définie sur le serveur ou la base de données, ce qui entraîne des calculs plus rapides.

    Seuls les services d’entités et les géodatabases d’entreprise prennent en charge les expressions SQL. En ce qui concerne les autres formats, utilisez des expressions Python ou Arcade.

    L’utilisation de l’option SQL du paramètre Expression Type (Type d’expression) a les limitations suivantes pour les géodatabases d’entreprise :

    • L’option est seulement prise en charge sur les géodatabases d’entreprise Db2, Oracle, PostgreSQL, SAP HANA et SQL Server.
    • Le calcul des valeurs de champ sur les tables jointes n’est pas pris en charge.
    • Les données de géodatabase d’entreprise versionnées et archivées ne sont pas prises en charge.
    • L’annulation des opérations de géotraitement n’est pas prise en charge.

    Consultez la documentation du fournisseur de base de données pour obtenir de l’aide sur les expressions SQL.

  • Le paramètre Expression dans la boîte de dialogue de l’outil comporte une liste déroulante Insert Values (Insérer des valeurs) dans laquelle vous pouvez ajouter des valeurs de champ à partir du champ sélectionné dans la liste Fields (Champs) ou des valeurs de domaine à partir du domaine du champ sélectionné. Utilisez les valeurs de domaine pour vous assurer que seules les valeurs valides pour le domaine du champ sont insérées dans ce dernier.

Paramètres

ÉtiquetteExplicationType de données
Table en entrée

Table en entrée contenant le champ qui sera mis à jour avec le nouveau calcul.

Mosaic Layer; Raster Layer; Table View
Nom du champ (existant ou nouveau)

Champ qui sera mis à jour avec le nouveau calcul.

S’il n’existe pas de champ portant le nom spécifié dans la table en entrée, il est ajouté.

Field
Expression

Expression de calcul simple utilisée pour créer une valeur qui sera indiquée dans les lignes sélectionnées.

SQL Expression
Type d’expression
(Facultatif)

Précise le type d’expression qui sera utilisé.

Si l’entrée est un service d’entités, le type d’expression par défaut est SQL. Pour les autres types d’entrée, le type d’expression par défaut est Python.

Pour en savoir plus sur les expressions Python, consultez les exemples d’utilisation de l’outil Python Calculer un champ.

Pour en savoir plus sur les expressions Arcade, reportez-vous à la rubrique ArcGIS Arcade de l’aide pour les développeurs.

Pour en savoir plus sur les expressions SQL, reportez-vous à la rubrique Calculer des valeurs de champ.

Les expressions SQL effectuent des calculs plus rapides pour les services d’entités et géodatabases d’entreprise. Au lieu d’effectuer les calculs entité par entité ou ligne par ligne, une requête unique est envoyée au serveur ou à la base de données, ce qui entraîne des calculs nettement plus rapides.

Seuls les services d’entités et les géodatabases d’entreprise prennent en charge les expressions SQL. Pour les autres formats, utilisez des expressions Python ou Arcade.

Pour en savoir plus sur les expressions VBScript, consultez les exemples d’utilisation de l’outil VBScript Calculate Field (Calculer un champ).

  • PythonLe type d’expression Python sera utilisé.
  • ArcadeLe type d’expression Arcade sera utilisé.
  • SQLLe type d’expression SQL sera utilisé.
  • VBScriptLe type d’expression VBScript sera utilisé.
String
Bloc de code
(Facultatif)

Bloc de code à utiliser pour des expressions Python ou VBScript complexes.

String
Type de champ
(Facultatif)

Spécifie le type de champ du nouveau champ. Ce paramètre n’est utilisé que lorsque le nom de champ n’existe pas dans la table en entrée.

Si le champ est de type texte, il sera d’une longueur de 512, sauf si l’entrée est un shapefile ou un fichier dBASE. Dans ce cas, la longueur sera égale à 254. Pour ajuster la longueur, utilisez l’outil Modifier un champ.

  • Court (Entier 16 bits)Le champ sera de type court. Les champs courts prennent en charge les nombres entiers compris entre -32 768 et 32 767.
  • Long (Entier 32 bits)Le champ sera de type long. Les champs longs prennent en charge les nombres entiers compris entre -2 147 483 648 et 2 147 483 647.
  • Entier très grand (entier de 64 bits)Le champ sera de type entier très grand. Les champs de type entier très grand prennent en charge les nombres entiers compris entre -(253) et 253.
  • Réel simple (Virgule flottante 32 bits)Le champ sera de type réel simple. Les champs de type réel simple prennent en charge les nombres fractionnels compris entre -3,4E38 et 1,2E38.
  • Réel double (Virgule flottante 64 bits)Le champ sera de type réel double. Les champs de type réel double prennent en charge les nombres fractionnels compris entre -2,2E308 et 1,8E308.
  • TexteLe champ sera de type texte. Les champs de texte prennent en charge une chaîne de caractères.
  • DateLe champ sera de type date. Les champs de date prennent en charge les valeurs d’heure et de date.
  • Date (haute précision)Le type de champ sera date en haute précision. Les champs de date en haute précision prennent en charge les valeurs de date et d’heure en millisecondes.
  • Date uniquementLe champ sera de type date uniquement. Les champs Date uniquement prennent en charge des valeurs de date sans valeurs d’heure.
  • Heure uniquementLe champ sera de type heure uniquement. Les champs Heure uniquement prennent en charge des valeurs d’heure sans valeurs de date.
  • Décalage de l’horodatageLe champ sera de type décalage de l’horodatage. Les champs Décalage de l’horodatage prennent en charge des valeurs de date, d’heure et un décalage par rapport à une valeur de temps universel coordonné (UTC).
  • BLOB (données binaires)Le champ sera de type BLOB. Les champs BLOB prennent en charge les données stockées sous forme d’une longue séquence de nombres binaires. Vous avez besoin d’une visionneuse ou d’un chargeur personnalisé, ou d’une application tierce pour charger des attributs dans un champ BLOB ou afficher le contenu d’un champ BLOB.
  • GUID (identifiant unique global)Le champ sera de type GUID. Les champs GUID contiennent des chaînes de registre constituées de 36 caractères placés entre des accolades.
  • RasterLe champ sera de type raster. Les champs raster peuvent stocker des données raster dans ou avec la géodatabase. Tous les formats de jeu de données raster pris en charge par ArcGIS peuvent être stockés, mais il est recommandé de n’utiliser que des images de petite taille.
String
Appliquer des domaines
(Facultatif)

Indique si les règles de domaine de champs sont appliquées.

  • Activée : les règles de domaine de champ sont appliquées. Si un champ ne peut pas être mis à jour, sa valeur reste inchangée et les messages de l’outil incluent un message d’avertissement.
  • Désactivée : les règles de domaine de champ ne sont pas appliquées. Il s'agit du paramètre par défaut.
Boolean

Sortie obtenue

ÉtiquetteExplicationType de données
Table en entrée mise à jour

Table mise à jour.

Table View; Raster Layer; Mosaic Layer

arcpy.management.CalculateField(in_table, field, expression, {expression_type}, {code_block}, {field_type}, {enforce_domains})
NomExplicationType de données
in_table

Table en entrée contenant le champ qui sera mis à jour avec le nouveau calcul.

Mosaic Layer; Raster Layer; Table View
field

Champ qui sera mis à jour avec le nouveau calcul.

S’il n’existe pas de champ portant le nom spécifié dans la table en entrée, il est ajouté.

Field
expression

Expression de calcul simple utilisée pour créer une valeur qui sera indiquée dans les lignes sélectionnées.

SQL Expression
expression_type
(Facultatif)

Précise le type d’expression qui sera utilisé.

  • PYTHON3Le type d’expression Python sera utilisé.
  • ARCADELe type d’expression Arcade sera utilisé.
  • SQLLe type d’expression SQL sera utilisé.
  • VBLe type d’expression VBScript sera utilisé.

Si l’entrée est un service d’entités, le type d’expression par défaut est SQL. Pour les autres types d’entrée, le type d’expression par défaut est PYTHON3.

Pour en savoir plus sur les expressions Python, consultez les exemples d’utilisation de l’outil Python Calculer un champ.

Pour en savoir plus sur les expressions Arcade, reportez-vous à la rubrique ArcGIS Arcade de l’aide pour les développeurs.

Pour en savoir plus sur les expressions SQL, reportez-vous à la rubrique Calculer des valeurs de champ.

Les expressions SQL effectuent des calculs plus rapides pour les services d’entités et géodatabases d’entreprise. Au lieu d’effectuer les calculs entité par entité ou ligne par ligne, une requête unique est envoyée au serveur ou à la base de données, ce qui entraîne des calculs nettement plus rapides.

Seuls les services d’entités et les géodatabases d’entreprise prennent en charge les expressions SQL. Pour les autres formats, utilisez des expressions Python ou Arcade.

Pour en savoir plus sur les expressions VBScript, consultez les exemples d’utilisation de l’outil VBScript Calculate Field (Calculer un champ).

String
code_block
(Facultatif)

Bloc de code à utiliser pour des expressions Python ou VBScript complexes.

String
field_type
(Facultatif)

Spécifie le type de champ du nouveau champ. Ce paramètre n’est utilisé que lorsque le nom de champ n’existe pas dans la table en entrée.

Si le champ est de type texte, il sera d’une longueur de 512, sauf si l’entrée est un shapefile ou un fichier dBASE. Dans ce cas, la longueur sera égale à 254. Pour ajuster la longueur, utilisez l’outil Modifier un champ.

  • SHORTLe champ sera de type court. Les champs courts prennent en charge les nombres entiers compris entre -32 768 et 32 767.
  • LONGLe champ sera de type long. Les champs longs prennent en charge les nombres entiers compris entre -2 147 483 648 et 2 147 483 647.
  • BIGINTEGERLe champ sera de type entier très grand. Les champs de type entier très grand prennent en charge les nombres entiers compris entre -(253) et 253.
  • FLOATLe champ sera de type réel simple. Les champs de type réel simple prennent en charge les nombres fractionnels compris entre -3,4E38 et 1,2E38.
  • DOUBLELe champ sera de type réel double. Les champs de type réel double prennent en charge les nombres fractionnels compris entre -2,2E308 et 1,8E308.
  • TEXTLe champ sera de type texte. Les champs de texte prennent en charge une chaîne de caractères.
  • DATELe champ sera de type date. Les champs de date prennent en charge les valeurs d’heure et de date.
  • DATEHIGHPRECISIONLe type de champ sera date en haute précision. Les champs de date en haute précision prennent en charge les valeurs de date et d’heure en millisecondes.
  • DATEONLYLe champ sera de type date uniquement. Les champs Date uniquement prennent en charge des valeurs de date sans valeurs d’heure.
  • TIMEONLYLe champ sera de type heure uniquement. Les champs Heure uniquement prennent en charge des valeurs d’heure sans valeurs de date.
  • TIMESTAMPOFFSETLe champ sera de type décalage de l’horodatage. Les champs Décalage de l’horodatage prennent en charge des valeurs de date, d’heure et un décalage par rapport à une valeur de temps universel coordonné (UTC).
  • BLOBLe champ sera de type BLOB. Les champs BLOB prennent en charge les données stockées sous forme d’une longue séquence de nombres binaires. Vous avez besoin d’une visionneuse ou d’un chargeur personnalisé, ou d’une application tierce pour charger des attributs dans un champ BLOB ou afficher le contenu d’un champ BLOB.
  • GUIDLe champ sera de type GUID. Les champs GUID contiennent des chaînes de registre constituées de 36 caractères placés entre des accolades.
  • RASTERLe champ sera de type raster. Les champs raster peuvent stocker des données raster dans ou avec la géodatabase. Tous les formats de jeu de données raster pris en charge par ArcGIS peuvent être stockés, mais il est recommandé de n’utiliser que des images de petite taille.
String
enforce_domains
(Facultatif)

Indique si les règles de domaine de champs sont appliquées.

  • ENFORCE_DOMAINSLes règles de domaine de champ sont appliquées.
  • NO_ENFORCE_DOMAINSLes règles de domaine de champ ne sont pas appliquées. Il s’agit de l’option par défaut.
Boolean

Sortie obtenue

NomExplicationType de données
out_table

Table mise à jour.

Table View; Raster Layer; Mosaic Layer

Exemple de code

Exemple 1 d’utilisation de la fonction CalculateField (fenêtre Python

Le script ci-dessous pour la fenêtre Python montre comment utiliser la fonction CalculateField en mode immédiat.

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.management.AddField("vegtable.dbf", "VEG_TYP2", "TEXT", "", "", "20")
arcpy.management.CalculateField("vegtable.dbf", "VEG_TYP2", 
                                '!VEG_TYPE!.split(" ")[-1]', "PYTHON3")
Exemple 2 d'utilisation de l'outil CalculateField (script autonome)

Utilisez la fonction CalculateField pour attribuer des valeurs de centroïde à de nouveaux champs.

# Name: CalculateField_centroids.py

# Import system modules
import arcpy

# Set environment settings
arcpy.env.workspace = "C:/data/airport.gdb"
 
# Set local variables
inFeatures = "parcels"
fieldName1 = "xCentroid"
fieldName2 = "yCentroid"
fieldPrecision = 18
fieldScale = 11
 
# Add fields
arcpy.management.AddField(inFeatures, fieldName1, "DOUBLE", 
                          fieldPrecision, fieldScale)
arcpy.management.AddField(inFeatures, fieldName2, "DOUBLE", 
                          fieldPrecision, fieldScale)
 
# Calculate centroid
arcpy.management.CalculateField(inFeatures, fieldName1, 
                                "!SHAPE.CENTROID.X!",
                                "PYTHON3")
arcpy.management.CalculateField(inFeatures, fieldName2, 
                                "!SHAPE.CENTROID.Y!",
                                "PYTHON3")
Exemple 3 d'utilisation de l'outil CalculateField (script autonome)

Utilisez la fonction CalculateField avec un bloc de code pour calculer des valeurs à partir de plages.

# Name: CalculateField_ranges.py

# Import system modules
import arcpy
 
# Set environment settings
arcpy.env.workspace = "C:/data/airport.gdb"
 
# Set local variables
inTable = "parcels"
fieldName = "areaclass"
expression = "getClass(float(!SHAPE.area!))"

codeblock = """
def getClass(area):
    if area <= 1000:
        return 1
    if area > 1000 and area <= 10000:
        return 2
    else:
        return 3"""
 
# Run AddField
arcpy.management.AddField(inTable, fieldName, "SHORT")
 
# Run CalculateField 
arcpy.management.CalculateField(inTable, fieldName, expression, "PYTHON3", 
                                codeblock)
Exemple 4 d'utilisation de l'outil CalculateField (script autonome)

Utilisez la fonction CalculateField pour attribuer des valeurs aléatoires à un nouveau champ.

# Name: CalculateField_Random.py

# Import system modules
import arcpy
import random
 
# Set environment settings
arcpy.env.workspace = "C:/data/airport.gdb"
  
# Set local variables
inFeatures = "parcels"
fieldName = "RndValue"
expression = "random.randint(0, 10)"
code_block = "import random"
 
# Run AddField
arcpy.management.AddField(inFeatures, fieldName, "LONG")
 
# Run CalculateField 
arcpy.management.CalculateField(inFeatures, fieldName, expression, "PYTHON3", 
                                code_block)
Exemple 5 d’utilisation de la fonction CalculateField (fenêtre Python

Le script de fenêtre Python ci-dessous illustre l’utilisation de la fonction CalculateField avec Arcade en mode immédiat.

import arcpy
arcpy.env.workspace = "C:/data/fgdb.gdb"
arcpy.management.CalculateField("data", "new_value", "$feature.value1 + $feature.value2", "ARCADE")
Exemple 6 d’utilisation de la fonction CalculateField (fenêtre Python

Le script de fenêtre Python ci-dessous illustre l’utilisation de la fonction CalculateField avec SQL en mode immédiat.

import arcpy
feature_service = "<a feature service url>"
arcpy.management.CalculateField("data", "NEW_VALUE", "SAMPLE * (BASELINE - 40)", "SQL")

Environnements

Cas particuliers

Transférer les descriptions des domaines de champ

Lorsque cet environnement est activé, tous les champs possédant un domaine associé utilisent la description du domaine au lieu de la valeur du champ. Les valeurs des champs ne possédant pas de domaine ne sont pas modifiées.

Informations de licence

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

Rubriques connexes