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

  • 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 au guide ArcGIS Arcade.

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

  • S’il est utilisé avec un jeu sélectionné 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. Faites une copie de la table en entrée si vous souhaitez conserver les valeurs d’origine.

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

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

  • Pour calculer des chaînes sur des champs de type texte ou caractère, dans le cas d’une boîte de dialogue, elles doivent être placées entre guillemets doubles ("chaîne"). S’il s’agit de scripts, les chaînes entre guillemets doubles doivent, à leur tour, être incluses dans des guillemets simples (par exemple, '"string"').

  • Pour calculer un champ afin qu'il soit une valeur numérique, entrez la valeur en question dans le paramètre Expression, sans guillemets.

  • 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.

  • Le paramètre Bloc de code vous permet de créer des expressions complexes. Vous pouvez saisir directement le bloc de code dans la boîte de dialogue ou sous la forme d'une chaîne continue dans des scripts. L'expression et le code de bloc sont connectés. Le code de bloc doit être associé à l’expression ; le résultat du code de bloc doit être transmis à l’expression.

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

  • Vous pouvez utiliser le module et la mise en forme Python math dans le paramètre Bloc de code. Vous pouvez également 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.

  • Il est possible de créer des expressions Python à l'aide de propriétés de l'objet Geometry, notamment type, extent, centroid, firstPoint, lastPoint, area, length, isMultipart et partCount (par exemple, !shape.area!).

  • Vous pouvez utiliser les propriétés de géométrie area et length dans des expressions Python possédant une unité linéaire ou surfacique pour convertir la valeur dans une autre unité de mesure (par exemple, !shape.length@kilometers!). Si les données sont stockées dans un système de coordonnées géographiques et qu'une unité linéaire est fournie (par exemple, les miles), la longueur sera calculée à l'aide d'un algorithme géodésique. L’utilisation d’unités surfaciques sur les données géographiques donnera des résultats douteux, car les degrés décimaux ne sont pas cohérents dans l’ensemble du globe.

    • Les mots-clés suivants sont des mots-clés d'unité de mesure surfacique :
      • ACRES | ARES | HECTARES | SQUARECENTIMETERS | SQUAREDECIMETERS | SQUAREINCHES | SQUAREFEET | SQUAREKILOMETERS | SQUAREMETERS | SQUAREMILES | SQUAREMILLIMETERS | SQUAREYARDS | SQUAREMAPUNITS | UNKNOWN
    • Les mots-clés suivants sont des mots-clés d'unité de mesure linéaire :
      • CENTIMETERS | DECIMALDEGREES | DECIMETERS | FEET | INCHES | KILOMETERS | METERS | MILES | MILLIMETERS | NAUTICALMILES | POINTS | UNKNOWN | YARDS
  • Les expressions Python peuvent servir à calculer la surface ou la longueur géodésique d’une entité à l’aide des propriétés geodesicArea ou geodesicLength combinées aux unités de mesure surfaciques ou linéaires (par exemple, !shape.geodesicArea@hectares! ou !shape.geodesicLength@miles!).

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

  • Lorsque vous calculez des données jointes, vous ne pouvez pas calculer directement les colonnes jointes. Vous pouvez toutefois calculer directement les colonnes de la table d'origine. Pour calculer les données jointes, commencez par ajouter les tables ou couches jointes à la carte. Vous pouvez alors effectuer séparément des calculs sur ces données. Ces modifications sont apportées aux colonnes jointes.

  • Les expressions Python qui tentent de concaténer les champs de type chaîne comprenant une valeur Null ou qui sont divisibles par zéro renvoient une valeur Null 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 accélère les calculs.

    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.

    L'utilisation de l'option SQL pour le paramètre Type d’expression possède les limitations suivantes pour les géodatabases d’entreprise :

    • Cette option est seulement prise en charge pour les bases de données 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 versionnées ne sont pas prises en charge.
    • La possibilité d’annuler les opérations de géotraitement n’est pas pris en charge.

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

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é.

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 au guide ArcGIS Arcade.

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 définie sur le 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.

  • Python 3Le type d’expression Python sera utilisé. Il s’agit de l’option par défaut.
  • ArcadeLe type d’expression Arcade sera utilisé.
  • SQLLe type d’expression SQL sera utilisé.
