Utilisation d'outils dans Python
Un outil de géotraitement dispose d'un ensemble défini de paramètres qui lui fournissent les informations nécessaires pour son exécution. Les outils contiennent généralement des paramètres en entrée définissant le(s) jeu(x) 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 simplement à 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 suivant, l'outil Créer une classe d'entités est exécuté à l'aide d'un objet SpatialReference pour le paramètre facultatif 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. Il arrive souvent que de nombreux arguments facultatifs n'aient pas besoin d'être spécifiés. 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 en tant que chaîne vide "", 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 retourne les valeurs en sortie d'un outil lorsqu'il est exécuté en tant qu'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 de résultat ou de l'utilisation de sa méthode getOutput(), la valeur renvoyée est une chaîne Unicode. 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 convertir la chaîne Unicode dans le type attendu, des fonctions Python intégrées telles que int() ou float() peuvent être utilisées.
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 ou 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(), long(), float()
count = int(result_value)
print count
print types.TypeType(count)
Si vous créez une sortie qui est seulement une étape intermédiaire dans un workflow plus vaste, l'argument en sortie peut être omis afin que l'outil puisse créer un chemin d'accès et un nom unique pour la sortie. Pour ce faire, vous pouvez définir la sortie sur "#" ou sur None. Si la sortie est destinée à être le dernier argument utilisé, ignore-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 différentes. Tous les outils sont disponibles en tant que fonctions dans ArcPy mais également dans des modules correspondant au nom d'alias de boîte à outils. Bien que la plupart des exemples dans l'aide présentent des outils organisés en tant que fonctions disponibles à partir d'ArcPy, les deux approches sont également valables. 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 s'avérer utile d'attirer l'attention sur l'identification d'un module afin de rendre votre script plus lisible. Dans ce cas, vous pouvez utiliser la forme 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")
Les outils Extension ArcGIS Spatial Analyst sont gérés différemment pour prendre en charge l'algèbre spatiale et sont uniquement disponibles dans le module arcpy.sa et non en tant que fonctions dans ArcPy.