Boîtes à outils Python sont des boîtes à outils de géotraitement créées intégralement dans Python. Une boîte à outils Python, et les outils qu’elle contient, ont le même aspect, agissent et fonctionnent comme les boîtes à outils et les outils créés d’une autre façon. Une boîte à outils Python (.pyt) est simplement un fichier ASCII qui définit une boîte à outils et un ou plusieurs outils.
Une fois créé, les outils contenus dans une boîte à outils Python présentent de nombreux avantages :
- La création d'une boîte à outils Python permet de tirer parti de vos connaissances concernant Python et de créer rapidement un prototype et des outils de géotraitement totalement fonctionnels.
- L'outil que vous créez fait partie intégrante du géotraitement, exactement comme un outil système : vous pouvez l'ouvrir à partir de la fenêtre Rechercher ou Catalogue, l'utiliser dans ModelBuilder et la fenêtre Python et l'appeler à partir de scripts.
- Vous pouvez écrire des messages dans la boîte de dialogue de progression et la fenêtre Résultats.
- Vous pouvez utiliser les outils de documentation intégrés pour fournir une documentation.
- Lorsque le script est exécuté en tant qu'outil de script, arcpy est pleinement conscient de l'application à partir de laquelle il est appelé (ArcMap, par exemple). Les paramètres définis dans l'application, tells que arcpy.env.overwriteOutput et arcpy.env.scratchWorkspace, sont disponibles d'ArcPy dans votre outil de script.
Création d'une boîte à outils Python
Pour créer une boîte à outils Python, cliquez avec le bouton droit sur le dossier dans lequel vous souhaitez la créer, puis cliquez sur Nouveau > Boîte à outils Python.
Au départ, la boîte à outils Python comprend une classe Python nommée Boîte à outils qui définit les caractéristiques de la boîte à outils et une deuxième classe Python nommée Outil qui offre un outil de géotraitement sans stub.
Prise en main
Prise en main | |
Définir un outil | |
Définir les paramètres de l'outil | Définition de paramètres dans une boîte à outils Python Définition de types de données de paramètre dans une boîte à outils Python |
Personnaliser le comportement de l'outil | Personnalisation du comportement de l'outil dans une boîte à outils Python Mise à jour du schéma dans une boîte à outils Python Contrôle du comportement de la licence dans une boîte à outils Python |
Ecriture du code source de l'outil | |
Documenter les outils |
Exemple de boîte à outils Python
Vous trouverez ci-dessous un exemple de fonctionnement d'une boîte à outils Python qui contient un seul outil. L'outil, nommé CalculateSinuosity, ajoute un champ et calcule la sinuosité de l'entité ; la sinuosité étant une mesure de la courbure d'une ligne.
import arcpy
class Toolbox(object):
def __init__(self):
self.label = "Sinuosity toolbox"
self.alias = "sinuosity"
# List of tool classes associated with this toolbox
self.tools = [CalculateSinuosity]
class CalculateSinuosity(object):
def __init__(self):
self.label = "Calculate Sinuosity"
self.description = "Sinuosity measures the amount that a river " + \
"meanders within its valley, calculated by " + \
"dividing total stream length by valley length."
def getParameterInfo(self):
#Define parameter definitions
# Input Features parameter
in_features = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
in_features.filter.list = ["Polyline"]
# Sinuosity Field parameter
sinuosity_field = arcpy.Parameter(
displayName="Sinuosity Field",
name="sinuosity_field",
datatype="Field",
parameterType="Optional",
direction="Input")
sinuosity_field.value = "sinuosity"
# Derived Output Features parameter
out_features = arcpy.Parameter(
displayName="Output Features",
name="out_features",
datatype="GPFeatureLayer",
parameterType="Derived",
direction="Output")
out_features.parameterDependencies = [in_features.name]
out_features.schema.clone = True
parameters = [in_features, sinuosity_field, out_features]
return parameters
def isLicensed(self): #optional
return True
def updateParameters(self, parameters): #optional
if parameters[0].altered:
parameters[1].value = arcpy.ValidateFieldName(parameters[1].value,
parameters[0].value)
return
def updateMessages(self, parameters): #optional
return
def execute(self, parameters, messages):
inFeatures = parameters[0].valueAsText
fieldName = parameters[1].valueAsText
if fieldName in ["#", "", None]:
fieldName = "sinuosity"
arcpy.AddField_management(inFeatures, fieldName, 'DOUBLE')
expression = '''
import math
def getSinuosity(shape):
length = shape.length
d = math.sqrt((shape.firstPoint.X - shape.lastPoint.X) ** 2 +
(shape.firstPoint.Y - shape.lastPoint.Y) ** 2)
return d/length
'''
arcpy.CalculateField_management(inFeatures,
fieldName,
'getSinuosity(!shape!)',
'PYTHON_9.3',
expression)