ArcGIS 10 a introduit ArcPy, un site-package Python qui intègre et améliore le module arcgisscripting, une nouveauté de ArcGIS version 9.2. ArcPy fournit un environnement puissant et dynamique pour le développement de scripts Python et propose la complétion de code et une documentation intégrée pour chaque fonction, module et classe.
Les applications et les scripts ArcGIS écrits avec ArcPy bénéficient de la capacité d’accès et d’utilisation des nombreux modules Python développés par des professionnels du SIG et des programmeurs issus de nombreuses disciplines différentes. En outre, l’utilisation de ArcPy dans Python offre plusieurs avantages car Python est un langage de programmation destiné à un usage général, facile à maîtriser et à utiliser. Il est saisi et interprété de manière dynamique, ce qui permet d’ébaucher et de tester rapidement des scripts dans un environnement interactif, tout en restant assez puissant pour prendre en charge l’écriture d’applications importantes.
# Importing arcpy
import arcpy
# Set the workspace environment and run Clip_analysis
arcpy.env.workspace = 'C:/Data/Tongass'
arcpy.Clip_analysis('standb4', 'clipcov', 'standby_clip', 1.25)
Suite à l’importation de ArcPy, vous pouvez exécuter tous les outils de géotraitement figurant dans les boîtes d’outils standard installées avec ArcGIS :
- Boîte d’outils Analyse
- Boîte d’outils Cartographie
- Boîte d’outils Conversion
- Boîte d’outils Gestion des données
- Boîte d’outils Mise à jour
- Boîte d’outils Géocodage
- Boîte d’outils Référencement linéaire
- Boîte d’outils Multidimension
- Boîte d’outils Statistiques spatiales
Importation de modules
Un module est un fichier Python comprenant en général des fonctions et des classes. ArcPy est pris en charge par une série de modules, notamment un module d’accès aux données (arcpy.da), un module de cartographie (arcpy.mapping), un module ArcGIS Spatial Analyst extension (arcpy.sa) et un module ArcGIS Network Analyst extension (arcpy.na).
Pour importer un module entier, utilisez le module d’importation :
# Import only arcpy.mapping
import arcpy.mapping
Bien entendu, Python dispose de nombreux autres modules principaux et tiers. Si vous souhaitez utiliser également les modules principaux os et sys de Python, vous pouvez utiliser une importation similaire :
# Import arcpy, os and sys
import arcpy
import os
import sys
Dans la plupart des cas, vous n’avez pas prévu ou besoin d’utiliser le module entier. Une méthode pour importer uniquement une portion d’un module consiste à utiliser une instruction from-import. L’exemple ci-dessous importe la classe env (la classe env contient tous les environnements de géotraitement). Désormais, au lieu de devoir accéder aux environnements sous la forme arcpy.env, vous pouvez les simplifier sous la forme env.
# Import env from arcpy and set the workspace environment
from arcpy import env
env.workspace = 'c:/data'
Suivant le même raisonnement, il peut parfois s’avérer utile d’attirer l’attention sur l’identification d’un module ou d’une partie d’un module afin de rendre votre script plus lisible, ou peut-être que le nom par défaut est simplement trop long pour vos préférences. Dans chacun de ces cas, vous pouvez utiliser la forme from-import-as. Comme dans l’exemple précédent, l’exemple ci-dessous importe également la classe env mais lui affecte le nom ENV :
# Import env from arcpy as ENV and set the workspace environment
from arcpy import env as ENV
ENV.workspace = 'c:/data'
Vous pouvez importer le module de cartographie de la même manière :
# Import the mapping module from arcpy as MAP and create a MapDocument
# object
from arcpy import mapping as MAP
mxd = MAP.MapDocument('C:/maps/basemap.mxd')
Une autre version d’importation correspond à la forme from-import-*. Le contenu du module est importé directement dans l’espace de noms, par conséquent vous pouvez par la suite utiliser l’ensemble du contenu sans utiliser de préfixe. Par exemple :
# Import management from arcpy as *
from arcpy.management import *
Toutefois, cette approche comporte certains risques. Les autres objets, variables, modules, etc., portant le même nom sont remplacés, sans parler des modules importants avec lesquels votre espace de noms peut devenir particulièrement surchargé et encombré. Considérez le problème suivant : dans l’exemple ci-dessous, les modules de gestion et d’analyse sont importés avec la forme *. Ces deux modules comportent un outil Découper. Si vous essayez maintenant d’utiliser l’outil Découper, quel outil Découper utilisez-vous en réalité ? La réponse est : le deuxième, mais cette approche peut provoquer des incertitudes et des difficultés de lecture du script.
# Import the management and analysis modules from arcpy as *
from arcpy.management import *
from arcpy.analysis import *
# Which Clip is it?
Clip('standb4', 'clipcov', 'standby_clip', 1.25)
Toutefois, dans certains cas, from-import-* peut simplifier votre code, comme dans le cas du module sa de l’ArcGIS Spatial Analyst extension. L’un des avantages du module sa consiste à pouvoir imbriquer plusieurs classes et fonctions dans une même ligne pour produire un objet raster en sortie.
# Import arcpy and the sa module as *
import arcpy
from arcpy.sa import *
arcpy.CheckOutExtension('spatial')
# Get input parameters
inRaster1 = arcpy.GetParameterAsText(0)
inRaster2 = arcpy.GetParameterAsText(1)
inRaster3 = arcpy.GetParameterAsText(2)
outRaster = (Raster(inRaster1) + (Raster(inRaster2) - Raster(inRaster3)))
Comparez maintenant le prochain bloc de code, qui utilise l’instruction import-from classique. Imaginez à présent d’ajouter quelques classes et fonctions supplémentaires dans le code : le simple ajout de sa. pour chaque fonction et classe s’additionne rapidement, ce qui perturbe la lisibilité et encombre la ligne.
# Import arcpy and the sa module
import arcpy
from arcpy import sa
arcpy.CheckOutExtension('spatial')
# Get input parameters
inRaster1 = arcpy.GetParameterAsText(0)
inRaster2 = arcpy.GetParameterAsText(1)
inRaster3 = arcpy.GetParameterAsText(2)
outRaster = (sa.Raster(inRaster1) + (sa.Raster(inRaster2) - sa.Raster(inRaster3)))
Chemins d’accès et importation
Lors de l’utilisation d’une instruction import, Python recherche un module correspondant au nom dans les emplacements suivants (et dans l’ordre suivant) :
- chemins d’accès spécifiés dans la variable d’environnement système PYTHONPATH,
- ensemble de dossiers Python standard (le dossier actuel, c:\python27\lib, c:\python27\Lib\site-packages, etc.)
- chemins d’accès spécifiés à l’intérieur de tout fichier .pth trouvé dans les emplacements 1 et 2.
Pour plus d’informations à ce sujet, reportez-vous à la page web suivante : https://docs.python.org/install/index.html#modifying-python-s-search-path.
L’installation de produits ArcGIS 10.8.2 installe Python 2.7, si ce n’est pas déjà fait. L’installation ajoute également le fichier Desktop10.8.pth (ou Engine10.8.pth ou Server10.8.pth) sous python27\Lib\site-packages. Le contenu de ce fichier comprend deux lignes contenant les chemins d’accès aux dossiers bin et arcpy de l’installation ArcGIS de votre système. Ces deux chemins d’accès sont requis pour réussir l’importation d’ArcPy dans la version 2.7 de Python.
Lors de l’utilisation d’une instruction import, Python fait référence à la variable d’environnement PYTHONPATH de votre système pour localiser des fichiers de module. Cette variable est définie sur une liste de répertoires.