String
Bloc de code
(Facultatif)

Bloc de code à saisir pour des expressions 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, le nouveau champ aura une longueur égale à 512. Pour les fichiers de formes et les fichiers dBASE, le champ a une longueur égale à 254. La longueur du nouveau champ peut être ajustée à l’aide de l’outil Modifier le champ.

  • TexteToute chaîne de caractères peut être utilisée.
  • Flottant (simple précision)Les nombres fractionnels compris entre -3,4E38 et 1,2E38 peuvent être utilisés.
  • Double (double précision)Les nombres fractionnels compris entre -2,2E308 et 1,8E308 peuvent être utilisés.
  • Court (petit entier)Les nombres entiers compris entre -32 768 et 32 767 peuvent être utilisés.
  • Long (grand entier)Les nombres entiers compris entre -2 147 483 648 et 2 147 483 647 peuvent être utilisés.
  • DateLa date et l'heure seront utilisés.
  • Blob (données binaires)Une longue séquence de nombres binaires sera utilisée.
  • Imagerie rasterDes images raster seront utilisées. 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.
  • GUID (identifiant unique global)Un identifiant unique global sera utilisé.
String
Appliquer les domaines
(Facultatif)

Indique si les règles de domaine de champ 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é. Il s’agit de l’option par défaut.
  • ARCADELe type d’expression Arcade sera utilisé.
  • SQLLe type d’expression SQL sera utilisé.

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 au guide ArcGIS Arcade.

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 définie sur le 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.

String
code_block
(Facultatif)

Bloc de code à saisir pour des expressions 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, le nouveau champ aura une longueur égale à 512. Pour les fichiers de formes et les fichiers dBASE, le champ a une longueur égale à 254. La longueur du nouveau champ peut être ajustée à l’aide de l’outil Modifier le champ.

  • TEXTToute chaîne de caractères peut être utilisée.
  • FLOATLes nombres fractionnels compris entre -3,4E38 et 1,2E38 peuvent être utilisés.
  • DOUBLELes nombres fractionnels compris entre -2,2E308 et 1,8E308 peuvent être utilisés.
  • SHORTLes nombres entiers compris entre -32 768 et 32 767 peuvent être utilisés.
  • LONGLes nombres entiers compris entre -2 147 483 648 et 2 147 483 647 peuvent être utilisés.
  • DATELa date et l'heure seront utilisés.
  • BLOBUne longue séquence de nombres binaires sera utilisée.
  • RASTERDes images raster seront utilisées. 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.
  • GUIDUn identifiant unique global sera utilisé.
String
enforce_domains
(Facultatif)

Indique si les règles de domaine de champ 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 illustre l’utilisation de la fonction CalculateField en mode immédiat.

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

Utilisez 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.AddField_management(inFeatures, fieldName1, "DOUBLE", 
                          fieldPrecision, fieldScale)
arcpy.AddField_management(inFeatures, fieldName2, "DOUBLE", 
                          fieldPrecision, fieldScale)
 
# Calculate centroid
arcpy.CalculateField_management(inFeatures, fieldName1, 
                                "!SHAPE.CENTROID.X!",
                                "PYTHON3")
arcpy.CalculateField_management(inFeatures, fieldName2, 
                                "!SHAPE.CENTROID.Y!",
                                "PYTHON3")
Exemple 3 d'utilisation de l'outil CalculateField (script autonome)

Utilisez 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"""
 
# Execute AddField
arcpy.AddField_management(inTable, fieldName, "SHORT")
 
# Execute CalculateField 
arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON3", 
                                codeblock)
Exemple 4 d'utilisation de l'outil CalculateField (script autonome)

Utilisez 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"
 
# Execute AddField
arcpy.AddField_management(inFeatures, fieldName, "LONG")
 
# Execute CalculateField 
arcpy.CalculateField_management(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.CalculateField_management("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.CalculateField_management("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