Utilisation de paramètres d'environnement dans Python

Chaque outil contient un ensemble de paramètres servant à exécuter une opération. Certains de ces paramètres sont communs à tous les outils, tels que la tolérance ou l’emplacement en sortie. Ces paramètres peuvent tirer leurs valeurs par défaut d’un environnement de géotraitement que tous les outils utilisent lors de leur exécution. Lorsqu’un outil est exécuté, les paramètres d’environnement courants peuvent également servir de valeurs de paramètres en entrée globales. Les paramètres tels qu'une zone d'intérêt, la référence spatiale du jeu de données en sortie et la taille de cellule d'un nouveau jeu de données raster, peuvent tous être définis avec les environnements de géotraitement.

Un script peut être exécuté de plusieurs manières : Il peut être exécuté comme outil de script dans une application ArcGIS. Il peut également être exécuté à partir d’un autre script ou individuellement à partir de la fenêtre Python. Lorsqu’un script est exécuté dans un outil à partir d’une application ArcGIS ou à partir d’un autre script de géotraitement, les paramètres d’environnement utilisés par l’application ou le script appelant sont transmis à ce script. Ces paramètres deviennent les paramètres par défaut utilisés par le script de l’outil lors de son exécution. Le script appelé peut modifier les paramètres qui lui sont transmis, mais ces modifications servent uniquement dans ce script ou dans tout autre outil qu’il appelle. Les modifications ne sont pas renvoyées à l’application ou au script appelant. Le modèle d'environnement peut être décrit comme une cascade dans laquelle les valeurs sont transmises à un processus utilisant l'environnement de géotraitement.

Obtention et définition des paramètres d'environnement

Les paramètres d’environnement se présentent comme des propriétés de la classe arcpy.env. Ces propriétés peuvent servir à extraire les valeurs actuelles ou à les définir. Les environnements sont accessibles en tant que propriétés en lecture/écriture à partir de la classe d’environnement.

import arcpy
arcpy.env.workspace = "c:/data"
Exemple 1 : définition de valeurs d'environnement
import arcpy
# Set the workspace environment setting
arcpy.env.workspace = "c:/St_Johns/data.gdb"
# Set the XYTolerance environment setting
arcpy.env.XYTolerance = 2.5
# Calculate the default spatial grid index, divide in half, then
#   set the spatial grid 1 environment setting
grid_index = arcpy.CalculateDefaultGridIndex_management("roads")[0]
arcpy.env.spatialGrid1 = float(grid_index) / 2
# Clip the roads by the urban area feature class
arcpy.Clip_analysis("roads", "urban_area", "urban_roads")
Exemple 2 : obtention et définition d'une valeur d'environnement
import arcpy
# Check the current raster cell size and make sure it is a certain size
#   for standard output
arcpy.env.workspace = "c:/avalon/data"
if arcpy.env.cellSize < 10:
    arcpy.env.cellSize = 10
elif arcpy.env.cellSize > 20:
    arcpy.env.cellSize = 20
arcpy.HillShade_3d("island_dem", "island_shade", 300)
Attention :

L’orthographe et la casse sont importants lors de la définition de propriétés dans Python. L’attribution d’une valeur à arcpy.env.Workspace ne revient pas à définir arcpy.env.workspace. (Remarque : arcpy.env.workspace est la forme correcte.) Si vous définissez un environnement mais qu’il n’est pas pris en compte par les outils suivants, vérifiez l’orthographe et la casse.

Utilisation de paramètres d'environnement pour gérer des données temporaires

Les environnements scratchGDB et scratchFolder, accessibles en lecture seule, fournissent des emplacements de géodatabase et de dossier dont l’existence est garantie. Ainsi, vous êtes assuré de pouvoir utiliser une géodatabase ou un dossier à tout moment, sans avoir à en créer ni à en gérer un(e).

import arcpy
inputFC = arcpy.GetParameterAsText(0)
clipFC = arcpy.GetParameterAsText(1)
outputFC = arcpy.GetParameterAsText(2)
# Use scratchGDB environment to write intermediate data
tempData = arcpy.CreateScratchName(workspace=arcpy.env.scratchGDB)
result = arcpy.Buffer_analysis(inputFC, tempData, "50 METERS")
arcpy.Clip_analysis(clipFC, result, outputFC)

L’environnement scratchFolder est défini comme suit :

  • Si scratchWorkspace n’est pas défini, scratchFolder le répertoire de fichiers temporaires de l’utilisateur actuel est utilisé par défaut.
  • Si scratchWorkspace fait référence à une géodatabase, scratchFolder correspond au dossier qui la contient.
  • Si scratchWorkspace correspond à un dossier, scratchFolder est identique à scratchWorkspace.

L’environnement scratchGDB est défini comme suit :

  • Si scratchWorkspace n’est pas défini, la valeur par défaut de scratchGDB est une géodatabase nommée scratch.gdb située dans le répertoire de fichiers temporaires de l’utilisateur actuel.
  • Si scratchWorkspace fait référence à une géodatabase, scratchGDB est identique à scratchWorkspace.
  • Si scratchWorkspace correspond à un dossier, la valeur de scratchGDB est une géodatabase nommée scratch.gdb située dans le dossier scratchWorkspace.

Réinitialisation des environnements

Étant donné que les environnements de géotraitement peuvent avoir un impact considérable sur le fonctionnement et le résultat des outils, il est important d’effectuer le suivi des paramètres d’environnement et de rétablir l’état par défaut des environnements, si nécessaire.

Utilisée avec une instruction with, la classe EnvManager peut être utilisée pour définir temporairement un ou plusieurs environnements. Lorsque vous quittez le bloc with, les valeurs précédentes des environnements sont rétablies.

Dans le code ci-dessous, les environnements cellSize et extent ne sont définis que pour la durée de l’instruction with.

import arcpy
with arcpy.EnvManager(cellSize=10, extent='-16, 25, 44, 64'):
    # Code to be executed with the environments set

En outre, la fonction ResetEnvironments peut être utilisée pour restaurer les valeurs par défaut de tous les environnements, ou bien la fonction ClearEnvironment peut être utilisée pour réinitialiser un environnement donné.

import arcpy
# Reset geoprocessing environment settings
arcpy.ResetEnvironments()
# Reset a specific environment setting
arcpy.ClearEnvironment("workspace")