Vous êtes sur la page 1sur 76

Initiation à Python avec ArcGIS

Hervé BOHBOT
v. 1.1 – décembre 2013

HB – Programmation d’ArcGIS – Support de cours

Hervé BOHBOT
Ingénieur de recherche, SIG et télédétection
Archéologie des Sociétés Méditerranéennes – CNRS UMR 5140
390, avenue de Pérols – 34970 Lattes
 04 67 15 61 35 –  04 67 22 55 15 – herve.bohbot@cnrs.fr
Som m a ir e
Introduction 3
1ère partie – Le langage Python
1. Questions préliminaires 5
2. Les bases : principaux types de données et structures 11
3. Programmation objet avec Python 26

2ème partie – Python avec ArcGIS


4. Python dans ArcGIS 31
5. Accès aux données 38
6. Filtres, curseurs, sélections et symbologies 48
7. Géométries 55
8. Eléments de mise en page 63
9. Scripts et outils 66
10. Création de compléments (add-in) 70

Conclusion 73
Annexes 75

3
Introduction

Pourquoi programmer avec ArcGIS ?

 Pour automatiser les tâches répétitives et gagner du temps.

 Parce qu'on a souvent besoin d’une fonction non fournie en standard.

 Parce que l’utilisation de programmes faits par d’autres est parfois frustrante.

 Pour être autonome.

7 HB – Programmation d’ArcGIS – Support de cours

Objectifs du cours
 Découvrir les bases du langage Python.

 Fournir de petits exemples de codes réutilisables (snippets).

 Permettre de comprendre, modifier, utiliser des scripts ou programmes écrits en


Python.

 Savoir utiliser les outils de géotraitement, manipuler des données


géographiques et automatiser des tâches pour gagner du temps.

 Donner l'envie d'aller plus loin.

8 HB – Programmation d’ArcGIS – Support de cours

4
1. Questions
préliminaires

HB – Programmation d’ArcGIS – Support de cours

Som m a ir e

 Quels outils et pour quoi faire ?

 Qu'est-ce que Python ?

 Pourquoi utiliser Python ?

 Quelle version avec ArcGIS ?

 Comment utiliser Python ?

• La fenêtre Python dans ArcGIS

• Editeurs externes : IDLE, PythonWin, PyScripter

10 HB – Programmation d’ArcGIS – Support de cours

5
Quels outils pour quoi faire ?
L’environnement de développement d’ArcGIS est constitué de divers outils.
 Personnaliser l'interface d'ArcGIS  boîte de dialogue Personnaliser.
 Ajouter des éléments à l'interface utilisateur (boutons, menus, barres d'outils…)
 compléments (add-in), développés en .NET, Java ou Python (depuis la v. 10.1).
 Créer une application autonome basée sur des composants d'ArcGIS, gérer
l'interactivité avec l'utilisateur (souris, clavier, etc.)  développement avec .NET
(Visual Studio Express) ou Java (Eclipse), basé sur la librairie ArcObjects.
 Enchaîner un ensemble de traitements sans programmation  Model builder.
 Automatiser l'utilisation d'outils de géotraitement, la lecture et l'écriture de
données, la production cartographique  développement avec des scripts Python.
 Faire tout ça (sauf les applications autonomes)  VBA avec ArcObjects, mais
disparition annoncée (ArcGIS 11).

11 HB – Programmation d’ArcGIS – Support de cours

Qu ’e st - ce qu e Pyt h on ?
 Langage de programmation, structuré et orienté objet.
 Licence open source, multiplateformes (Windows, Linux/Unix, Mac Os…).
 Syntaxe relativement simple.

 Créé en 1991 par Guido van Rossum (toujours développeur du projet).


 Nommé en référence aux Monty Python (!)

 Diverses implémentation : CPython (standard), Jython (java), IronPython…

 Site web : www.python.org


 Versions courantes : 2.7.6 et 3.3.3
 Fichiers Python : simples fichiers texte (extension *.py).

Dans l'anglaise langue, se prononce


[paille-feun]

12 HB – Programmation d’ArcGIS – Support de cours

6
Pou r qu oi u t ilise r Pyt h on ?
 Langage facilement lisible : utilisation d'espaces et d'indentations plutôt que
des caractères ou des mots-clés pour délimiter les blocs de commandes.
 Très nombreux modules dans la distribution standard.
 Syntaxe "élégante" : il faut souvent trois fois moins de lignes que pour écrire la
même chose dans un autre langage.
 Approche "multi-paradigme" : la programmation peut être orientée objet ou
procédurale, ce qui permet une flexibilité dans la résolution d'un problème.
 Langage extensible : des bibliothèques permettent d'ajouter des fonctionnalités
à la distribution standard du logiciel (connexion à une base de donnée, interface
graphique (wxPython, PyQt), traitement XML (pyXML), traitement d'images.
 Interfaces avec des bibliothèques écrites dans d'autres langages (numpy pour le
calcul scientifique, écrit en C).
 Largement utilisé : langage de scripts de nombreux logiciels (SPSS, Gimp,
Maya…) et des jeux (Quake…), administration du moteur de recherche Google...

13 HB – Programmation d’ArcGIS – Support de cours

Qu e l Pyt h on a ve c Ar cGI S ?
 9.x : Introduction de Python comme langage de script pour ArcGIS.

PYTHON version 2.7 livrée avec ArcGIS 10.1

Installation de Python par défaut dans le répertoire c:\Python27


Chaque version d’ArcGIS est prévue pour fonctionner avec une version Python
donnée, installée avec : 9.2  2.4
9.3  2.5
10.0  2.6
10.1  2.7
10.2  2.7.3
Développer avec ArcGIS, où comment régulièrement reprogrammer la roue :

