Exemples d'utilisation de l'outil Calculer un champ

La saisie de valeurs avec le clavier n'est pas la seule façon de mettre à jour les valeurs d'une table. Dans certains cas, vous pouvez effectuer un calcul mathématique permettant de définir la valeur d'un champ pour un seul enregistrement ou tous les enregistrements. Vous pouvez effectuer des calculs simples ainsi que des calculs avancés sur tous les enregistrements ou sur une sélection d'enregistrements. De plus, vous pouvez calculer la surface, la longueur, le périmètre et d'autres propriétés géométriques des champs de tables attributaires. Les sections suivantes comprennent des exemples d'utilisation du calculateur de champs. Les calculs peuvent être effectués à l'aide de Python ou VBScript.

Python est le langage de script conseillé pour ArcGIS. Utilisez Python si vous souhaitez accéder aux fonctions de géotraitement, notamment la géométrie d'entité. L'adoption de Python comme langage de script pour ArcGIS 10.0 offre beaucoup de possibilités en matière de calculs.

Utilisez VBScript si vous avez de l'expérience avec VBA ou VBScript et si vous maîtrisez la syntaxe de script. Les fichiers .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.

RemarqueRemarque :
  • Python applique une indentation du code dans le cadre de la syntaxe. Utilisez deux ou quatre espaces pour définir chaque niveau logique. Alignez le début et la fin des blocs d'instruction en restant cohérent.
  • Les champs d'expression de calcul Python sont délimités par des points d'exclamation (!!).
  • Lorsque vous nommez des variables, n'oubliez pas que Python respecte la casse. Ainsi, yield n'est pas équivalent à Yield.
  • VBScript ne vous permet pas de déclarer des types de données explicitement ; toutes les variables sont implicitement de type Variante. Les instructions comme Dim x as String doivent être supprimées ou simplifiées en Dim x.
  • Après la saisie des instructions, vous pouvez cliquer sur Enregistrer si vous souhaitez les écrire dans un fichier. Le bouton Charger vous invite à rechercher et sélectionner un fichier de calcul existant.

Calculs simples

Exemples de chaînes simples

Les chaînes sont prises en charge par une série de fonctions de chaîne Python, notamment capitalize, rstrip et replace.

Mettre en majuscule la première lettre de la chaîne dans le champ CITY_NAME.

!CITY_NAME!.capitalize()

Supprimer tout espace en fin de chaîne dans le champ CITY_NAME.

!CITY_NAME!.rstrip()

Remplacer toutes les occurrences de "california" par "California" dans le champ STATE_NAME.

!STATE_NAME!.replace("california", "California")

Les caractères dans un champ de type chaîne sont accessibles par indexation et découpage dans Python. L'indexation extrait des caractères à une position d'index ; le découpage extrait un groupe de caractères.

Exemple

Explication

Résultat

!fieldname![0]

Premier caractère.

"a"

!fieldname![-2]

Avant-dernier caractère.

"e"

!fieldname![1:4]

Deuxième, troisième, quatrième et cinquième caractères.

"bcd"

Python prend également en charge la mise en forme de chaîne à l'aide de l'opérateur %.

Combiner FieldA et FieldB, séparés par le signe deux points.

"%s:%s" % (!FieldA!, !FieldB!)

Fonctions de chaîne VBScript

Les chaînes sont prises en charge par une série de fonctions de chaîne VBScript, notamment Left, InStret Chrt. Voici quelques exemples de VBScript utilisés dans les fonctions courantes du Calculateur de champs.

Fonction Left : renvoie une valeur Variant (String) contenant un nombre spécifié de caractères à partir de la gauche d'une chaîne.

MyStr = Left([MyField], 1)

Fonction Right : renvoie une valeur Variant (String) contenant un nombre spécifié de caractères à partir de la droite d'une chaîne.

MyStr = Right([MyField], 1)

Fonction Mid : renvoie une valeur Variant (String) contenant un nombre spécifié de caractères d'une chaîne.

MyString = "Mid Function Demo" 'Create text string
FirstWord = Mid(MyString, 1, 3) ' Returns "Mid" 
LastWord = Mid(MyString, 14, 4) 'Returns "Demo"
MidWords = Mid(MyString, 5) 'Returns "Function Demo" 

Fonction InStr : renvoie une valeur Variant (Long) spécifiant la position de la première occurrence d'une chaîne au sein d'une autre.

MyPosition = InStr([address], " ")

Fonction Replace : renvoie une chaîne dans laquelle une sous-chaîne donnée a été remplacée par une autre sous-chaîne un certain nombre de fois.

NewString = Replace([comments], "#", "!")

Fonction Chr : renvoie une chaîne contenant le caractère associé au code de caractère spécifié.

