Résumé
Calcule les valeurs d'un champ pour une classe d'entités, une couche d'entités ou un raster.
Utilisation
Pour plus d’informations sur les expressions Python, reportez-vous à la rubrique Calculer un champ - Exemples Python.
Pour plus d’informations sur les expressions Arcade, reportez-vous au guide d’ArcGIS Arcade.
Pour en savoir plus sur les expressions SQL, reportez-vous à la rubrique Calculer des valeurs de champ.
Lorsqu'il est utilisé avec un jeu sélectionné d'entités, telles que celles créées à partir d'une requête dans 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 un champ.
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 (!fieldname!).
Pour les calculs Arcade, les noms des champs doivent être précédés du préfixe $feature. ($feature.fieldname).
Pour calculer des chaînes sur des champs de type texte ou caractère, elles doivent être placées entre guillemets doubles dans le cas d’une boîte de dialogue. S’il s'agit de scripts, les chaînes entre guillemets doubles doivent, à leur tour, être encapsulées dans des guillemets simples.
Pour calculer un champ afin qu'il soit une valeur numérique, entrez la valeur en question dans le paramètre Expression ; la valeur ne doit pas être placée entre guillemets.
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 relier l'expression ; le résultat du code de bloc doit être transmis à l'expression.
Le paramètre Code Block (Bloc de code) n’est pris en charge que pour les expressions Python.
La mise en forme et le module math Python peuvent être utilisés dans le paramètre 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.
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!).
Les expressions Python peuvent utiliser les propriétés géométriques area et length avec une unité surfacique ou linéaire 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.
- Mots-clés d'unité de mesure surfacique :
- ACRES | ARES | HECTARES | SQUARECENTIMETERS | SQUAREDECIMETERS | SQUAREINCHES | SQUAREFEET | SQUAREKILOMETERS | SQUAREMETERS | SQUAREMILES | SQUAREMILLIMETERS | SQUAREYARDS | SQUAREMAPUNITS | UNKNOWN
- Mots-clés d'unité de mesure linéaire :
- CENTIMETERS | DECIMALDEGREES | DECIMETERS | FEET | INCHES | KILOMETERS | METERS | MILES | MILLIMETERS | NAUTICALMILES | POINTS | UNKNOWN | YARDS
- Mots-clés d'unité de mesure surfacique :
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 surfaciques ou linéaires de mesure (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, Notepad) 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, vous devez commencer 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 se divisent par zéro, renvoient une valeur Null pour cette valeur de champ.
Assurez-vous que cet outil respecte le paramètre d'environnement Etendue en sortie. Seules les valeurs de champs des entités comprises dans l'étendue seront calculées. Le paramètre d'environnement n'a aucune incidence sur les données non spatiales, comme les tables.
Calculer un champ respecte l'environnement Transférer les descriptions des domaines de champs. 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.
Les expressions SQL ont été implémentées pour une prise en charge plus rapide des services d’entités. Au lieu d’effectuer les calculs entité par entité ou ligne par ligne, une requête unique est définie pour le service d’entités, ce qui entraîne des calculs nettement plus rapides.
Seuls les services d’entités non versionnés prennent en charge les expressions SQL. En ce qui concerne les autres formats, utilisez des expressions Python ou Arcade.
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.
Syntaxe
CalculateField(in_table, field, expression, {expression_type}, {code_block}, {field_type})
Paramètre | Explication | Type 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é. Héritage :PYTHON et PYTHON_9.3 restent pris en charge à des fins de rétrocompatibilité, mais ils ne figurent pas dans la liste des options. Les scripts Python qui utilisent ces mots clés continuent de fonctionner. Python 3 (PYTHON3 en Python) renvoie les valeurs des champs de date sous forme d’datetimeobjets Python. PYTHON et PYTHON_9.3 renvoient les valeurs des champs de date sous forme de chaînes.
Pour plus d’informations sur les expressions Python, reportez-vous à la rubrique Calculer un champ - Exemples. Pour plus d’informations sur les expressions Arcade, reportez-vous au guide d’ArcGIS Arcade. Pour en savoir plus sur les expressions SQL, reportez-vous à la rubrique Calculer des valeurs de champ. Les expressions SQL ont été implémentées pour une prise en charge plus rapide des services d’entités. Au lieu d’effectuer les calculs entité par entité ou ligne par ligne, une requête unique est définie pour le service d’entités, ce qui entraîne des calculs nettement plus rapides. Seuls les services d’entités non versionnés prennent en charge les expressions SQL. En ce qui concerne 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) | Type 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 Alter Field (Modifier le champ).
| String |
Sortie dérivée
Nom | Explication | Type de données |
out_table | Table mise à jour. | Vue tabulaire, couche raster, couche de mosaïque |
Exemple de code
Le script de fenêtre Python ci-dessous 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")
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")
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)
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)
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")
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
- Transférer les descriptions des domaines de champs
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
Vous avez un commentaire à formuler concernant cette rubrique ?