AML (pour ArcInfo, jusqu'à 7.x) VBA .Net (VB, C#)


Avenue (pour ArcView, jusqu'à 3.x)
Langages propriétaires
(ArcGIS 8.0 à 10.2) Java, Python
2001 2013

14 HB – Programmation d’ArcGIS – Support de cours

7
Où u t ilise r Pyt h on ?
 Les programmes écrits en Python (scripts) peuvent être exécutés dans une
application ArcGIS ou en dehors d’ArcGIS.
 Les fichiers Python (*.py) sont de simples fichiers texte qui peuvent être écrits
avec de nombreux éditeurs. Des versions "compilées" (*.pyc, *.pyo) peuvent être
générées à partir des fichiers *.py

 Ligne de commande : menu Démarrer, ArcGIS, Python 2.7, Python (command line)

 « Fenêtre Python » dans les applications ArcGIS.

 Environnements de développement intégré (IDE), fournissant plus ou moins de


confort de développement : IDLE et PythonWin fournis avec ArcGIS (assez
basiques) ou tiers.
15 HB – Programmation d’ArcGIS – Support de cours

Fe n ê t r e Pyt h on Menu Géotraitement / Python ou icône

Prompt >>>
Entrée 2 fois exécute la commande

1
Fenêtre d’aide (syntaxe
Fenêtre de commande des fonctions…)
La fenêtre Python permet d’exécuter une ou plusieurs lignes de code structuré et remplace la ligne de
Commande des versions d’ArcGIS < 10.0
16 HB – Programmation d’ArcGIS – Support de cours

8
Pyt h on I D LE
 Python’s Integrated
DeveLopment Environment
 Menu Démarrer / ArcGIS /
Python 2.7 / IDLE (Python GUI)
 Interface développée en
Python, basée sur la librairie
graphique Tk/Tcl.

Nombreuses autres interfaces de


développement pour Python.

17 HB – Programmation d’ArcGIS – Support de cours

Pyt h on W in
 Application plus livrée depuis ArcGIS 10.1 et à télécharger sur
http://sourceforge.net/projects/pywin32/files/pywin32/ , version en cours build 218)
 Extensions Python pour Microsoft Windows (accès aux objets de l’API Win32 et
aux objets COM).
 Débogueur intégré.
 Nécessaire pour exécuter
d’anciens scripts ArcGIS et ceux
utilisant la librairie win32com.

18 HB – Programmation d’ArcGIS – Support de cours

9
PyScr ipt e r
Editeur gratuit et open source, fournissant un environnement de développement
très élaboré et confortable :

 Multifenêtrage et onglets :
console, fenêtres de code,
débogage, variables, etc.
 Auto-complétion du code
détaillée.

Pour utiliser les outils d'ArcGIS dans


PyScripter, il faut référencer la librairie
arcpy dans le menu Outils / Options /
Options de l'IDE, rubrique Code
completion, à la ligne Special
packages, il suffit de rajouter arcpy.

Télécharger sur : http://code.google.com/p/pyscripter/

19 HB – Programmation d’ArcGIS – Support de cours

10
2. Bases du langage
Python

HB – Programmation d’ArcGIS – Support de cours

Som m a ir e

Concepts de base du langage Python :


 Variables et typage de données
 Commentaires
 Type chaîne
 Types numériques et opérateurs
 Structures de contrôle (tests conditionnels, boucles)
 Procédures, fonctions et modules
 Gestion d’erreurs
 Types séquence (chaînes, listes, tuples) et dictionnaires
 Types date
 Fichiers texte

22 HB – Programmation d’ArcGIS – Support de cours

11
Va r ia ble s
Une variable est créée et initialisée dans un type donné dans un même temps :
 Pas de déclaration préalable.
 Pas de type à déclarer explicitement (typage dynamique).
 Affectation avec le signe égale.

Règles d’utilisation :
 L’initiale doit être une lettre ou "_".
 La longueur du nom n’est pas limitée, mais ne doit pas contenir d’espace ou de caractères spéciaux.
 Les noms sont sensibles à la casse : toto, Toto et TOTO sont 3 variables différentes.
 Une variable doit être initialisée avant d’être utilisée.
 Il est recommandé de donner des noms explicites, de grouper des mots et de capitaliser les initiales à
l’intérieur du nom, ex. bufferDistance (les majuscules initiales sont réservées aux noms de classes).
 Ne pas utiliser les mots réservés du langage :

23 HB – Programmation d’ArcGIS – Support de cours

Affichage de la valeur d’une variable :


 En entrant son nom au prompt.
 En utilisant la commande print
• permet d'afficher plusieurs valeurs,
variables, en les séparant par des
virgules.
• sépare les différents éléments affichés
par des espaces.

Affectation multiple :
Noter les différences d'affichage entre
IDLE (exemples du haut) et fenêtre
Python d'ArcGIS (exemples du bas).
Affectation parallèle :

Afficher le type d’une variable : fonction type()

Détruire une variable : del

24 HB – Programmation d’ArcGIS – Support de cours

12
Com m e n t a ir e s

Les commentaires du programme sont introduits par le signe : #


Ils peuvent figurer en début de ligne ou non.
Fondamentaux pour expliquer le rôle et le fonctionnement d'un programme :
- Description des variables, paramètres…
- Séparation des différentes parties d'un programme.
pour l'utilisateur comme pour le programmeur.

" Pse udo- com m e nt a ir e s"

Information sur le codage des caractères utilisés dans un fichier de code source.
À préciser en première ligne du fichier source (code par défaut : ASCII).

# -*- coding: cp1252 -*- Page de code 1252 (Windows), langues d'Europe occidentale.

# -*- coding: utf_8 -*- Utilisation des caractères Unicode : é = é, à = Ã, etc.

Liste des codecs (encodeurs-décodeurs) de texte :


http://docs.python.org/2.7/library/codecs.html#module-codecs

25 HB – Programmation d’ArcGIS – Support de cours

Type st r in g ( ch a în e de ca r a ct è r e s)
Suite quelconque de caractères délimités par des apostrophes ou des guillemets.
 Les guillemets peuvent délimiter une chaîne contenant des apostrophes et vice-versa.

Opérateur + permet de
concaténer… des chaînes

 La fonction str() permet de transformer une expression numérique en chaîne.

 Le caractère \ ajoute des possibilités complémentaires :


• En fin de ligne, permet d'écrireune commande sur plusieurs lignes
• \n insère un saut de ligne dans une chaîne de caractères
• \' permet d'insérer une apostrophe dans une chaine entourée d'apostrophes.

Le préfixe r (pour raw string) devant une chaîne indique que le caractère \ doit être
traité comme un caractère standard. Le préfixe u spécifie une chaîne Unicode.
26 HB – Programmation d’ArcGIS – Support de cours

13
 Ou bien n'importe quoi entouré de triples """ ou '''

Composition d’expressions et formatage de texte :

Utilisation de paramètres de substitution en précisant ou non le nombre de


caractères représentés : %s (chaîne quelconque), %2d (nombre sur au moins
deux caractères), %5.2f (nombre sur 5 caractères minimum dont 2 décimales)
insérés dans une chaîne et passés en arguments après le signe % :

27 HB – Programmation d’ArcGIS – Support de cours

Type s n u m é r iqu e s e t opé r a t e u r s m a t h é m a t iqu e s


Types entier (int), entier long (long), réel (float) et nombre complexe (complex).
Conversions avec les fonctions prédéfinies int(), long(), float(), complex()
Opérations arithmétiques de base : +, -, *, /
 La division d'entiers est entière (Python < 3).
 Type float si le nombre contient un point ou exposant,

 Opérateurs division entière // , modulo % , puissance **

 Fonction eval(chaine) : évaluation d'un nombre ou d'une expression numérique

Priorité des opérations dans une instruction :


Opérations-affectations (à éviter) :
+=, -=, *=, /=
parenthèses, exposants, multiplication et
division, addition et soustraction

28 HB – Programmation d’ArcGIS – Support de cours

14
Fonctions mathématiques
Les plus courantes sont dans un module externe de Python appelé math.
Pour les utiliser il faut utiliser le commande import (ce qui donne accès aux fonctions du
module) :
Appel de fonction avec préfixe math.

Le nom de la fonction est importé :


utilisation directe.

Quelques autres fonctions de math : Le point après le nom du module permet


math.pi, math.e renvoient les constantes pi et e d'utiliser les fonctions disponibles.
 trunc(x) : partie entière  Dans IDLE, Ctrl-Espace affiche la liste.
 floor(x), ceil(x) : entier inférieur, entier
supérieur  Dans la fenêtre Python d'ArcGIS, les
 degrees(x), radians(x) : conversions fonctions s'affichent automatiquement.
 log(x), exp(x) : logarithme, exponentielle L'interpréteur reconnaît les modules et
 sin(x), cos(x), tan(x), atan(x), sinh(x), etc. permet l'autocomplétion du nom.
fonctions trigonométriques.

Fonctions intégrées : abs(x), valeur absolue ; round(x, n), arrondi ; pow(x,y), puissance, etc.
29 HB – Programmation d’ArcGIS – Support de cours

I n t e r a ct ion a ve c l'u t ilisa t e u r

Demander à l'utilisateur d'introduire une valeur d'entrée d'un programme.

Fonctions prédéfinies input() et raw_input()


Les parenthèses peuvent contenir un message explicatif :

prenom = raw_input(u"Entrez votre prénom : ")


print "Bonjour ", prenom

Remarquez l'aide quand le nom de la fonction


est reconnu par l'interpréteur.

 raw_input() renvoie toujours une chaîne de caractères. Les nombres peuvent


être ensuite convertis avec int() et float().
 input() renvoie une valeur correspondant à ce que l'utilisateur a entré (les
chaînes de caractères doivent être entourées de guillemets).

30 HB – Programmation d’ArcGIS – Support de cours

15
I n st r u ct ion s con dit ion n e lle s
if x > 0 :
Si… sinon… ou alors… print x, " est positif"

 Remarquer l'indentation automatique après avoir validé la première ligne se


terminant par deux points (:).
 L'absence d'indentation causerait une erreur.
 Indentation standard de 4 caractères.
 Délimitation claire des blocs de commandes = programme lisible.

if x > 0 : if x > 0 :
print x, " est positif" print x, " est positif"
else: elif x < 0 :
print x, " est négatif ou nul" print x, " est négatif"
else:
print x, " est nul"

Un bloc comprend 0 ou 1 else ; 0, 1 ou plusieurs elif (else if)

31 HB – Programmation d’ArcGIS – Support de cours

Opérateurs de comparaison Booléens : True, False


 Majuscule obligatoire.

x == y # x est égal à y
x != y # x est différent de y Tout nombre non nul, structure (chaînes,
x <> y # idem listes, ensembles, etc.) non vide est
évaluée à True.

x > y # x est supérieur à y
x >= y # x est supérieur ou égal à y Le chiffre 0, toute structure vide est
x < y # x est inférieur à y évaluée à False.
x <= y # x est inférieur ou égal à y
x is y # x est le même objet que y
x is not y # x est un objet différent de y

Les opérateurs peuvent être enchaînés :

Inutile de préciser : if x == True:

Absence de valeur : None



Opérateurs logiques : and, or, not
Majuscule obligatoire.
 Valeur différente de 'vide' (False)

x and y # ET logique
Test d'une variable avec is / is not

x or y # OU logique
not x # évalué à la valeur opposée à x Ex: paramètre facultatif d'une fonction.

32 HB – Programmation d’ArcGIS – Support de cours

16
I n st r u ct ion s com posé e s
En-tête :
Instruction if, elif, else, while, def…
suivie d'un deux points
en dehors des indentations, les espaces sont non significatifs

en-tête :
bloc indenté

Le premier bloc ne peut pas être indenté


>>> print "Hello" ( erreur)

Indentations standard : multiples de 4


Même bloc = même indentation
if embranchement == "Vertébrés":
if classe == "Mammifères":
if ordre == "Carnivores":
if famille == "Canidés":
print "C'est peut-être un chien"

33 HB – Programmation d’ArcGIS – Support de cours

Bou cle W h ile

Répétition d’un bloc d’instructions si et tant qu’une condition est remplie.


La variable compteur doit être initialisée.

i = 0 i = 0 i = 0
while i < 5 : while i < 5 : while i < 5 :
i = i + 1 i = i + 1 i = i + 1
print i print i print i

1 résultat affiché 5 résultats affichés Erreur !

Si la condition initiale n'est pas remplie, le bloc est ignoré.


Si le bloc de données ne rend pas fausse la condition initiale : boucle infinie.

i = 0 Pour sortir d'une boucle infinie :


• Ctrl-F6 dans l"éditeur IDLE
while i < 5 : • Ctrl-F2 dans PyScripter
print "il fait beau" • Echap dans la fenêtre Python d'ArcGIS.

L'instruction break permet de sortir de la boucle.


34 HB – Programmation d’ArcGIS – Support de cours

17
Bou cle For

Répétition d’un bloc d’instructions un nombre défini de fois.


 Syntaxe : for élément in liste :
 élément prend successivement pour valeur chaque item de la liste.

La fonction range([début,] fin [, pas]) renvoie une liste de valeurs numériques (par
défaut, début à 0 et incrémentation de 1) :

L'instruction break permet de sortir prématurément du bloc de commandes.

35 HB – Programmation d’ArcGIS – Support de cours

Fonct ions
 Fonct ions in t é gr é e s ( built - in funct ions)
Plusieurs ont déj à ét é rencont rées.

Liste complète : http://docs.python.org/2.7/library/functions.html

 Fonct ions im por t é e s de m odules ou de packages ( collect ions


de m odules) fournis avec Pyt hon ou par d'aut res sources.
Un m odule est un fichier cont enant un ensem ble de définit ions de
fonct ions, propriét és et classes.
 dir ( m odule) list e les fonct ions d'un m odule.
 h e lp( m odule) en fournit une aide dét aillée.
import math # utilisation des fonctions avec préfixe math.
from math import sin # utilisation sans préfixe de sin()
from math import * # importation de tous les noms
from math import sqrt as racineCarree # redéfinition du nom

Modules fournis : http://docs.python.org/release/2.7/modindex.html

36 HB – Programmation d’ArcGIS – Support de cours

18
Module Fonctions
codecs Codage/décodage de caractères
csv Lecture/écriture de fichiers CSV
datetime Gestion des dates et heures
glob Recherche de fichiers avec caractères génériques (*, ?)
math Mathématiques
os Liées au système d'exploitation
pickle Sérialisation (transfert d'objets entre mémoire et fichier
binaire).
random Nombres aléatoires
re Expressions régulières (recherche de texte correspondant à
un modèle donné)
string Formatage de chaînes de caractères
sys Liées à l'interpréteur Python
zipfile Lecture/écriture de fichiers compressés

37 HB – Programmation d’ArcGIS – Support de cours

Fon ct ion s pe r son n a lisé e s


 Mêmes règles de nommage que
Même mot réservé pour déclarer une pour les variables.
procédure (sans renvoi de résultat) ou une  Paramètres séparés par des
fonction (avec renvoi de résultat) : def virgules.
def nomFonction(liste de paramètres):  Paramètres facultatifs initialisés
bloc d'instructions
avec None.
 Parenthèses vides si pas de
def nomFonction(liste de paramètres):
bloc d'instructions
return résultat
paramètres.
 Plusieurs return possibles.
 Valeur None si pas de return ou si
return sans argument.
 Ligne de description de la fonction
sous la déclaration d'en-tête,
docstring utilisée par help() :

38 HB – Programmation d’ArcGIS – Support de cours

19
Variables locales et globales
Les variables utilisées dans une fonction sont locales sauf si elles sont
déclarées global avant leur affectation.

Comparer les
valeurs des
variables loc et glo
dans les exemples
1 et 2.

Modules personnalisés
Créés par l'ut ilisat eur et enregist rées dans un fichier * .py ( qui devient
un m odule) et t ransform é en * .pyc ou * .pyo ( byt e code) , code
" com pilé" lors de l'im port at ion.

