Académique Documents
Professionnel Documents
Culture Documents
Hervé BOHBOT
v. 1.1 – décembre 2013
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
Conclusion 73
Annexes 75
3
Introduction
Parce que l’utilisation de programmes faits par d’autres est parfois frustrante.
Objectifs du cours
Découvrir les bases du langage Python.
4
1. Questions
préliminaires
Som m a ir e
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).
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.
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...
Qu e l Pyt h on a ve c Ar cGI S ?
9.x : Introduction de Python comme langage de script pour ArcGIS.
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)
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.
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.
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.
10
2. Bases du langage
Python
Som m a ir e
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 :
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 :
12
Com m e n t 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.
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
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 '''
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.
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
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"
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"
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é
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
17
Bou cle For
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) :
Fonct ions
Fonct ions in t é gr é e s ( built - in funct ions)
Plusieurs ont déj à ét é rencont rées.
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
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.
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).
20
Chaînes de caractères
Séquence ordonnée de caractères, accessibles un à un.
Extraire des parties d'une chaîne :
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).
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.
Exemple d'utilisation d'une liste : ajout d'un répertoire à la liste des répertoires dans
lesquels Python recherche des scripts.
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.
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.
Opérateurs in et not in testent la présence d'une clé (et non d'une valeur)
dans le dictionnaire.
Exemple de comptage
des lettres d'un texte :
23
Tr a va ille r a ve c le s fich ie r s
Changer le répertoire courant :
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"
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.)
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.
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.
25
3. Programmation objet
avec Python
Som m a ir e
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.
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'
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)
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.
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()
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
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
OISEAU
30
4. Python dans ArcGIS
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.
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.
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.
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.
Ou t ils de gé ot r a it e m e n t s
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.
2.
3.
34
Ut ilise r M ode l bu ilde r pou r cr é e r u n scr ipt
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.
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
36
M odu le a r cpy.sa ( Spa t ia l An a lyst )
Au t r e s m odu le s ( 1 0 .1 )
37
5. Accès aux données
Som m a ir e
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)
39
Obj e t m a ppin g.La ye r ( cou ch e )
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.
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.
Types d’espaces
de travail Workspace
(Workspaces)
contient
(répertoire)
Table
Raster
(géodatabase)
Classes d’entités
(FeatureClass) DataSet
Table
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.
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.
{raster_type} : BMP, GIF, IMG (Erdas Imagine), JP2 (Jpeg2000), JPG, PNG,
TIFF, GRID (ESRI GRID), ALL (tous les types de raster, défaut).
{table_type} : dBASE (fichiers DBF), INFO (table ARC/INFO), ALL (tous les
types de tables, défaut, mais pas encore de fichier Excel)
43
Cr é e r u n e spa ce de t r a va il ( W or k spa ce )
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é :
44
Vé r ifie r l'e x ist e n ce de don n é e s : fon ct ion arcpy.Ex ist s( )
45
Accé de r a u x ch a m ps ( Fie lds)
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)
Test si un champ donné existe : longueur de liste non nulle pour un appel à
ListFields avec critère nomChamp.
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...
47
6. Filtres, curseurs,
sélections et symbologies
Som m a ir e
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().
SearchCursor
Filtre attributaire ou
InsertCursor renvoi de toute la table
UpdateCursor
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@...
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 :
Sé le ct ion pa r a t t r ibu t s
Modificat ion des ent it és sélect ionnées.
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.
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})
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
51
Curseur de recherche : SearchCursor()
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 :
Mises à jour en dehors d'une session de mise à jour : pas d'annulation possible !
curseur = arcpy.InsertCursor(table)
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@...
53
M e t t r e à j ou r u n e sym bologie ( 1 0 .1 )
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()
54
7. Géométries
Som m a ir e
55
Type d'e n t it é s gé om é t r iqu e s
Fichiers de forme :
2 points reliés
par une courbe
Line BezierCurve EllipticArc CircularArc
uniquement segment de
type Line.
Point Multipoint
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é.
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})
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.
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.
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.
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.
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.
60
Le ct u r e de la gé om é t r ie
d'u n e e n t it é
xmax
Obj e t Ex t e n t ( e n ve loppe , e m pr ise ) ymax
propriété Shape.extent
Permet de zoomer sur une entité : propriété extent du bloc de données (DataFrame)
61
Ope r a t e u r s t opologiqu e s ( 1 0 .1 )
Buffer
ConvexHull (enveloppe convexe) Difference
distanceTo
62
8. Éléments de
mise en page
Som m a ir e
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)
Obj e t s Gr a ph icEle m e n t
Propriétés Type
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) .
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})
65
9. Scripts et outils
Som m a ir e
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 :
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) :
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é.
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
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().
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.
69
10. Création de
compléments (add-in)
http://www.arcgis.com/home/item.html?id=5f3aefe77f6b4f61ad3e4c62f30bff3b (7 Mo)
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.
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.
72
Conclusion
Pyt h on e t Ar cGI S 1 0 .2
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…
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.
Bonne route !
74
Annexes
75
Bibliogr a ph ie
Documentation ArcGIS 10.1 et 10.2
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/
76