Utilisation de l'outil Calculer un champ
The Calculate Field tool is located in the Data Management toolbox in the Fields toolset. This is the same tool that is called when you click the Field Calculator command from the field shortcut menu of an attribute table. When performing field calculations, it is important to know what type of data you are using and in what context it is going to be used in the future. The syntax that must be used in a calculation expression differs depending on the data source and scripting language.
The following includes a number of important tips and best practices for using the Calculate Field tool.
Astuces et pratiques conseillées pour l'utilisation de l'outil Calculer un champ
Calcule les valeurs d'un champ pour une classe d'entités, une couche d'entités ou un catalogue d'images.
Expressions can be created using VBScript or a standard Python format. The formatting style of the string used for the expression should be appropriate for the environment (type).
Il est possible de créer des expressions Python à l'aide de propriétés de l'objet géométrie (type, extent, centroid, firstPoint, lastPoint, Area, length, isMultipart et partCount).
Les expressions Python peuvent utiliser les propriétés area et length de la géométrie 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 si une unité linéaire (par exemple, le mile) est fournie, la longueur sera calculée à l'aide d'un algorithme géodésique. L'utilisation d'unités surfaciques sur des données géographiques génèrera des résultats douteux, car les degrés décimaux ne constituent pas des unités de mesure cohérentes sur le globe.
!shape.area@acres!
- 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
Lorsqu'il est utilisé avec un ensemble 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.
Fields are always enclosed in brackets [ ] for VBScript.
Dans le cas des calculs Python, les noms de champs doivent être délimités par des points d'exclamation (!fieldname!).
Pour calculer des chaînes sur des champs de type texte ou caractère, elles doivent être placées entre guillemets dans le cas d'une boîte de dialogue. S'il s'agit de scripts, les chaînes entre guillemets doivent, à leur tour, être encapsulées dans des apostrophes ('"string"').
Cet outil peut également être utilisé pour mettre à jour des attributs de type caractère. Les expressions qui utilisent une chaîne de caractères doivent être délimitées par des apostrophes ; par exemple, [CHARITEM] = 'NEW STRING'. Cependant, si la chaîne de caractères proprement dite contient déjà des apostrophes, placez-la entre guillemets ; par exemple, [CHARITEM] = "TYPE'A'".
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 apostrophes ou guillemets.
The arcgis.rand() function is supported by the Calculate Field tool, and the expression type must be Python. The arcgis.rand() function was created for ArcGIS tools and should not be confused with the Python Rand() function.
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.
La mise en forme et le module mathématique Python sont disponibles pour être utilisés dans le paramètre Bloc de code. Vous pouvez importer des modules supplémentaires. Le module mathématique 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ématique, consultez l'aide de Python.
Les fichiers VB .cal enregistrés dans les versions précédentes d'ArcGIS peuvent fonctionner ou nécessiter des modifications minimes. Si vous avez du code VBA de versions passées qui utilise ArcObjects, vous devrez modifier vos calculs pour travailler en 10.0.
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 à ArcMap. Vous pouvez alors effectuer séparément des calculs sur ces données. Ces modifications sont apportées aux colonnes jointes.
The expression type must be Python when running Calculate Field with ArcGIS Engine or ArcGIS Server. Only use Python as the expression type whenever the tool is included in a model that will be published to ArcGIS Server.
Exemple de blocs de code utilisant l'outil Calculer un champ
Utilisez CalculateField pour affecter des valeurs de centroïde à de nouveaux champs.
# Name: CalculateField_Centroids.py # Description: Use CalculateField to assign centroid values to new fields # Import system modules import arcpy from arcpy import env try: # Set environment settings env.workspace = "C:/data/airport.gdb" # Set local variables inFeatures = "parcels" fieldName1 = "xCentroid" fieldName2 = "yCentroid" fieldPrecision = 18 fieldScale = 11 # Expressions are calculated using the Shape Field's geometry property expression1 = "float(!SHAPE.CENTROID!.split()[0])" expression2 = "float(!SHAPE.CENTROID!.split()[1])" # Execute AddField arcpy.AddField_management(inFeatures, fieldName1, "DOUBLE", fieldPrecision, fieldScale) arcpy.AddField_management(inFeatures, fieldName2, "DOUBLE", fieldPrecision, fieldScale) # Execute CalculateField arcpy.CalculateField_management(inFeatures, fieldName1, expression1, "PYTHON") arcpy.CalculateField_management(inFeatures, fieldName2, expression2, "PYTHON") except Exception, e: # If an error occurred, print line number and error message import traceback, sys tb = sys.exc_info()[2] print "Line %i" % tb.tb_lineno print e.message
Utilisez CalculateField avec un bloc de code pour calculer des valeurs à partir de plages.
# Name: CalculateField_Ranges.py # Description: Use CalculateField with a codeblock to calculate values # based on ranges # Import system modules import arcpy from arcpy import env # Set environment settings 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, "PYTHON", codeblock)
Utilisez CalculateField pour affecter des valeurs aléatoires à un nouveau champ.
# Name: CalculateField_Random.py # Description: Use CalculateField to assign random values to a new field # Import system modules import arcpy from arcpy import env # Set environment settings env.workspace = "C:/data/airport.gdb" # Set local variables inFeatures = "parcels" fieldName = "RndValue" expression = "arcgis.rand('Integer 0 10')" # Execute AddField arcpy.AddField_management(inFeatures, fieldName, "LONG") # Execute CalculateField arcpy.CalculateField_management(inFeatures, fieldName, expression, "PYTHON")