ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • Aide
  • Sign Out
ArcGIS Desktop

ArcGIS Online

La plateforme cartographique de votre organisation

ArcGIS Desktop

Un SIG professionnel complet

ArcGIS Enterprise

SIG dans votre entreprise

ArcGIS Developers

Outils de création d'applications de localisation

ArcGIS Solutions

Modèles d'applications et de cartes gratuits pour votre secteur d'activité

ArcGIS Marketplace

Téléchargez des applications et des données pour votre organisation.

  • Documentation
  • Support
Esri
  • Se connecter
user
  • Mon profil
  • Déconnexion

ArcMap

  • Accueil
  • Commencer
  • Carte
  • Analyser
  • Gérer les données
  • Outils
  • Extensions

Exemples d'utilisation de l'outil Calculer un champ

  • Calculs simples
  • Fonctions intrinsèques Python
  • Utilisation de blocs de code
  • Exemples de code : math
  • Calcul des valeurs de champs à l'aide de logique avec Python
  • Calcul de valeurs de champs à l'aide de logique avec VBScript
  • Exemples de code-géométrie
  • Conversions d'unités de géométrie
  • Exemples de code-dates
  • Exemples de code-chaînes
  • Calculs accumulatifs et séquentiels
  • Valeurs aléatoires
  • Calcul de valeurs Null

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

Remarque :
  • 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, notez que Python respecte la casse. Ainsi, value n'est pas équivalent à Value.
  • VBScript ne vous permet pas de déclarer des types de données explicitement ; toutes les variables sont implicitement de type Variant. 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. Dans le tableau suivant, nous supposons que !fieldname! est un champ de type chaîne avec une valeur « abcde ».

ExempleExplicationRésultat

!fieldname![0]

Premier caractère.

"a"

!fieldname![-2]

Avant-dernier caractère.

« d »

!fieldname![1:4]

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

"bcd"

Python prend également en charge la mise en forme de chaîne à l'aide de la méthode str.format().

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

"{}:{}".format(!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, InStr et Chr. 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, notamment math, cmath, decimal, random, itertools, functools et operator.

OpérateurExplicationExempleRé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

Lorsque vous effectuez des calculs de champ avec une expression Python, les règles mathématiques de Python sont appliquées. Par exemple, la division de deux entiers produira toujours une sortie de nombre entier (3 / 2 = 1). Une sortie décimale est produite des manières suivantes :

  • L'un des nombres dans l'opération doit être une valeur décimale : 3.0/2 = 1.5.
  • Utilisez la fonction float pour convertir explicitement la valeur en un réel simple :
    float(3)/2 = 1.5
    

    float(!Population!) / !Area!
    

Fonctions intrinsèques Python

Python comporte plusieurs fonctions intrinsèques qui peuvent être utilisées, notamment max, min, round et sum.

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

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

Calculez la somme pour chaque enregistrement dans 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 :

  • utiliser n'importe quelle fonction Python dans l'expression,
  • Accéder aux fonctions et aux objets de géotraitement.
  • accéder aux propriétés de géométrie d'entité,
  • accéder au nouvel opérateur de valeur aléatoire,
  • reclasser des valeurs à l'aide d'une logique if-then-else,

La façon dont le bloc de code est utilisé est déterminée par l'analyseur utilisé. La calculatrice de valeurs de champs prend en charge les analyseurs Python et VBScript.

AnalyseurBloc de code

Python

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.

VBScript

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 arguments en entrée de la fonction. Une fonction Python peut être écrite pour accepter tout nombre d'arguments en entrée (y compris aucun). Les valeurs sont renvoyées à partir de la fonction à l'aide de l'instruction return. Vous choisissez le nom de la fonction (il ne doit toutefois pas contenir d'espace ni commencer par un chiffre).

Utilisation du calculateur de champs
Remarque :

Si aucune valeur n'est explicitement renvoyée à partir d'une fonction à l'aide d'une instruction return, la fonction renvoie None.

Remarque :

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)
Analyseur :
Python

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.

Analyseur :
Python
Expression :
MetersToFeet((float(!shape.area!)))
Bloc de code :
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.

Analyseur :
Python
Expression :
Reclass(!WELL_YIELD!)
Bloc de code :
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.

Analyseur :
VB Script
Expression :
density
Bloc de code :
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

Remarque :

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

Calcul de la surface d'une entité.

Analyseur :
Python
Expression :
!shape.area!

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

Analyseur :
Python
Expression :
!shape.extent.XMax!

Calcul du nombre de sommets d'une entité.

Analyseur :
Python
Expression :
MySub(!shape!)
Bloc de code :
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.