39 HB – Programmation d’ArcGIS – Support de cours

Sé qu e n ce s ( it e r a ble s)
Types de données définis comme des séries de caractères ou d’éléments,
modifiables ou non :
 Chaînes de caractères (type string).
 Listes (collection modifiable d'éléments, type list).
 Tuples (liste non modifiable, type tuple).

Quelques fonctions s'appliquant aux séquences :


 len(seq) : longueur d'une chaine de caractères, nombre d'éléments d'une
liste, d'un tuple ou d'un dictionnaire.
 min(seq), max(seq) : plus petit ou plus grand élément d'un séquence.
 map(fonction, seq) : applique une fonction à chaque élément de la séquence.
 sorted(seq) : trie les éléments d'une séquence.

Les séquences supportent aussi l'addition


et la multiplication (opérateurs + et *)

40 HB – Programmation d’ArcGIS – Support de cours

20
Chaînes de caractères
Séquence ordonnée de caractères, accessibles un à un.
 Extraire des parties d'une chaîne :

Premier caractère : indice 0 ch[i] # le caractère i+1


ch[:i] # du début jusqu'au ième caractère
ch[i:] # du caractère i+1 à la fin
ch[i:j] # du caractère i+1 à j

 Fonctions chr(x) et ord(c), passage code ASCII / caractère.

 Mise en majuscules, minuscules  Transformer une chaîne en liste à l'aide


upper(), lower(), title() d'un séparateur, méthode split(sep)
méthodes appliquées à une
chaîne

41 HB – Programmation d’ArcGIS – Support de cours

Listes

Collection ordonnée d'éléments (items) entre crochets, séparés par des virgules.
 Les éléments peuvent être de types différents.
listeFourreTout = [14, "clés", 12.4]
 Une liste peut-être un item d'une autre liste.
 Ajout, modification et suppression d’éléments (même indexation que les
chaînes).

Ajout d'un item (à la fin)

Insertion d'un item après le premier

Suppression des items 8 et 9,


s'obtient aussi avec la
commande del liste[7:9]

42 HB – Programmation d’ArcGIS – Support de cours

21
Méthodes append(élément) ; count(élément), nombre d'occurrences de élément ;
insert(rang, élément); pop(élément), retourne élément et le supprime de la liste ;
remove(élément), supprime élément ; sort(), trie la liste.

Opérateurs in et not in testent la présence d'un item dans une liste.

Fonction range([début,] fin [, pas]) renvoie une liste d'entiers.

Exemple d'utilisation d'une liste : ajout d'un répertoire à la liste des répertoires dans
lesquels Python recherche des scripts.

43 HB – Programmation d’ArcGIS – Support de cours

Tuples
Listes figées d'items (pas d'ajouts, suppressions, etc.) : intégrité maintenue dans le code.
 Accès aux items par indices comme pour les listes et chaînes de caractères.
 Eléments entre parenthèses (ou non), séparés par des virgules.
tupLR = ("Hérault", "Gard", "Lozère", "Aude", "Pyrénées-Orientales")
tupOlev = 144, 154, 46, 95, 144
tupSeul = ("Seul",) # un seul élément, il faut ajouter une virgule.

Méthodes index(valeur), renvoie l'indice et count(valeur), renvoie le nombre


d'occurrences d'un item donné.

Fonction zip(liste de séquences) renvoie une liste de tuples, chaque tuple


contenant le ième élément de chaque séquence en entrée. La liste est de la
longueur de la séquence le plus courte.

44 HB – Programmation d’ArcGIS – Support de cours

22
Dictionnaires
Collection non ordonnée de couples clé:valeur, séparés par des virgules et
placé entre accolades.
 Les clés doivent être uniques.
 Différent d'une séquence : pas de concaténation, d'extraction suivant un indice, etc.
 Utile pour stocker un ensemble de données avec des ajouts et des suppressions et
où l'ordre n'est pas important.

 Méthode get(clé) renvoie la valeur si la clé


existe, sinon None ou une valeur spécifiée.

45 HB – Programmation d’ArcGIS – Support de cours

Opérateurs in et not in testent la présence d'une clé (et non d'une valeur)
dans le dictionnaire.

Fonction dict() permet de créer un dictionnaire à partir de listes de doublets :


dict([[clé1,valeur1],[clé2,valeur2], …])

Méthodes items(), keys() et values() renvoient les listes de clé-valeur, clés,


ou valeurs du dictionnaire sous forme de listes ; has_key(k) est vrai si k est
existe ; clear() efface tous les items ; pop(k) efface la clé et retourne la
valeur, etc.

Exemple de comptage
des lettres d'un texte :

46 HB – Programmation d’ArcGIS – Support de cours

23
Tr a va ille r a ve c le s fich ie r s
Changer le répertoire courant :

Ouverture : fonction open(), en lecture ("r"), écriture ("w") ou ajout ("a").

Méthodes pour lire : read(nbcar), si nbcar est omis, lit tout le fichier ; readline(),
lit une ligne ; readlines(), transfère toutes les lignes dans une liste.
 Un fichier est lu séquentiellement, il n'est pas possible de "remonter".
 En fin de fichier, readline() renvoie une chaine vide.
 Une ligne vide dans le fichier contient en fait "\n" (caractère de terminaison
de ligne)
Méthode pour écrire : write(chaine)
 Pour faire un retour à la ligne, chaine doit se terminer par "\n"

Fermeture : fonction close().


 Le fichier n'est plus verrouillé par Python pour d'autres applications.

47 HB – Programmation d’ArcGIS – Support de cours

Ge st ion de s e r r e u r s ( e x ce pt ion s)
 Blocs d'instructions délimités par la séquence de mots-clés : try, except,
else, finally.
 Permet une exécution "sous réserve" du code et de "sortir proprement" en
cas d'erreur d'exécution du programme.
 Les blocs else et finally sont optionnels.
 Il peut y avoir plusieurs blocs except, chacun traitant un ou plusieurs types
d'erreurs donnés (SyntaxError, SystemError, ZeroDivisionError, etc.)

Liste des exceptions : http://docs.python.org/2.7/library/exceptions.html


48 HB – Programmation d’ArcGIS – Support de cours

24
Dates
Les classes (date, time, datetime, timedelta…) gérant les dates et l'heure se
trouvent dans le module datetime.

 Création d'un objet de type date avec la méthode date(année, mois, jour).
 Un objet date possède les propriétés year, month, day et une méthode
weekday() qui renvoie un chiffre de 0 à 6 pour les jours de la semaines du
lundi au dimanche.
 Date du jour : date.today()
 Date et heure actuelle : datetime.now(), objet datetime avec propriétés
hour, minute, second, microsecond en plus des propriétés de date.
 Différence entre deux dates est un objet de type timedelta (qui possède des
propriétés days, seconds, microseconds.
 La méthode strftime() crée une chaîne représentant une date-heure et la
méthode inverse strptime() crée une date-heure à partir de chaînes de
caractères. Elles possèdent de nombreuses directives : %A (nom du jour), %m
(numéro du mois), %y (année sans le siècle), etc.

Doc Python http://docs.python.org/2.7/library/datetime.html#module-datetime

49 HB – Programmation d’ArcGIS – Support de cours

I n t e r fa ce gr a ph iqu e : le m odu le Tk in t e r
 Pas de boîte de dialogue standard : possible d'utiliser une librairie graphique
telle que Tkinter (livrée avec Python).
 Manipulation de widgets (ou contrôles) : Entry() zone de saisie ; Button(),
bouton de commande ; Label(), étiquettes, menus, listes déroulantes…
définis sur une fenêtre initialisée par fonction Tk() et affichée par mainloop().
 Permet de répondre à des évènements utilisateur (clic souris, touche
pressée).
 Méthodes : pack() minimise occupation du widget dans la fenêtre,
bind(événement, réponse), définies sur les widgets.

50 HB – Programmation d’ArcGIS – Support de cours

25
3. Programmation objet
avec Python

HB – Programmation d’ArcGIS – Support de cours

Som m a ir e

 Concepts de base : classes, instances, propriétés, méthodes


 Création de classes d'objets
 Encapsulation
 Héritage
 Polymorphisme
 Utilisation des objets

52 HB – Programmation d’ArcGIS – Support de cours

26
Con ce pt s de ba se
Méthode de programmation se rapprochant du monde réel :
 composé d’objets : une carte, une voiture...
 possédant des propriétés (ou champs, attributs) : une échelle, une couleur…
 supportant des actions, appelées méthodes (procédures et fonctions) : zoomer,
démarrer...
 pouvant répondre à des événements (clic, contact) les affectant.

Les objets sont regroupés en Classes (Cartes, Voitures) possédant les mêmes
propriétés, méthodes et événements.

La syntaxe des instructions est de la forme : objet.méthode, objet.propriété

Programmation : manipulation « d’instances » (exemples) d’éléments d’une


classe) d’objets. D’où les mots instancier, instanciable, instanciation.

53 HB – Programmation d’ArcGIS – Support de cours

En Python, toutes les variables identifient une instance d'une classe d'objet : variables
numériques, séquences (chaines de caractères, listes, tuples), dictionnaires, etc. sont des
objets.

Méthode
'addition'

54 HB – Programmation d’ArcGIS – Support de cours

27
Cr é a t ion de cla sse s d'obj e t s
 Instruction composée class Nom :
 Par convention, les noms de classes
commencent par une majuscule.

unObjet = nomClasse()
 Création d’un nouvel objet (ou instance) de la classe nomClasse, qui sera
manipulable via la variable unObjet avec unObjet.méthode ou unObjet.propriété
 Parenthèses obligatoires (autres langages utilisent le mot-clé New)

Définition des attributs (propriétés)


de l'instance par affectation.

Remarque : les propriétés ne sont


pas normalement définies de cette
manière !

55 HB – Programmation d’ArcGIS – Support de cours

p2Objet = p1Objet
Affectation de la référence de p1Objet à p2Objet : les 2 variables désignent le
même objet en mémoire. On obtient ainsi 2 alias sur le même objet.

Un objet peut être


composé d'autres objets :

Enchaînement des lectures


de propriétés avec des "."

56 HB – Programmation d’ArcGIS – Support de cours

28
Encapsulation
Les définitions et initialisation des propriétés des instances, l'implémentation
des méthodes de la classe, se font à l'intérieur de la définition de la classe.
 Empêche l'accès aux données par un autre moyen que les services proposés
ce qui garantit l'intégrité des données contenues dans l'objet.
 Méthode __init__ : constructeur, définit les attributs par défaut d'une
nouvelle instance de classe (notée self par convention).
Dans l'exemple ci-dessous : longueur et largeur peuvent être précisés ou omis (car initialisés) lors de
l'instanciation de l'objet. La méthode centre() renvoie deux valeurs (tuple).

