Utilisation d'outils dans Python
Chaque 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 :
Nom |
Chaque paramètre de l'outil porte un nom unique. |
Type |
Type de données attendu, tel que classe d'entités, entier, chaîne ou raster. |
Direction |
Paramètre définissant les valeurs en entrée ou en sortie. |
Requis |
Définit si une valeur doit être spécifiée pour un paramètre ou s'il est facultatif. |
Lorsqu'un outil est utilisé dans un script, ses valeurs de paramètres doivent être correctement définies pour pouvoir lancer l'outil lorsque le script est exécuté. La documentation de chaque outil définit clairement ses paramètres et ses propriétés. 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é.
La plupart des paramètres d'outil peuvent être spécifiés en tant que chaîne simple. Pour certains paramètres, tels qu'une référence spatiale, vous pouvez utiliser un objet au lieu d'une chaîne. 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 à outil est toujours 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:/St_Johns/data.gdb/roads"
output = "c:/St_Johns/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")
Dans l'exemple de code ci-dessous, l'outil CreateFeatureClass est exécuté à l'aide d'un objet de référence spatiale pour le paramètre facultatif Coordinate System. L'objet de référence spatiale est créé à l'aide de la classe SpatialReference et ses informations sont chargées à partir d'un fichier de projection.
import arcpy
inputWorkspace = "c:/temp"
outputName = "rivers.shp"
# Create a spatial reference object
#
spatialRef = arcpy.SpatialReference()
# Use a projection file to define the spatial reference's properties
#
spatialRef.createFromFile("c:/program files/arcgis/Desktop10.1/Coordinate Systems/" + \
"Projected Coordinate Systems/Continental/North America/North America Equidistant Conic.prj")
# Run CreateFeatureclass using the spatial reference object
#
arcpy.CreateFeatureclass_management(inputWorkspace, outputName,
"POLYLINE", "", "", "", spatialRef)
Organisation des outils
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 GetCount est présenté avec ces deux approches.
import arcpy
inFeatures = "c:/temp/rivers.shp"
# Tools can be accessed as functions on the arcpy module, and
# from modules matching the toolbox name.
#
arcpy.GetCount_management(inFeatures)
arcpy.management.GetCount(inFeatures)
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"
streetsCopy = "c:/output/Output.gdb/streetsBackup"
DM.CopyFeatures(streets, streetsBackup)
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.
Obtention de résultats à partir d'un 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 = "D:/St_Johns/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
# To get the output value, the result object has a getOutput method
#
resultValue = result.getOutput(0)
La méthode getOutput de l'objet Result retourne une chaîne Unicode des objets de résultat ayant des valeurs en sortie. 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 GetCount, qui fournit le nombre d'enregistrements dans une table ou CalculateDefaultClusterTolerance, qui fournit une valeur de tolérance d'agrégat. Pour convertir la valeur dans le type attendu, elle doit être convertie à partir d'une chaîne Unicode à l'aide de fonctions Python intégrées telles que int() ou float().
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
from arcpy import env
import types
env.workspace = "c:/St_Johns/data.gdb"
# Many geoprocessing tools return a result object of the derived
# output dataset. A print statement will display the string
# representation of the output.
#
result = arcpy.GetCount_management("roads")
resultValue = result.getOutput(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(resultValue)
print count
print types.TypeType(count)
Propriétés et méthodes |
Explication |
---|---|
inputCount | Retourne le nombre d'entrées. |
outputCount |
Retourne le nombre de sorties. |
messageCount |
Retourne le nombre de messages. |
maxSeverity |
Retourne la gravité maximale. La gravité retournée peut être 0 (pas d'erreur ni d'avertissement généré), 1 (avertissements générés) ou 2 (erreurs générées). |
resultID |
Retourne l'ID de résultat unique. Si l'outil n'est pas un service de géotraitement, resultID a la valeur "". |
état |
Retourne l'état de la tâche sur le serveur.
|
cancel() |
Annule la tâche sur le serveur. |
getInput(index) |
Renvoie une entrée donnée. S'il s'agit d'un objet de jeu d'enregistrements ou de données raster, un objet RecordSet ou RasterData est renvoyé. |
getMapImageURL(ParameterList, Hauteur, Largeur, Résolution) |
Permet de recevoir l'image de service de carte pour une sortie donnée. |
getMessage(index) |
Retourne un message spécifique. |
getMessages(gravité) |
Type de messages à renvoyer : 0=message, 1=avertissement, 2=erreur. Si aucune valeur n'est spécifiée, tous les types de messages sont renvoyés. |
getOutput(index) |
Renvoie une sortie donnée. S'il s'agit d'un objet de jeu d'enregistrements ou de données raster, un objet RecordSet ou RasterData est renvoyé. |
getSeverity(index) |
Retourne la gravité d'un message spécifique. |