' Replace a carriage return character with an exclamation 
NewString = Replace([comments], chr(13), "!") 

Opérateur & : utilisé pour forcer de la concaténation de chaîne de deux expressions.

MyStr = [MyField1] & " " & [MyField2]

Exemples de mathématiques simples

Python fournit des outils pour le traitement des nombres. Python prend également en charge plusieurs fonctions numériques et mathématiques, dont math, cmath, decimal, random, itertools, functools et operator.

Opérateur

Explication

Exemple

Résultat

x + y

x plus y

1.5 + 2.5

4.0

x - y

x moins y

3.3 - 2.2

1.1

x * y

x fois y

2.0 * 2.2

4.4

x / y

x divisé par y

4.0 / 1.25

3.2

x // y

x divisé par y (division du sol)

4.0 / 1.25

3.0

x % y

x modulo y

8 % 3

2

-x

expression négative de x

x = 5

-x

-5

+x

x est inchangé

x = 5

+x

5

x ** y

x puissance y

2 ** 3

8

Multiplication

!Rank! * 2

Calculer le volume d'une sphère à partir du champ de rayon.

4 / 3 * math.pi * !Radius! ** 3

Fonctions Python intégrées

Python contient plusieurs fonctions intégrées pouvant être utilisées, notamment max, min, arrondis et somme.

Calculez la valeur maximale pour chaque enregistrement d’une liste de champs.

max([!field1!, !field2!, !field3!])

Calculez la somme pour chaque enregistrement d’une liste de champs.

sum([!field1!, !field2!, !field3!])

Utilisation de blocs de code

Avec des expressions Python et le paramètre Bloc de code, vous pouvez :

La façon dont le bloc de code est utilisé est déterminée par le Type d'expression. L'outil Calculer un champ prend en charge PYTHON, PYTHON_9.3 et VB comme types d'expression.

Type d'expression

Bloc de code

PYTHON_9.3

Prend en charge la fonctionnalité Python. Le bloc de code est exprimé à l'aide de fonctions Python (def). Les propriétés de géométrie sont exprimées à l'aide d'objets de géotraitement tels que les objets Point, le cas échéant.

PYTHON

Comme PYTHON_9.3, mais renvoie des chaînes au lieu d'objets de géométrie.

VB

Les calculs sont effectués à l'aide de VBScript.

Les fonctions Python sont définies à l'aide du mot-clé def de Python, suivi du nom de la fonction et des paramètres en entrée de la fonction. Les valeurs sont renvoyées de la fonction à l'aide de l'instruction return. Vous choisissez le nom de fonction (il ne doit pas contenir d'espace ni commencer par un nombre).

Utilisation du calculateur de valeurs de champ
RemarqueRemarque :

Gardez à l'esprit que Python applique une indentation du code dans le cadre de la syntaxe. Utilisez deux ou quatre espaces pour définir chaque niveau logique. Alignez le début et la fin des blocs d'instruction en restant cohérent.

Exemples de code-math

Arrondi d'une valeur de champ à deux décimales.

Expression:
round(!area!,2)

Expression Type:
PYTHON_9.3

Utilisation du module math pour convertir des mètres en pieds. La conversion est élevée à la puissance 2 et multipliée par la surface.

Expression:
MetersToFeet((float!shape.area))

Expression Type:
PYTHON_9.3

Code Block:
import math
def MetersToFeet(area):
  return math.pow(3.2808,2) * area

Calcul des valeurs de champs à l'aide de logique avec Python

Classification selon des valeurs de champ.

Expression:
Reclass(!WELL_YIELD!)

Expression Type:
PYTHON_9.3

Code Block:
def Reclass(WellYield):
  if (WellYield >= 0 and WellYield <= 10):
    return 1
  elif (WellYield > 10 and WellYield <= 20):
    return 2
  elif (WellYield > 20 and WellYield <= 30):
    return 3
  elif (WellYield > 30):
    return 4

Calcul de valeurs de champs à l'aide de logique avec VBScript

Exécute de façon conditionnelle un groupe d'instructions en fonction de la valeur d'une expression.

Expression:
PopulationDensity = density

Expression Type:
VB

Code Block:
Dim density
If [POP90_SQMI] < 100 Then
density = "low"

elseif [POP90_SQMI] < 300 Then
density = "medium"

else
density = "high"
end if

Exemples de code-géométrie

RemarqueRemarque :

Pour plus d'informations sur la conversion d'unités de géométrie, consultez la section "Conversions d'unité de géométrie" ci-dessous.

Calcul de la surface d'une entité.

Expression:
!shape.area!

Expression Type:
PYTHON_9.3

Calcul de l'abscisse maximale d'une entité.

Expression:
!shape.extent.XMax!