Implémentation de
la méthode centre()

57 HB – Programmation d’ArcGIS – Support de cours

Héritage
L'héritage permet de transférer à une classe les caractéristiques d'une autre
classe. La classe dont elle hérite est appelée classe mère (ou classe de base,
classe antécédente).
 La classe elle-même est appelée classe fille (ou classe dérivée, descendante).
 Syntaxe class ClasseFille(ClasseMere) :
 trait1, trait2, etc. attributs de classe hérités (pouvant être redéfinis localement).

Vertebre

Oiseau Mammifere

Carnivore

Chien

58 HB – Programmation d’ArcGIS – Support de cours

29
Polymorphisme
 Des classes différentes peuvent partager la même méthode.
 L’implémentation des méthodes et propriétés se fait dans le bloc de classe,
les objets peuvent donc répondre différemment.
 Une classe fille peut redéfinir (surcharger) une méthode héritée.

ANIMAL

OISEAU

59 HB – Programmation d’ArcGIS – Support de cours

Ut ilisa t ion d'u n obj e t


1. Assigner à une variable une inst ance de la classe désirée :
- Instanciation (nouvel objet créé) avec le nom d'une classe.
- Instanciation par une propriété ou méthode d’un objet existant.
- Objet existant déjà pointé par une autre variable.

OISEAU

2. Appel de méthode, définition ou récupération


d’une valeur de propriété :

60 HB – Programmation d’ArcGIS – Support de cours

30
4. Python dans ArcGIS

HB – Programmation d’ArcGIS – Support de cours

Som m a ir e

 La calculatrice de champs.
 Le site-package arcpy.
 Fenêtre Python et outils de géotraitement.
 Utilisation du Model builder pour créer un script.
 Trouver et utiliser des scripts.

62 HB – Programmation d’ArcGIS – Support de cours

31
Équivalent à l'outil :
Ca lcu la t r ice de ch a m p CalculateField_management()

Calcul simple :
1. Choisir l'analyseur Python.
2. Construire l'expression résultat à
l'aide des noms de champs, des
boutons opérateur et des fonctions
Python proposées.
3. Cliquer Ok.

63 HB – Programmation d’ArcGIS – Support de cours

Calcul ou expression complexe


Si le calcul fait intervenir des expressions
conditionnelles, des boucles, des fonctions
personnalisées :
- De préférence, tester le code dans un
interpréteur Python.
- Cocher la case Afficher le bloc de code. La
fenêtre se sépare en deux : saisie du
code (script Pre-Logic) et saisie du résultat
à affecter au champ.
- Copier le code dans la fenêtre (ou
bouton Charger...).
Le code Python doit être contenu dans une
ou plusieurs fonctions (def) qui seront
appelées dans la fenêtre d'affectation au
champ calculé.

Lancer le calcul avec Ok. Les résultats (erreur ou bonne exécution) sont
affichés dans la fenêtre Résultats de géotraitement.

64 HB – Programmation d’ArcGIS – Support de cours

32
Fe n ê t r e Pyt h on
 Glisser-déposer des outils de géotraitement et de ses paramètres à partir de
l'Explorateur de fichiers, la fenêtre Rechercher ou la fenêtre ArcCatalog.
 Le rôle et la syntaxe de l'outil (paramètres d'entrée et de sortie) sont indiqués
dans la fenêtre d'aide.

La fenêtre Python permet


aussi de charger et
sauvegarder des scripts.

65 HB – Programmation d’ArcGIS – Support de cours

Ou t ils de gé ot r a it e m e n t s

Plusieurs centaines d'outils classés par thèmes.


 Utiliser l'outil recherche
Leur utilisation dans les scripts dépend du niveau
de licence disponible : produit
arcpy.ProductInfo()et arcpy.CheckProduct()
et extensions arcpy.CheckExtension().

Appel de l'outil sous la forme :


arcpy.NomOutil_aliasBoiteOutils
Par exemple :
arcpy.Buffer_analysis()
arcpy.DefineProjection_management()
arcpy.CostDistance_sa()

66 HB – Programmation d’ArcGIS – Support de cours

33
Fe n ê t r e r é su lt a t de gé ot r a it e m e n t
La fenêtre Résultats de géotraitement donne accès à toutes les informations
sur les paramètres entrée/sortie, l'environnement et l'exécution d'un outil de
géotraitement.

Ces informations peuvent être utilisées dans les scripts Python.

67 HB – Programmation d’ArcGIS – Support de cours

Cr é e r u n e n ou ve lle boît e à ou t ils 1.

Clic droit sur ArcToolbox et Ajouter une


boîte à outils.

2.

3.

Définir Alias (ex : mesoutils) et Description dans


les propriétés de la boîte.

68 HB – Programmation d’ArcGIS – Support de cours

34
Ut ilise r M ode l bu ilde r pou r cr é e r u n scr ipt

 Construisez et validez votre modèle.


 Menu Modèle/Exporter… Vers un script Python
 Fichier *.py prêt à être modifié, développé…

69 HB – Programmation d’ArcGIS – Support de cours

a r cpy
 Site-package : contient l'ensemble des outils de géotraitement mais
aussi d'autres classes, modules et fonctions ('classiques').
 Succède au module ArcGISscripting utilisé dans les versions 9.2 et 9.3.
 Nécessite une version 2.7.x de Python.

Boîte à outils Module


import arcpy 3D Analyst 3d
from arcpy import env Analyse analysis
env.workspace = "c:\Student" Cartographie mapping
Conversion conversion
Géocodage geocoding
Module env
Geostatistical Analyst ga
Définit l'environnement d'exécution des Gestion de données management
outils de géotraitement. Mise à jour edit
Network analyst na
Référencement linéaire lr
Point d'accès central pour l'exécution de tous les Spatial analyst sa
outils de géotraitement d'ArcGIS, extensions Statistiques spatiales stats
comprises (sous réserve de disposer des licences Tracking Analyst ta
correspondantes).

70 HB – Programmation d’ArcGIS – Support de cours

35
Gr ou pe s de fon ct ion s e t cla sse s d'obj e t d'a r cpy
Aide en ligne : Desktop, Géotraitement, ArcPy

71 HB – Programmation d’ArcGIS – Support de cours

M odu le de ca r t ogr a ph ie : a r cpy.m a ppin g


 Le module arcpy.mapping permet d'ouvrir et manipuler des documents
ArcMap (*.mxd) et des fichiers de couches (*.lyr).
 Il est intégré à la structure de géotraitement d'ArcGIS.
 Il permet d'automatiser la plupart des aspects concernant la création, le
traitement et la gestion de documents cartographiques, mais ne donne pas
accès à tous les objets d'ArcMap.
Fonctions
Classes

72 HB – Programmation d’ArcGIS – Support de cours

36
M odu le a r cpy.sa ( Spa t ia l An a lyst )

 Tous les outils traditionnels d'algèbre spatiale sont intégrés de façon


transparente dans l'environnement Python depuis la version 10.0
 L'autocomplétion facilite la construction d'expressions.
 La nouvelle "Calculatrice raster" exécute des expressions d'algèbre
spatiale à l'aide de la syntaxe Python.

73 HB – Programmation d’ArcGIS – Support de cours

Au t r e s m odu le s ( 1 0 .1 )

 Network Analyst (arcpy.na) : utilisation des outils fournis par l'extension


du même nom, complétée par des fonctions et classes supplémentaires
pour automatiser les analyses de réseaux.

 Data Analyst (arcpy.da) : manipulation de données (édition, conversion de


et vers tableaux NumPy, gestion des domaines, réplicas, sous-types des
tables et classes d'entités de géodatabases. Nouvelles versions des
curseurs de recherche et mise à jour de données.

 Module temporel (arcpy.time) : classes, propriétés et méthodes pour


travailler avec des intervalles de temps et des zones horaires en Python.

74 HB – Programmation d’ArcGIS – Support de cours

37
5. Accès aux données

HB – Programmation d’ArcGIS – Support de cours

Som m a ir e

Accès aux données


 Espaces de travail
 Accès aux blocs de données et aux couches
 Ajout d’une couche à un bloc de données
 Objets permettant de créer des données
 Accès aux classes d’entités

Création de nouveaux jeux de données (tables, classes d’entités…)


 Champs et collections de champs
 Ajout d’enregistrements
 Mise à jour de valeurs

76 HB – Programmation d’ArcGIS – Support de cours

38
Obj e t m a ppin g.M a pD ocu m e n t ( docu m e nt Ar cM a p)

Une référence à un objet "document ArcMap" est souvent la première référence d'un
script Python car ce paramètre est requis par de nombreuses fonctions d'arcpy.mapping

Deux manières d'instancier un objet MapDocument(), le plus souvent selon que le script
s'exécute dans ArcGIS (le document courant est "CURRENT") ou à l'extérieur (chemin
d'accès et nom d'un fichier *.mxd)

Quelques propriétés de MapDocument : filePath (chemin complet du *.mxd), title,


activeView (nom de bloc ou mode page), relativePaths (option chemins relatifs cochée ou
non), description, author, credits…

Quelques méthodes de MapDocument : save(), saveACopy(), makeThumbnails(),


deleteThumbnails()…

77 HB – Programmation d’ArcGIS – Support de cours

Obj e t m a ppin g.D a t a Fr a m e ( bloc de don n é e s)


 Référence un bloc de données dans un document ArcMap.
 La fonction ListDataFrames() renvoie une liste de blocs de données dans leur
ordre d'affichage dans la table des matières.

Bloc de données actif :


 Propriété activeView() de MapDocument renvoie le nom du bloc actif.
 En écriture, modifier activeView() permet d’activer un nouveau bloc de
données ou de passer en mode mise en page ("PAGE_LAYOUT")

Nombre de blocs du document : >>>len(dfList)

78 HB – Programmation d’ArcGIS – Support de cours

39
Obj e t m a ppin g.La ye r ( cou ch e )

 Référence une couche dans un document ArcMap ou dans un fichier *.lyr.


 Plusieurs propriétés de la boîte de dialogue d'ArcMap ne sont pas (encore)
accessibles à l'aide de scripts Python : symbologie, plage de visibilité, etc.
 Il y a plusieurs types de couches, qui n'ont pas les mêmes propriétés : il est
nécessaire de tester le type de couche (méthodes isFeatureLayer(),
isRasterLayer(), isGroupLayer()) ou si telle propriété est supportée (méthode
supports(nom_propriété) avant de l'utiliser.
 La fonction ListLayers() renvoie une liste de couches dans leur ordre
d'affichage dans la table des matières.

 La fonction Layer() permet de référencer un fichier *.lyr

79 HB – Programmation d’ArcGIS – Support de cours

Aj ou t e r u n e cou ch e à u n bloc de don n é e s


Possible avec 3 fonctions de arcpy.mapping :
 AddLayer(bloc, couche, position= AUTO_ARRANGE, BOTTOM, TOP)
 AddLayerToGroup(bloc, groupe, couche, position)
 InsertLayer(bloc, couche de référence, couche à ajouter, position = AFTER, BEFORE)
La couche à ajouter peut provenir d'un fichier *.lyr, d'un document ArcMap mais pas être créée.

Su ppr im e r u n e cou ch e : RemoveLayer(bloc, couche)

D é pla ce r u n e cou ch e : MoveLayer(bloc, coucheRef, coucheDeplacee)

80 HB – Programmation d’ArcGIS – Support de cours

40
Cor r ige r la sou r ce de don n é e s
Il est très fréquent qu'un document ArcMap "perde" le lien
avec les données sources des couches sur disque.
La fonction ListBrokenDataSources(document ArcMap ou fichier
*.lyr) permet de récupérer la liste des couches orphelines.
Les méthodes de la classe Layer :
 findAndReplaceWorkspathPath(ancien espace de travail,
nouvel espace de travail)
 replaceDataSource(nouveau chemin, type d'espace de travail, {jeu
de données})
permettent de se ressourcer en changeant l'espace de travail
ou l'espace de travail et aussi le jeu de données.

Mise à jour de la table des matières : arcpy.RefreshTOC()


81 HB – Programmation d’ArcGIS – Support de cours

Appliqu e r u n e n se m ble de dé fin it ion à u n e cou ch e

 Sous-ensemble d'entités pour l'affichage et l'analyse (propriétés de la


couche, onglet Ensemble de définition).
 Utiliser la propriété definitionQuery de la classe Layer.

