Utilisation d'outils dans Python

Un outil de géotraitement possède un ensemble défini de paramètres qui lui fournissent les informations nécessaires à son exécution. Les outils contiennent généralement des paramètres en entrée définissant le ou les jeux de données utilisés pour créer les nouvelles données en sortie. Les paramètres possèdent plusieurs propriétés importantes :

  • Chaque paramètre attend un ou plusieurs types de données spécifiques, tels qu'une classe d'entités, un entier, une chaîne ou un raster.
  • Un paramètre attend une valeur en entrée ou en sortie.
  • Un paramètre requiert une valeur ou est facultatif.
  • Chaque paramètre de l'outil porte un nom unique.

Lorsqu'un outil est utilisé dans Python, ses valeurs de paramètres doivent être correctement définies pour pouvoir lancer l'outil lorsque le script est exécuté. Lorsqu’un ensemble valide de valeurs de paramètres est spécifié, l’outil peut être exécuté. Les paramètres sont spécifiés sous forme de chaînes ou d'objets.

Les chaînes correspondent à un texte identifiant de façon unique une valeur de paramètre telle qu’un chemin vers un jeu de données ou un mot-clé. Dans l'exemple de code suivant, les paramètres en entrée et en sortie sont définis pour l'outil Zone tampon. Notez que l'alias de boîte à outils est ajouté au nom d'outil. Dans cet exemple, deux variables de chaîne servent à définir les paramètres en entrée et en sortie afin de faciliter la lecture de l'appel à l'outil.

import arcpy
roads = "c:/base/data.gdb/roads"
output = "c:/base/data.gdb/roads_Buffer"
# Run Buffer using the variables set above and pass the remaining 
# parameters in as strings
arcpy.Buffer_analysis(roads, output, "distance", "FULL", "ROUND", "NONE")

Pour certains paramètres, tels qu’une référence spatiale, vous pouvez également spécifier un objet. Dans l’exemple de code ci-dessous, l’outil Créer une classe d’entités est exécuté à l’aide d’un objet SpatialReference correspondant au paramètre facultatif du système de coordonnées.

import arcpy
in_workspace = "c:/temp"
output_name = "rivers.shp"
# Create a spatial reference object
spatial_ref = arcpy.SpatialReference('North America Equidistant Conic')
# Run CreateFeatureclass using the spatial reference object
arcpy.CreateFeatureclass_management(
    in_workspace, output_name, spatial_reference=spatial_ref)

La plupart des outils de géotraitement incluent à la fois des arguments facultatifs et obligatoires. Dans la plupart des cas, vous n’aurez pas à spécifier de nombreux arguments facultatifs. Vous pouvez gérer ces arguments non utilisés de différentes manières. Vous pouvez conserver l’ordre de tous les arguments facultatifs et faire référence à ceux dont vous n’avez pas besoin sous forme de chaîne vide "", de symbole dièse "#" ou avec un type None. Vous pouvez également faire appel à des arguments de mots-clés et utiliser le nom de l’argument pour attribuer une valeur. L'utilisation des arguments de mots-clés vous permet d'ignorer les arguments facultatifs non utilisés ou de les spécifier dans un ordre différent.

Ignorer les arguments facultatifs avec des chaînes vides.

import arcpy
arcpy.AddField_management("schools", "school_id", "LONG", "", "", "", "", "NON_NULLABLE")

Option recommandée : ignorer les arguments facultatifs avec des arguments de mots-clés.

import arcpy arcpy.AddField_management("schools", "school_id", "LONG", field_is_nullable="NON_NULLABLE")

Sortie d'outil

ArcPy renvoie les valeurs en sortie d’un outil lorsqu’il est exécuté sous la forme d’un objet Result. L’avantage d’un objet Result est que vous pouvez conserver les informations relatives à l’exécution d’outils, y compris les messages, paramètres et sortie. Ces résultats peuvent être conservés même après avoir exécuté plusieurs autres outils.

Les exemples suivants indiquent comment obtenir la sortie à partir d'un objet Result après l'exécution d'un outil de géotraitement.