Expression Type:
PYTHON_9.3

Calcul du nombre de sommets d'une entité.

Expression:
MySub(!shape!)

Expression Type:
PYTHON_9.3

Code Block:
def MySub(feat):    
 partnum = 0

 # Count the number of points in the current multipart feature
 partcount = feat.partCount
 pntcount = 0

 # Enter while loop for each part in the feature (if a singlepart feature
 # this will occur only once)
 #
 while partnum < partcount:
  part = feat.getPart(partnum)
  pnt = part.next()

  # Enter while loop for each vertex
  #
  while pnt:
   pntcount += 1   
   pnt = part.next()
   
   # If pnt is null, either the part is finished or there is an 
   # interior ring
   #
   if not pnt: 
    pnt = part.next()
  partnum += 1
 return pntcount

Pour une classe d'entités points, déplacer la coordonnée x de chaque point de 100.

Expression:
shiftXCoordinate(!SHAPE!)

Expression Type:
PYTHON_9.3

Code Block:
def shiftXCoordinate(shape):
   shiftValue = 100
   point = shape.getPart(0)
   point.X += shiftValue
   return point

Conversions d'unités de géométrie

Les propriétés de forme et de longueur du champ de géométrie peuvent être modifiées avec des types d'unité exprimés avec un signe @.

RemarqueRemarque :

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 pied) est fournie, le calcul de la longueur sera converti à l'aide d'un algorithme géodésique.

AttentionAttention :

Convertir les unités surfaciques des données d'un système de coordonné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.

Calcul de la longueur d'une entité en yards.

Expression:
!shape.length@yards!

Expression Type:
PYTHON_9.3

Calcul de la surface d'une entité en acres.

Expression:
!shape.area@acres!

Expression Type:
PYTHON_9.3

Exemples de code-dates

Calcul de la date courante.

Expression:
time.strftime("%d/%m/%Y")

Expression Type:
PYTHON_9.3

Calcul de la date et de l'heure courantes.

Expression:
time.strftime("%d/%m/%Y %H:%M")

Expression Type:
PYTHON_9.3

Exemples de code-chaînes

Extraction des trois caractères les plus à droite.

Expression:
!SUB_REGION![-3:]

Expression Type:
PYTHON_9.3

Remplacement de tous les "P" majuscules par des "p" minuscules.

Expression:
!STATE_NAME!.replace("P","p")

Expression Type:
PYTHON_9.3

Concaténation de deux champs avec un espace comme séparateur.

Expression:
!SUB_REGION! + " " + !STATE_ABBR!

Expression Type:
PYTHON_9.3

Conversion à la casse appropriée

Les exemples suivants illustrent les différentes manières de convertir des mots afin que la première lettre de chaque mot soit une majuscule et le reste des lettres en minuscules.

Expression:
' '.join([i.capitalize() for i in !STATE_NAME!.split(' ')])

Expression Type:
PYTHON_9.3
Expression:
string.capwords(!STATE_NAME!, ' ')

Expression Type:
PYTHON_9.3

Expression Type:
import string
Expression:
MySub(!STATE_NAME!)

Expression Type:
PYTHON_9.3

Code Block:
def MySub(myfieldname):
 import string 
 return string.capwords(myfieldname, ' ')

Calculs accumulatifs et séquentiels

Calcul d'un ID ou d'un nombre séquentiel selon un intervalle.

Expression:
autoIncrement()

Expression Type:
PYTHON_9.3

Code Block:
rec=0
def autoIncrement():
 global rec
 pStart = 1 #adjust start value, if req'd 
 pInterval = 1 #adjust interval value, if req'd
 if (rec == 0): 
  rec = pStart 
 else: 
  rec = rec + pInterval 
 return rec

Calcul de la valeur accumulative d'un champ numérique.

Expression:
accumulate(!FieldA!)

Expression Type:
PYTHON_9.3

Code Block:
total = 0
def accumulate(increment):
 global total
 if total:
  total += increment
 else:
  total = increment
 return total

Calcul du pourcentage d'augmentation d'un champ numérique.

Expression:
percentIncrease(float(!FieldA!))

Expression Type:
PYTHON_9.3

Code Block:
lastValue = 0
def percentIncrease(newValue):
 global lastValue
 if lastValue:
  percentage = ((newValue - lastValue) / lastValue)  * 100
 else: 
  percentage = 0
 lastValue = newValue
 return percentage

Valeurs aléatoires

Utilisation du site-package numpy pour calculer des valeurs réelles simples entre 0,0 et 1,0.

Expression:
getRandomValue()

Expression Type:
PYTHON_9.3

Code Block:
import numpy.random as R

def getRandomValue():
    return R.random()

7/10/2012