82 HB – Programmation d’ArcGIS – Support de cours

41
En vir on n e m e n t de gé ot r a it e m e n t :
cla sse a r cpy.e n v
 Les paramètres d’environnement de géotraitement
sont les paramètres système par défaut, utilisés
par chaque outil.
 On peut les définir par la boîte de dialogue ouverte
par le menu Géotraitement / Environnements…
 Ils correspondent aux propriétés de la classe
arcpy.env
propriété paramètre
workspace Espace de travail (string)
outputCoordinateSystem Coordonnées en sortie (prj)
extent Etendue de traitement (xmin, xmax,
ymin, ymax)
cellsize Taille de cellule (analyse raster)
etc.

83 HB – Programmation d’ArcGIS – Support de cours

Espa ce s de t r a va il ( w or k spa ce s) e t don n é e s


Un espace de travail est généralement un répertoire ou une géodatabase.

Types d’espaces
de travail Workspace
(Workspaces)
contient
(répertoire)
Table

Raster
(géodatabase)

Classes d’entités
(FeatureClass) DataSet
Table

Jeu de classes d’entités


(DataSet)
FeatureClass

84 HB – Programmation d’ArcGIS – Support de cours

42
Accè s a u x don n é e s
 Fonctions : ListDatasets(), jeux de données ; ListFeatureClasses(), classes
d'entités ; ListFiles(), fichiers ; ListRasters(), rasters ; ListTables()
 L'espace de travail doit avoir été défini auparavant.
 Toutes les fonctions ont un paramètre wild_card permettant de filtrer les
noms de fichiers : ex : "toto*.
 Paramètres supplémentaires selon le type de données : type de géométrie,
format de table, format d'image, etc.

ListFeatureClasses ({wild_card}, {feature_type}, {feature_dataset})


{feature_type} : Point, Polygon, Polyline, etc. Tous les types affichés par défaut.

85 HB – Programmation d’ArcGIS – Support de cours

Parcourir la liste et faire le traitement voulu, par exemple, exporter toutes les
classes d'entités de la géodatabase en fichiers de formes.

ListRasters ({wild_card}, {raster_type})

{raster_type} : BMP, GIF, IMG (Erdas Imagine), JP2 (Jpeg2000), JPG, PNG,
TIFF, GRID (ESRI GRID), ALL (tous les types de raster, défaut).

ListTables ({wild_card}, {table_type})

{table_type} : dBASE (fichiers DBF), INFO (table ARC/INFO), ALL (tous les
types de tables, défaut, mais pas encore de fichier Excel)

86 HB – Programmation d’ArcGIS – Support de cours

43
Cr é e r u n e spa ce de t r a va il ( W or k spa ce )

Création de l'espace de travail souhaité en fonction


du type de données à utiliser à l'aide d'un outil du
jeu d'outils Espace de travail de la boîte
management (outils de gestion de données).

La fonction ListWorkspaces({filtre},{type}) permet de récupérer la liste des


espaces de travail d'un type donné.
Si aucun argument, l'ensemble des espaces de travail disponibles :

87 HB – Programmation d’ArcGIS – Support de cours

Cr é a t ion de n ou ve a u x j e u x de don n é e s
 Outils CreateFeatureClass_management(), CreateFeatureDataset_management(),
CreateTable_management()...
 Type de données créé dépend du type de l’espace de travail (workspace) spécifié :

Espace de travail CreateFeatureClass CreateFeatureDataset CreateTable


Répertoire ShapeFile (3 - Fichier DBF
fichiers)
Géodatabase Classe d’entités Jeu de classes d’entités Table de géodatabase

Table (workspace, nom, modèle)


Classe d'entités (workspace, nom, géométrie : "POINT", MULTIPOINT",
"POLYLINE", POLYGON")

Jeu de classes d'entités (workspace, nom, référence spatiale)

88 HB – Programmation d’ArcGIS – Support de cours

44
Vé r ifie r l'e x ist e n ce de don n é e s : fon ct ion arcpy.Ex ist s( )

 Vérifie l'existence de classes d'entités, de tables, de jeux de données, de


fichiers de formes, d'espaces de travail, de couches dans l'espace de
travail courant lors de l'exécution.
 Gère les chemins d'accès d'ArcCatalog (seulement reconnus par ArcGIS) :

 Pour les sources de données autres que géodatabases et


jeu de classes d'entités, possibilité d'utiliser l'instruction:
os.path.exists

Ecr a se m e n t de don n é e s e x ist a n t e s


 Par défaut, aucun outil n'écrase de donnée préexistante. Cette option peut être
changée si la propriété arcpy.overWriteOutput est True. Si cette propriété est
False, une tentative de réécriture causera une erreur.
 os.remove(path) efface le(s) fichier(s) indiqué(s), sans passer par la corbeille !
89 HB – Programmation d’ArcGIS – Support de cours

D é cr ir e le s don n é e s : la fon ct ion D e scr ibe ( )

 Les outils de géotraitement fonctionnent avec des types de données très


différents. La fonction Describe() permet de déterminer les propriétés d'un
jeu de données (type, champs, index, etc.) afin de le traiter de manière
appropriée.
 Describe() renvoie un objet de la classe Describe. Tous ces objets ont des
propriétés communes (baseName, catalogPath, children, dataType,
extension, file, name, path, etc.) et les propriétés correspondant à leur type
de données (GDB, table, fichier de forme, etc.)

90 HB – Programmation d’ArcGIS – Support de cours

45
Accé de r a u x ch a m ps ( Fie lds)

 Tables et classes d’entités ont une propriété fields, liste de champs


renvoyée par un objet Describe.
 Liste de champs renvoyée également par méthode arcpy.ListFields(),
pouvant être filtrée sur le nom et le type du champ.
 Propriétés des champs: nom, alias (aliasName), domaine, modifiable (editable),
indexé (hasIndex), isNullable (accepte l'absence de données), requis, longueur,
type (SmallInteger, Integer, Single, Double, String, Date, OID, Geometry, BLOB),
échelle, précision.

Type OID: compteur donnant un numéro unique à


chaque enregistrement, appelé "OID" ou "FID".

Type Geometry : appelé le plus souvent "Shape"


Type Double (float), Single (entier long).

91 HB – Programmation d’ArcGIS – Support de cours

Tr a va ille r a ve c le s ch a m ps
Avec les outils de géotraitement :
 AddField_management(table, champ, type)
 DeleteField_management(table, champ)
 CalculateField_management(table, champ, valeur)

Nombre de champs : fonction len() sur la liste renvoyée par ListFields.

Test si un champ donné existe : longueur de liste non nulle pour un appel à
ListFields avec critère nomChamp.

 Fonction ValidateFieldName(table, nomChamp) : vérifie si un nom de champ est conforme


aux normes de la source de données (ex : moins de 11 caractères, pas d'espace ni de
caractères spéciaux pour les tables DBF) et corrige nomChamp si nécessaire.
 Fonction AddFieldDelimiters(table, nomChamp) : ajoute les délimiteurs de champ
correspondant aux requêtes de l’espace de travail (crochets pour GDB perso, guillemets pour
fichiers de forme).

92 HB – Programmation d’ArcGIS – Support de cours

46
Syst è m e s de coor don n é e s : obj e t Spa t ia lRe fe r e n ce
 Instanciation : sr = arcpy.spatialReference (chemin_complet_vers_fichier_prj)
 Propriété : name, donne le nom du SRS (ex : 'RGF Lambert 1993')
 Méthodes : exportToString() copie le contenu du fichier .prj dans une chaîne,
loadFromString() réalise l'opération inverse.
 Le système de coordonnées est une propriété :
- des blocs de données (arcpy.mapping.DataFrame)
- de la description (arcpy.Describe) d'une couche, classe d'entités, jeu de
données...

Lister les systèmes de référence


d’un espace de travail.

93 HB – Programmation d’ArcGIS – Support de cours

47
6. Filtres, curseurs,
sélections et symbologies

HB – Programmation d’ArcGIS – Support de cours

Som m a ir e

Sélectionner des d'enregistrements


- Filtre attributaire
- Filtre spatial
Travailler sur des ensembles ou sous-ensemble d'enregistrements
- Curseur de recherche
- Curseur de mise à jour
- Curseur d'insertion
Mettre à jour la symbologie

96 HB – Programmation d’ArcGIS – Support de cours

48
Le s cu r se u r s
 Un curseur permet de parcourir un ensemble d'enregistrements d'une table ou d'une
classe d'entité, en renvoyant un objet Row (contenant l'enregistrement ou entité) à
chaque itération.
 Trois types de curseur : SearchCursor(), UpdateCursor() ou InsertCursor().

obj e t s a r cpy.Cu r sor e t a r cpy.da .Cu r sor ( version 10.1)

rows = arcpy.méthode(table, {where_clause}, {spatial_reference}, {fields})

SearchCursor
Filtre attributaire ou
InsertCursor renvoi de toute la table
UpdateCursor

rows = arcpy.da.méthode(table, champs, {where_clause}, {spatial_reference})

Liste de champs ou "*" (tous les champs) ou jetons renvoyant des informations sur la
géométrie : SHAPE@XY, SHAPE@X, SHAPE@Y, SHAPE@AREA, SHAPE@LENGTH, SHAPE@...