import arcpy
arcpy.env.workspace = "c:/city/data.gdb"
# Geoprocessing tools return a result object of the derived output dataset. 
result = arcpy.CopyFeatures_management("roads", "urban_roads")
# A print statement will display the string representation of the output.
print(result)
# A result object can be indexed to get the output value. Note: a result object 
# also has a getOutput() method that can be used for the same purpose.
result_value = result[0]

Lors de l’indexation de l’objet Result ou de l’utilisation de sa méthode getOutput(), la valeur renvoyée est une chaîne. Cela s’avère particulièrement important lors de l’exécution d’un outil avec un paramètre en sortie dérivé, tel que Compter, qui fournit le nombre d’enregistrements dans une table ou Calculer la tolérance d’agrégat par défaut, qui fournit une valeur de tolérance d’agrégat. Pour effectuer une conversion vers le type attendu, il est possible de faire appel à des fonctions Python intégrées, par exemple int() ou float().

Remarque :

Un paramètre dérivé ne nécessite aucune interaction de l’utilisateur et ne s’affiche pas dans la boîte de dialogue de l’outil ni comme argument de l’outil dans Python. Les types Derived sont toujours des paramètres en sortie.

import arcpy
import types
arcpy.env.workspace = "c:/base/data.gdb"
# Many geoprocessing tools return a result object of the derived output dataset.
result = arcpy.GetCount_management("roads")
result_value = result[0]
# The result object's getOutput method returns values as a unicode string. To 
# convert to a different Python type, use built-in Python functions: str(), 
# int(), float()
count = int(result_value)
print(count)
print(type(count))

Si vous créez une sortie qui est seulement une étape intermédiaire dans un processus plus vaste, l’argument en sortie peut être omis afin que l’outil puisse créer un chemin d’accès et un nom uniques pour la sortie. Pour ce faire, vous pouvez définir la sortie sur le signe # ou sur None (Aucune). Si la sortie est destinée à être le dernier argument utilisé, ignorez-la entièrement. Dans chaque cas, la valeur renvoyée est le chemin d'accès complet à la nouvelle source de données.

import arcpy
arcpy.env.workspace = "c:/city/data.gdb"
result = arcpy.CopyFeatures_management("roads", "#")
result = arcpy.CopyFeatures_management("roads", "")
result = arcpy.CopyFeatures_management("roads")

Organisation des outils dans ArcPy

Les outils de géotraitement sont organisés de deux manières. Tous les outils sont disponibles en tant que fonctions dans ArcPy mais également dans des modules correspondant au nom d’alias de la boîte à outils. Bien que la plupart des exemples fournis dans l’aide présentent des outils organisés en tant que fonctions disponibles à partir d’ArcPy, les deux approches sont également valides. L’approche utilisée dépend des préférences personnelles et des habitudes de codage. Dans l’exemple suivant, l’outil Compter est présenté avec ces deux approches.

import arcpy
in_features = "c:/temp/rivers.shp"
# Tools can be accessed as functions on the arcpy module
arcpy.GetCount_management(in_features)
# Or from modules matching the toolbox name
arcpy.management.GetCount(in_features)

Lors de l’utilisation d’outils dans des modules, il peut parfois être utile d’attirer l’attention sur l’identification d’un module afin de rendre votre script plus lisible. Dans ce cas, vous devez utiliser le format from - import - as.

# Clean up street centerlines that were digitized without
# having set proper snapping environments
import arcpy
from arcpy import edit as EDIT
from arcpy import management as DM
streets = "c:/data/streets.gdb/majorrds"
streets_copy = "c:/output/Output.gdb/streetsBackup"
DM.CopyFeatures(streets, streets_copy)
EDIT.TrimLine(streets, "10 Feet", "KEEP_SHORT")
EDIT.ExtendLine(streets, "15 Feet", "EXTENSION")
Licence :

Les outils Spatial Analyst et Image Analyst sont gérés différemment pour prendre en charge l’algèbre spatial et ils sont disponibles uniquement dans le modules arcpy.sa et arcpy.ia, et non en tant que fonctions d’ArcPy.