Analyseur :
Python
Expression :
shiftXCoordinate(!SHAPE!)
Bloc de code :
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 surface et de longueur du champ de géométrie peuvent être modifiées avec des types d'unité exprimés avec un signe @.

  • 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
Remarque :

Si les données sont stockées dans un système de coordonnées géographiques et qu'une unité linéaire (par exemple, pieds) est fournie, le calcul de longueur sera converti à l'aide d'un algorithme géodésique.

Attention :

La conversion des unités de surface pour des données dans un système de coordonnées géographiques donnera des résultats douteux, puisque les degrés décimaux ne sont pas cohérents sur l'ensemble du globe.

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

Analyseur :
Python
Expression :
!shape.length@yards!

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

Analyseur :
Python
Expression :
!shape.area@acres!

La surface et la longueur géodésiques peuvent également être calculées à l'aide des propriétés geodesicArea and geodesicLength avec @ suivi d'un mot-clé d'unité de mesure.

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

Analyseur :
Python
Expression :
!shape.geodesicLength@yards!

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

Analyseur :
Python
Expression :
!shape.geodesicArea@acres!

Exemples de code-dates

Calcul de la date courante.

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

Calcul de la date et de l'heure courantes.

Analyseur :
Python
Expression :
datetime.datetime.now()

Calcul de la date comme étant le 31 décembre 2000.

Analyseur :
Python
Expression :
datetime.datetime(2000, 12, 31)

Calcule le nombre de jours compris entre la date actuelle et la valeur d'un champ.

Analyseur :
Python
Expression :
(datetime.datetime.now() - arcpy.time.ParseDateTimeString(!field1!)).days

Calcule une date en ajoutant 100 jours à la valeur de date d'un champ.

Analyseur :
Python
Expression :
arcpy.time.ParseDateTimeString(!field1!) + datetime.timedelta(days=100)

Calcule le jour de la semaine (par exemple, dimanche) pour une valeur de date d'un champ.

Analyseur :
Python
Expression :
arcpy.time.ParseDateTimeString(!field1!).strftime('%A')

Exemples de code-chaînes

Extraction des trois caractères les plus à droite.

Analyseur :
Python
Expression :
!SUB_REGION![-3:]

Remplacement de tous les P majuscules par des p minuscules.

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

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

Analyseur :
Python
Expression :
!SUB_REGION! + " " + !STATE_ABBR!

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.

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

Analyseur :
Python
Expression :
!STATE_NAME!.title()

Expressions régulières

Le module re de Python permet d'exécuter des opérations de correspondance d'expressions régulières que vous pouvez utiliser pour exécuter des règles complexes de correspondance et de remplacement de modèles pour des chaînes.

Remplacez St ou St. au début d'un nouveau mot à la fin de la chaîne par le mot Street.

Analyseur :
Python
Expression :
update_street(!ADDRESS!)
Bloc de code :
import re
def update_street(street_name):
    return re.sub(r"""\b(St|St.)\Z""",  
                  'Street',
                  street_name)

Calculs accumulatifs et séquentiels

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

Analyseur :
Python
Expression :
autoIncrement()
Bloc de code :
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.

Analyseur :
Python
Expression :
accumulate(!FieldA!)
Bloc de code :
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.

Analyseur :
Python
Expression :
percentIncrease(float(!FieldA!))
Bloc de code :
lastValue = 0
def percentIncrease(newValue):
    global lastValue
    if lastValue:
        percentage = ((newValue - lastValue) / lastValue)  * 100
    else: 
        percentage = 0
    lastValue = newValue
    return percentage

Valeurs aléatoires

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

Analyseur :
Python
Expression :
getRandomValue()
Bloc de code :
import numpy
def getRandomValue():
    return numpy.random.random()

Calcul de valeurs Null

A l'aide d'une expression Python, les valeurs Null peuvent être calculées avec une valeur Python None.

Remarque :

Le calcul suivant fonctionnera seulement si le champ accepte les valeurs Null.

Utilisez un Python Aucun pour calculer des valeurs Null.

Analyseur :
Python
Expression :
None

Rubriques connexes

  • Notions de base des calculs de champ
  • Exécution de calculs de champs
  • Calcul de la surface, de la longueur et d'autres propriétés géométriques
  • Modification de la casse des valeurs de champ texte

ArcGIS Desktop

  • Accueil
  • Documentation
  • Support

ArcGIS

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS
  • ArcGIS Developer
  • ArcGIS Solutions
  • ArcGIS Marketplace

A propos d'Esri

  • A propos de la société
  • Carrières
  • Blog d’Esri
  • Conférence des utilisateurs
  • Sommet des développeurs
Esri
Donnez-nous votre avis.
Copyright © 2021 Esri. | Confidentialité | Légal