97 HB – Programmation d’ArcGIS – Support de cours

Accé de r a u x e n r e gist r e m e n t s d'u n cu r se u r

 Parcours à l'aide d'une boucle for

 Parcours à l'aide d'une boucle while

Lors de leur création, les curseurs pointent au-dessus


du premier enregistrement. On utilise la méthode next()
pour pointer sur le premier enregistrement, puis de
nouveau next() pour faire défiler les enregistrements.
None est renvoyé en fin de curseur.

Impossible d'atteindre un enregistrement particulier (position), ni de "remonter"


dans le curseur, il faut pour cela réinitialiser le curseur avec reset().

98 HB – Programmation d’ArcGIS – Support de cours

49
Filt r e a t t r ibu t a ir e
 Requête SQL sur un ou plusieurs
attributs d'une table.
 Il faut rédiger la clause Where. :
<champ> <opérateur> <valeur>
 La syntaxe SQL varie suivant la
source de données :

Géodatabase Fichier de forme


personnelle Couverture ArcInfo
GDB fichier
Délimiteur de champ [] ""
Un caractère ? _ (underscore)
0, 1 ou + caractères * %
Casse indifférent sensible

Fonction arcpy.AddFieldDelimiters(workspace, nomChamp) ajoute les délimiteurs qui


conviennent à nomChamp dans le workspace considéré.

99 HB – Programmation d’ArcGIS – Support de cours

 À partir d'une couche vectorielle (Layer) ou d'une vue tabulaire (View) :

Sé le ct ion pa r a t t r ibu t s
 Modificat ion des ent it és sélect ionnées.

SelectLayerByAttribute_management (inlayer_or_view, {selection_type}, {where_clause})


Exemple : sélectionner tous les pays dont la superficie est supérieure à celle de la France

Ex t r a ct ion pa r a t t r ibu t s
 Créat ion d'une nouvelle t able ou classe d'ent it és.

Select_analysis(in_features, out_feature_class, {where_clause})

100 HB – Programmation d’ArcGIS – Support de cours

50
Filt r e s spa t ia u x
 Type de filtre, qui peut également avoir un critère attributaire (paramètre ClauseWhere).
 Sélectionne des entités selon leurs relations spatiales.
 Utilisable avec classes d'entités uniquement.
 Relation spatiale : INTERSECT, WITHIN, CONTAINS, HAVE_THEIR_CENTER_IN, etc.

SelectLayerByLocation_management(in_layer,
{overlap_type}, {select_features},
{search_distance}, {selection_type})

Exemple : sélectionner toutes les villes de Chine.

101 HB – Programmation d’ArcGIS – Support de cours

En r e gist r e m e n t s e t e n t it é s ( obj e t s a r cpy.Row )


 Un objet Row est renvoyé à chaque itération du curseur.
 Il permet d'accéder aux valeurs des champs d'une table (et notamment au
champ qui porte la géométrie des classes d'entités).

Méthode Rôle
getValue(nomChamp) Renvoie la valeur du champ
isNull(nomChamp) Vrai si le champ est vide (Null)
setNull(nomChamp) Affecte Null à la valeur du champ
setValue(nomChamp, objet) Affecte une référence à objet au champ

Accéder à la valeur contenue dans un champ :


row.getValue(nomChamp) ou row.nomChamp

Affecter un objet à un champ :


row.setValue(nomChamp, objet) ou row.nomChamp = objet

102 HB – Programmation d’ArcGIS – Support de cours

51
Curseur de recherche : SearchCursor()

curseur = arcpy.SearchCursor (dataset, {where_clause}, {spatial_reference}, {fields}, {sort_fields})

Parcours en lecture seule d'un ensemble d'enregistrements (calcul de statistiques,


comptage d'enregistrements...).
 dataset : nom de table ou de classe d'entités
 {where_clause} Filtre d'enregistrements.
 {spatial_reference} Référence spatiale
 {fields} champs à retourner, séparés par des ";" (tous par défaut)
 {sort_fields} champs de tri séparés par des ";", noms suivis de "A" (pour ascending) ou
"D"(pour descending)

103 HB – Programmation d’ArcGIS – Support de cours

curseur = arcpy.da.SearchCursor (table, champs, {where_clause}, {spatial_reference})

 table : nom d'une classe d'entités, table ou couche.


 champs : liste des champs qui sont concernés par le curseur, ou "*" représente tous les
champs (mais pas pratique, il faut accéder à un champ par son index), ou jetons
renvoyant des informations sur la géométrie ou l'OID.
 {where_clause} Filtre d'enregistrements.
 {spatial_reference} Référence spatiale.

SHAPE@XY —A tuple of the feature's centroid x,y coordinates.


SHAPE@TRUECENTROID —A tuple of the feature's true centroid x,y coordinates.
SHAPE@X —A double of the feature's x-coordinate.
SHAPE@Y —A double of the feature's y-coordinate.
SHAPE@Z —A double of the feature's z-coordinate.
SHAPE@M —A double of the feature's m-value.
SHAPE@ —A geometry object for the feature.
SHAPE@AREA —A double of the feature's area.
SHAPE@LENGTH —A double of the feature's length.
OID@ —The value of the ObjectID field.

104 HB – Programmation d’ArcGIS – Support de cours

52
Curseurs de mise à jour : UpdateCursor()
 Modification ou suppression d'enregistrements.
 Utilisable avec ou sans filtre.
 Méthodes next(), deleteRow(), updateRow() disponibles

Exemple : mise à jour de la valeur d'un champ Densite sur l'ensemble d'une classe :

curseur = arcpy.UpdateCursor(table, {where_clause}, {spatial_reference})

curseur = arcpy.da.UpdateCursor(table, champs, {where_clause}, {spatial_reference})

Mises à jour en dehors d'une session de mise à jour : pas d'annulation possible !

105 HB – Programmation d’ArcGIS – Support de cours

Curseurs d'insertion : InsertCursor()


 Ajouter des enregistrements.
 Pas de filtre.
 Méthode : newRow() crée une ligne vide et insertRow() l'insère en fin de table.

curseur = arcpy.InsertCursor(table)

curseur = arcpy.da.InsertCursor(table, champs)

Liste de champs ou "*" (tous les champs) ou jetons renvoyant des informations sur la
géométrie : SHAPE@XY, SHAPE@X, SHAPE@Y, SHAPE@AREA, SHAPE@LENGTH, SHAPE@...

106 HB – Programmation d’ArcGIS – Support de cours

53
M e t t r e à j ou r u n e sym bologie ( 1 0 .1 )

Nouvelles classes arcpy.mapping permettant de modifier une symbologie de couche :


- par valeurs uniques (classe UniqueValueSymbology),
- par couleurs graduées (classe GraduatedColorsSymbology),
- par symboles gradués (classe GraduatedSymbolsSymbology)
- par classification d'un raster (classe RasterClassifiedSymbology).
Tester le type de symbologie d'une couche : propriété symbologyType de la classe
Layer (valeurs : "UNIQUE_VALUES", "GRADUATED_SYMBOLS, "GRADUATED_COLORS", "OTHERS").

Mise à jour d'une symbologie unique en fonction du résultat d'une requête (couche 'usstates_L48')
mxd = arcpy.mapping.MapDocument("current")
lyr = arcpy.mapping.ListLayers(mxd)[0]
arcpy.SelectLayerByAttribute_management(lyr, "NEW_SELECTION", '"POP1999" > 10000000')
stateList = []
rows = arcpy.da.SearchCursor(lyr, ["STATE_NAME"])
for row in rows:
stateList.append(row[0])
if lyr.symbologyType == "UNIQUE_VALUES":
lyr.symbology.classValues = stateList
lyr.symbology.showOtherValues = True
arcpy.RefreshActiveView()
arcpy.RefreshTOC()

107 HB – Programmation d’ArcGIS – Support de cours

54
7. Géométries

HB – Programmation d’ArcGIS – Support de cours

Som m a ir e

 Type d’objet géométrie.


 Créer de nouvelles géométries par la programmation.
 Examiner les relations spatiales.
 Afficher des entités.

110 HB – Programmation d’ArcGIS – Support de cours

55
Type d'e n t it é s gé om é t r iqu e s

 Objets des classes Point, Polyligne (PolyLine) Polygone (Polygon)


Multipoint, Polyline ou
Polygon servent à Multiple Multiple
représenter une entité
Simple Simple
(feature).
 Une entité peut être simple
ou multiple (plusieurs
parties) : chemins et boucles
Chemin (Path) Boucle (Ring)
sont renvoyés par la
méthode getPart().
 Point (x, y) : base de
toutes les géométries. Segments

 Fichiers de forme :
2 points reliés
par une courbe
Line BezierCurve EllipticArc CircularArc
uniquement segment de
type Line.
Point Multipoint

111 HB – Programmation d’ArcGIS – Support de cours

Ut ilisa t ion de la gé om é t r ie
 Classes d'entités simples possèdent un champ géométrie, généralement
nommé Shape.
 La fonction Describe permet de récupérer le nom du champ géométrie d'une
classe d'entités par la propriété shapeFieldName et son type par la propriété
shapeType.
 La valeur du champ géométrie, obtenue avec getValue() est un objet géométrie,
qui dispose de plusieurs propriétés décrivant l'entité.

Calcul de la surface totale de


géométries à l’aide d’un curseur.

112 HB – Programmation d’ArcGIS – Support de cours

56
Poin t s ( obj e t s Poin t e t Poin t Ge om e t r y)
 Un point est défini par un couple de coordonnées (X, Y). Il peut avoir des
propriétés M (mesures), Z (altitude) et un identifiant ID.
Point ({X}, {Y}, {Z}, {M}, {ID})

 Par défaut : X et Y sont à 0.


 Un objet Point n'est pas à proprement parler une classe de géométrie : pas
de méthodes descriptives, à comparer avec un objet PointGeometry.
 Une collection de points peut servir à construire n'importe quel type de
géométrie.

113 HB – Programmation d’ArcGIS – Support de cours

Pr opr ié t é s de s obj e t s Gé om é t r ie
Permettent d'obtenir des informations décrivant un objet de type Géométrie
(PointGeometry, Polyline ou Polygon).

Méthode Rôle
geom.area, geom.length Surface, périmètre.
geom.centroid, geom.trueCentroid Centroïde.
geom.firstPoint, geom.lastPoint Premier et dernier point de geom.
geom.hullRectangle Coordonnées du plus petit rectangle enveloppant geom.
geom.isMultipart, geom.partCount geom est-elle multiparties, combien de parties.
geom.getPart(n) Renvoie la partie n de geom (point ou tableau de points)
geom.labelPoint Point d'ancrage de l'étiquette de geom.
geom.type Type de geom : point, ligne, polygone.
geom.pointCount Nombre de points de geom.

Valeurs numériques renvoyées par area et length sont dans les unités dans lesquelles les entités sont
stockées (souvent en mètres)  plus parlant de convertir en kilomètres, hectares ou kilomètres carrés.
114 HB – Programmation d’ArcGIS – Support de cours

57
M é t h ode s de s obj e t s Gé om é t r ie
Renvoient True ou False selon les relations spatiales entre l'objet geom1
(point, ligne ou polygone) et l'objet geom2.

Méthode Rôle
geom.contains(geom2) geom1 contient geom2.
L'intersection de geom1 et geom2 produit une géométrie
geom.crosses (geom2)
de dimensiobn inférieure.
geom.disjoint (geom2) geom1 et geom2 n'ont aucun point en commun.
geom1 et geom2 sont constituées du même ensemble
geom.equals (geom2)
de points.
L'intersection de geom1 et geom2 produit une géométrie
geom.overlaps (geom2)
de même dimension.
geom.touches (geom2) Les limites de geom1 et geom2 s'intersectent.

geom.within (geom2) geom1 est contenue dans geom2.

115 HB – Programmation d’ArcGIS – Support de cours

Obj e t Ar r a y
 Un objet Array peut contenir un nombre indéfini d’objets géométrie de tous types.
Array ({items})
 items : peut être un point, une liste de points ou un autre Array.
 Propriété count renvoie le nombre d’éléments du tableau.

Méthode Rôle
add(value), append(value) Ajoute un point ou un autre tableau à la fin du tableau.
clone(point_object) Clone un objet point.
extend (items) Etend le tableau avec items.
getObject(index) Renvoie l’objet du tableau situé à la position indiquée.
insert(index, value) Ajoute un objet au tableau à la position spécifiée.
next () Renvoie l’objet suivant la position courante.
remove(index) Supprime l’objet situé à la position spécifiée.
removeAll() Supprime tout le contenu et renvoie un objet vide.
replace(index, value) Remplace l’objet à la position spécifiée par value.
reset() Replace le curseur sur le premier élément du tableau.

116 HB – Programmation d’ArcGIS – Support de cours

58
Colle ct ion de poin t s ( obj e t M u lt ipoin t )
 Collection ordonnée de points.
Multipoint (inputs, {spatialReference}, {hasZ}, {hasM})
 inputs : liste de coordonnées (de type Point ou Array)
 Autres paramètres optionnels
 Propriétés et méthodes des objets Géométrie.
Création d’un fichier de
formes de multipoints à
partir d’une liste.

117 HB – Programmation d’ArcGIS – Support de cours

Lign e s ( obj e t Polylin e )


 Un objet Polyline est une entité définie par un ou plusieurs chemins, chacun
étant une série de segments connectés.
Polyline (inputs, {spatialReference}, {hasZ}, {hasM})
 inputs : liste de coordonnées (de type Point ou Array)
 Autres paramètres optionnels
 Propriétés et méthodes des objets Géométrie.
Création d’un fichier de
formes de lignes à partir
d’une liste de points.

118 HB – Programmation d’ArcGIS – Support de cours

59
Polygon e s ( obj e t Polygon )
 Un objet Polygon est une entité définie par une ou plusieurs formes fermées
(anneaux), chacun étant une série de sommets (x, y) reliés.
Polygon (inputs, {spatialReference}, {hasZ}, {hasM})
 inputs : liste de coordonnées (de type Point ou Array).
 Autres paramètres optionnels.
 Propriétés et méthodes des objets Géométrie.
Création d’un fichier de
formes de polygones à
partir d’une liste de points.

Méthode getObject(n)
renvoie l’élément n de Array.

119 HB – Programmation d’ArcGIS – Support de cours

Obj e t Ge om e t r y
 Un objet Geometry définit un type d’entité (point, multipoint, ligne ou polygone)
et la forme correspondante.
Geometry (geometry, inputs, {spatialReference}, {hasZ}, {hasM})
 inputs : liste de coordonnées (de type Point ou Array)
 Autres paramètres optionnels
 Propriétés et méthodes des objets Géométrie.

Un objet Geometry peut être


utilisé pour recevoir le
résultat d’un géotraitement.

Ici, g ne contient que les


géométries.

120 HB – Programmation d’ArcGIS – Support de cours

60
Le ct u r e de la gé om é t r ie
d'u n e e n t it é

 La propriété getPart() retourne une


énumération des points de la
collection.
 Permet de lire les propriétés des
points (coordonnées, numéro de
partie et numéro de sommet).
 Le premier appel à next() se place
sur le premier enregistrement.

121 HB – Programmation d’ArcGIS – Support de cours

xmax
Obj e t Ex t e n t ( e n ve loppe , e m pr ise ) ymax

 Plus petit rectangle englobant une géométrie.


 Rectangle défini par son coin inférieur gauche et son xmin
ymin
coin supérieur droit.
Toute géométrie a une enveloppe renvoyée par sa
Etendue d'un polygone

propriété Shape.extent

Extent ({XMin}, {YMin}, {XMax}, {YMax}, {ZMin}, {ZMax}, {MMin}, {MMax})


Affichage de l’étendue
d’une entité :

Permet de zoomer sur une entité : propriété extent du bloc de données (DataFrame)

122 HB – Programmation d’ArcGIS – Support de cours

61
Ope r a t e u r s t opologiqu e s ( 1 0 .1 )

 Les classes de géométrie supportent des opérateurs topologiques : boundary


(limites), buffer, clip, convexHull (enveloppe convexe), difference,
distanceTo, intersect, symmetricDifference et union.

Buffer
ConvexHull (enveloppe convexe) Difference

distanceTo

Clip (découpage) Boundary (limites)

Géometrie dite « simple » si elle est topologiquement


correcte (polygones fermés, segments non dupliqués,
etc.). Les entités sont corrigées avant d’être ajoutées à
une classe d’entités..

123 HB – Programmation d’ArcGIS – Support de cours

62
8. Éléments de
mise en page

HB – Programmation d’ArcGIS – Support de cours

Som m a ir e

 Eléments cartographiques (Layout Elements).


 Impression / exportation de cartes.
 Utilisation de fichiers PDF

126 HB – Programmation d’ArcGIS – Support de cours

63
Élé m e n t s ca r t ogr a ph iqu e s ( La you t Ele m e n t s)

 Conteneurs pour des blocs de données, des


éléments d’habillage de carte (MapSurrounds),
des objets d’autres applications ou des tables
de données.
Liste mise à jour dynamiquement en fonction
des changements opérés dans le bloc de
données.

127 HB – Programmation d’ArcGIS – Support de cours

Obj e t s Gr a ph icEle m e n t
Propriétés Type

elementHeight RW Hauteur, largeur, position (x, y) de l'élément. Unités de Float


elementWidth la page ou de la carte
elementPositionX
elementPositionY
name RW Nom de l'élément String

type R DATAFRAME_ELEMENT (bloc de données), String


GRAPHIC_ELEMENT, LEGEND_ELEMENT
MAPSURROUND_ELEMENT (échelle, flèche du Nord)
PICTURE_ELEMENT, TEXT_ELEMENT

 Les différent s obj et Elem ent hérit ent des propriét és de GraphicElem ent
et aj out ent les leurs ( t ext pour Text Elem ent , t it le pour LegendElem ent ,
 Les propriét és liées dynam iquem ent sont non m odifiables ( ex : it em s
de la légende) .

La fonct ion a r cpy.List Gr a ph icEle m e n t ( docAr cMap, { t ype_élém ent } )


renvoie la list e des élém ent s cart ographiques d'une m ise en page.

128 HB – Programmation d’ArcGIS – Support de cours

64
module arcpy.mapping

I m pr e ssion d'u n e ca r t e
Impression vers un fichier ou vers une imprimante :
 ListPrinterNames()
 PrintMap(map_document, {printer_name}, {data_frame}, {out_print_file}, {image_quality})

Ut ilisa t ion de fich ie r s PD F Méthode de l'objet


PDFDocument :
Création d'un document PDF vide :
 PDFDocumentCreate(pdf_path)
Ouverture d'un document pdf existant :
 PDFDocumentOpen(pdf_path, user_password=None, master_password=None)

129 HB – Programmation d’ArcGIS – Support de cours

Fonctions du module arcpy.mapping

Ex por t a t ion d’u n e m ise e n pa ge

Nombreux formats images ou vecteurs disponibles :

Formats vectoriels Formats image


 ExportToEPS()  ExportToTIFF()
 ExportToAI()  ExportToJPEG()
 ExportToPDF()  ExportToBMP()
 ExportToSVG()  ExportToGIF()
 ExportToEMF()  ExportToPNG()

Exemple : exporter la carte courante au format JPEG

130 HB – Programmation d’ArcGIS – Support de cours

65
9. Scripts et outils

HB – Programmation d’ArcGIS – Support de cours

Som m a ir e

 Paramètres en entrée et en sortie.


 Résultats de géotraitement
 Enregistrer un script en tant qu'outil.

132 HB – Programmation d’ArcGIS – Support de cours

66
Pa r a m è t r e s e n e n t r é e e t e n sor t ie
 En entrée : méthode GetParameter() pour passer un objet
et GetParameterAsText() pour une chaîne de caractères.
 Respectivement en sortie : méthodes SetParameter() et
SetParameterAsText()
 Les arguments sont numérotés à partir de 0.

Chaque paramètre d’outil est associé à un objet Parameter, qui possède des propriétés
et méthodes utiles pour la validation de l’outil :

Méthode Rôle Type


clearMessage () Efface les messages d’erreur ou d’avertissement. 
hasError () Vrai si le paramètre contient une erreur.  Boolean
hasWarning () Vrai si le paramètre contient un avertissement.  Boolean
isInputValueDerived () Vrai si l’outil est validé au sein d’un modèle et est une sortie d’un autre outil du modèle.  Boolean

setErrorMessage (message) Assigne un message d’erreur au paramètre (ce qui empêche l’exécution). 


Assigne un message d’avertissement au paramètre (ce qui n’empêche pas l’exécution de 
setWarningMessage (message)
l’outil). 
altered Vrai si l’utilisateur a modifié la valeur du paramètre. Boolean
Type de données attendu du paramètre : couche ("GPLayer"), nom de champ ("Field"), 
datatype String
fichier sur disque ("DEFile"), nombre décimal ("Double"), etc.

133 HB – Programmation d’ArcGIS – Support de cours

Propriété Rôle Type


defaultEnvironmentName Environnement String

direction Paramètre en entrée ("Input") ou en sortie ("Output") String


displayName Nom du paramètre affiché dans la boîte de dialogue de l’outil. String
enabled Vrai si le paramètre est disponible.  Boolean
filter Filtre à appliquer aux valeurs du paramètre.  Filter
hasBeenValidated Vrai si le paramètre a été validé. Boolean
name Nom du paramètre.  String
parameterDependencies Liste indexée des paramètres dépendants. Integer

parameterType Paramètre requis ("Required") ou optionnel ("Optional"). String

symbology Chemin vers la couche (.lyr) utilisée pour la sortie. String


value Valeur du paramètre. Object

 Paramètres définis par programmation ou dans l'onglet 
Paramètres des propriétés de l’outil.
 Paramètre peut accepter plusieurs types de données 
(données composites) : 

134 HB – Programmation d’ArcGIS – Support de cours

67
Ré su lt a t de gé ot r a it e m e nt : obj e t a r cpy.Re su lt
 Les outils de géotraitement renvoient un objet Result, à la différence des
fonctions classiques d'arcpy.
 L’objet Result contient les informations, en lecture seule, sur les résultats
d'exécution du géotraitement qui figurent dans la fenêtre Résultat.

resultatOutil = arcpy.nomOutil_nomBoite(paramètres)

Méthode Renvoie…
getInput(indice) un des paramètres en entrée.
getMessage (indice) un message donné.
getMessages ({severity}) la liste des messages (0 = information, 1 = avertissement, 2 = erreur).
getOutput (indice) un des paramètres en sortie.
getSeverity (indice) le niveau de gravité d’un message donné.

Propriété Rôle Type


inputCount Nombre de paramètres en entrée Integer
maxSeverity Niveau de gravité maximal des messages. Integer
messageCount Nombre de messages émis Integer
outputCount Nombre de paramètres en sortie Integer
resultID Identifiant du travail String
Statut de l’exécution de l’outil : New, Submitted, Waiting, Executing, 
status Succeeded, Failed, Timed out, Cancelling, Cancelled, Deleting, Deleted Integer

135 HB – Programmation d’ArcGIS – Support de cours

Aj ou t d’u n scr ipt à u n e boît e à ou t ils


1. Clic droit sur une boîte à outil, Ajouter > Script. Préciser Nom,
Etiquette et Description dans la boîte de dialogue.
2. Indiquer le fichier de script (nom complet avec chemin d’accès).
3. Définir les paramètres d’entrée et de sortie
4. Modifier éventuellement dans l’onglet « Validation », la classe
ToolValidator qui gère la boîte de dialogue de l’outil :

Méthode Appelée…
__init__(self) Initialisation de l’outil.
initializeParameters(self) Ouverture de l’outil
updateParameters(self) Modification d’un paramètre
updateMessages(self) Exécution de l’outil

Le code permet de gérer les listes de paramètres (self.param[n]), les


paramètres visibles (enabled) ou non, etc.

136 HB – Programmation d’ArcGIS – Support de cours

68
Ut ilisa t ion de boît e s à ou t ils pe r son n a lisé e s

Il est possible d'importer une boîte à outils personnalisée dans arcpy avec la
fonction arcpy.ImportToolbox().

Les outils de la boîte « MesOutils.tbx » sont disponibles dans la fenêtre


Python. Ils sont préfixés par arcpy.mesoutils.

Comme les modules intégrés, il bénéficie de l’aide et de l’autocomplétion


du code. Ils sont également disponibles dans tout script dans lequel arcpy
a été importé.

137 HB – Programmation d’ArcGIS – Support de cours

Boît e s à ou t ils Pyt h on

 Boîte à outils qui ne contient que des outils de script Python.


 Dans la fenêtre Catalogue, clic droit sur un répertoire : Nouveau / Boîte à
outils Python

 Création d'un fichier *.pyt (fichier texte) selon un modèle à personnaliser :


une boîte contenant le canevas d'un outil.

 Clic droit sur la boîte à outils pour la modifier (préciser l'éditeur par défaut
dans les options de Géotraitements d'ArcMap, notepad.exe par défaut).
 La classe Tool doit être renommée et personnalisée. Elle peut être
dupliquée pour ajouter de nouveaux outils à la boîte à outils.

138 HB – Programmation d’ArcGIS – Support de cours

69
10. Création de
compléments (add-in)

HB – Programmation d’ArcGIS – Support de cours

Com plé m e n t s ( a dd- in )


 Un complément est une personnalisation de l'interface utilisateur d'une application
ArcGIS : bouton, outil, zone de liste modifiable, menu, barre d'outils, palette d'outils…
 Se présente sous la forme d'un fichier compressé avec extension .esriaddin
(contenant XML, script, icônes, etc.)

 Facile à partager et installer


(répertoire spécifique).
 Développement avec .NET, Java,
XML (v. 10.0) et Python (v. 10.1).
 Nécessite le téléchargement et
installation de l'assistant de
complément Python qui va
générer tous les fichiers
nécessaires au fonctionnement du
complément.

http://www.arcgis.com/home/item.html?id=5f3aefe77f6b4f61ad3e4c62f30bff3b (7 Mo)

140 HB – Programmation d’ArcGIS – Support de cours

70
Pr oj e t s de com plé m e n t s
Pas nécessaire de créer un complément pour ajouter simplement un outil de géotraitement, système
ou personnalisé, à une barre d'outils existante (menu Personnaliser / Mode personnalisation).

 Lancer l'assistant : (1) choisir un répertoire vide pour le complément, (2) remplir les
paramètres (application hôte, nom, version, description, but…) qui apparaîtront dans le
Gestionnaire de compléments (menu Personnaliser des applications ArcGIS), (3)
enregistrer le projet, (4) créer et personnaliser le type de complément voulu.

Création d'une barre d'outils personnalisée


et d'un bouton de commande.

141 HB – Programmation d’ArcGIS – Support de cours

Création d'un bouton de commande

 Attaché à une barre d'outil du


complément (clic droit / Nouveau…).
 Définir ses propriétés : légende, classe
Python qui sera exécutée, messages
d'aide, icône…
 Ecrire le code : modification du script
Python dans le dossier Install du
répertoire de travail du complément.
Dans le cas d'un bouton, implémentation
de la méthode onClick(self).

142 HB – Programmation d’ArcGIS – Support de cours

71
Génération et test du complément
 Dans le répertoire de travail, ouvrez et exécutez le script makeaddin.py 
création d'un fichier .esriaddin
 Double-clic sur le fichier .esriaddin qui vient d'être créé pour lancer
l'utilitaire d'installation des compléments ESRI ArcGIS.

Cliquer sur Install Add-in pour installer le


complément dans le dossier par défaut :
c:\Utilisateurs\<nomutilisateur>\Documents
\ArcGIS\AddIns\Desktop10.1

Un sous-répertoire nommé à l'aide d'un


GUID (global unique identifier) est créé et
reçoit le fichier .esriaddin :
{dd0a6710-985a-479e-8b91-0212bdd34b05}

Ouvrir l'application ArcGIS  le complément est


actif (sinon voir le Gestionnaire de compléments)

143 HB – Programmation d’ArcGIS – Support de cours

Modification d'un complément existant


 Faire une sauvegarde avant toute modification.
 Pour modifier les paramètres ou le contenu d'un complément : relancer
l'assistant de complément Python et naviguer vers le répertoire de travail du
complément. Attention : le script Python original est sauvegardé et remplacé
par une version vierge ( recopier le code à partir de la sauvegarde).
 Pour modifier le script Python : éditer directement le fichier py.
 Recréer le fichier de complément (à l'aide du script makeaddin.py)
 Installer le fichier .esriaddin mis à jour.

144 HB – Programmation d’ArcGIS – Support de cours

72
Conclusion

HB – Programmation d’ArcGIS – Support de cours

Pyt h on e t Ar cGI S 1 0 .2

Beaucoup moins de nouveautés concernant Python que dans la version 10.1 :

 Service de géocodage d'adresse.


 Création de bases de données SQLite.
 Conversion d'images multibandes en tableaux tridimensionnels NumPy.

Source : What’s new for geoprocessing (ArcGIS Help 10.2)

146 HB – Programmation d’ArcGIS – Support de cours

73
Ar cObj e ct s  ArcGIS est développé à partir de composants
logiciels programmables s’appuyant sur la norme
COM (Component Object Model) : les ArcObjects.
 création et utilisation indépendante du langage
de programmation.
Ex : les ArcObjects sont programmés en C++.

 Une application compatible peut utiliser les objets COM d'autres applications.
 Plusieurs technologies s’appuient sur cette norme : OLE, OLEDB, ActiveX, DirectX…

Principe : les objets COM « communiquent », indépendamment du langage qui a


servi à les créer, uniquement à l’aide d' « interfaces » qui regroupent des propriétés
et des méthodes.
Dans la « base de registres » de Windows: HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface

Il est également possible d'utiliser ArcObjects directement avec Python.


http://www.pierssen.com/arcgis/upload/misc/python_arcobjects.pdf
Package comtypes : http://pypi.python.org/pypi/comtypes

147 HB – Programmation d’ArcGIS – Support de cours

Epilogu e
Python ne remplace pas totalement VBA car de nombreux objets, propriétés
et fonctions sont encore inaccessibles par arcpy. Toutefois, Python apporte
une facilité de programmation incomparable avec VBA dans les domaines où
il s'applique.
Par ailleurs, les versions successives d'ArcGIS apportent de nouvelles
fonctionnalités en Python.

Le langage Python est également utilisable dans le monde SIG open


source (QGIS, PostGIS, GRASS...), ce qui en fait un langage dont le
spécialiste peut difficilement se passer…

Bonne route !

148 HB – Programmation d’ArcGIS – Support de cours

74
Annexes

HB – Programmation d’ArcGIS – Support de cours

75
Bibliogr a ph ie
Documentation ArcGIS 10.1 et 10.2

Python Scripting for ArcGIS®


(Paul A. Zandbergen), ESRI Press 2013

Learning Geospatial Analysis with Python


(Joel Lawhead), Packt publishing

Programming ArcGIS 10.1


with Python Cookbook
(Eric Pimpler), Packt publishing

151 HB – Programmation d’ArcGIS – Support de cours

W e bogr a ph ie

ArcGIS Resources
http://resources.arcgis.com/en/communities/python/
http://resources.arcgis.com/en/communities/analysis/
Support ESRI http://ressources.esrifrance.fr/ et http://support.esri.com
ArcScripts http://arcscripts.esri.com/ (plus mis à jour depuis 2010)
Forums http://gis.stackexchange.com/, http://www.forumsig.org/

Cours IUT Perpignan, Introduction aux scripts Python pour du géotraitement


ArcGIS http://gabriel.fraisse.perso.sfr.fr/ArcGIS/Python%20pour%20ArcGIS/
Cours Penn State University https://www.e-education.psu.edu/geog485/

Apprendre à programmer avec Python (Gérard Swinnen)


http://inforef.be/swi/python.htm
http://python.developpez.com/cours/TutoSwinnen
http://fr.wikibooks.org/wiki/Programmation_Python

Sites officiels : www.python.org , http://www.pythonfrance.com


152 HB – Programmation d’ArcGIS – Support de cours

76

Vous aimerez peut-être aussi