Présentation des paramètres des outils de script
Presque tous les outils possèdent des paramètres. Vous pouvez définir leurs valeurs dans la boîte de dialogue de l'outil ou à partir d'un script. Lorsque l'outil est exécuté, les valeurs du paramètre sont envoyées à votre script. Votre script lit ces valeurs et poursuit son travail.
L'illustration suivante montre une boîte de dialogue d'outil de script comportant trois paramètres : un espace de travail en entrée, une classe d'entités de découpage et un espace de travail en sortie. Toutes les classes d'entités de l'espace de travail en entrée sont découpées selon la classe d'entités de découpage (à l'aide de l'outil Découper) et inscrites dans l'espace de travail en sortie.
Une fois que vous avez défini les valeurs des paramètres dans la boîte de dialogue de l'outil et cliqué sur le bouton OK (voir illustration ci-dessus), le script lit les valeurs des paramètres à l'aide de GetParameterAsText() comme indiqué ci-dessous :
# Import arcpy site-package # import arcpy from arcpy import env # Read the parameter values: # 1: input workspace # 2: input clip features # 3: output workspace # inWorkspace = arcpy.GetParameterAsText(0) clipFeatures = arcpy.GetParameterAsText(1) outWorkspace = arcpy.GetParameterAsText(2) env.workspace = inWorkspace
L'ordre des paramètres doit correspondre
L'ordre des paramètres dans la boîte de dialogue de l'outil doit correspondre à l'ordre des paramètres dans votre script. Par exemple, si vous modifiez l'ordre des Entités de découpage du paramètre 2 au paramètre 1 dans l'outil de script, vous devez également modifier l'ordre des paramètres dans les propriétés de l'outil de script.
sys.argv et arcpy.GetParameterAsText
Les deux méthodes suivantes permettent de lire des paramètres : sys.argv et la fonction arcpy GetParameterAsText(). Ces deux méthodes peuvent être utilisées. L'utilisation de sys.argv dans l'exemple ci-dessus donne le résultat suivant :
# Read the parameter values: # 1: input workspace # 2: input clip features # 3: output workspace # inWorkspace = sys.argv[1] clipFeatures = sys.argv[2] outWorkspace = sys.argv[3] env.workspace = inWorkspace
sys.argv est limité à 1 024 caractères pour un seul paramètre. GetParameterAsText() n'a pas de limite de caractères. Il est par conséquent recommandé d'utiliser GetParameterAsText.
sys.argv est de base 1 (le premier paramètre représente la valeur 1) contrairement à GetParameterAsText() qui est de base 0 (le premier paramètre représente la valeur 0).
Avant la version ArcGIS 9.2, les scripts autonomes (à savoir les scripts exécutés à partir de l'invite du système d'exploitation) pouvaient uniquement utiliser sys.argv. GetParameterAsText() ne fonctionnait qu'avec les outils de script. Cette limitation a été supprimée à partir de la version 9.2. Vous pouvez rencontrer des exemples de code qui utilisent sys.argv. Ces exemples ont été écrits avant la version 9.2. A partir de la version 9.2, vous pouvez remplacer sys.argv par GetParameterAsText(). Pensez juste à bien réduire l'index de paramètre : sys.argv [1] devient GetParameterAsText (0).
Types de données des paramètres
Tous les paramètres d'outil de script disposent d'un type de données associé. Lorsque la boîte de dialogue de l'outil de script s'ouvre, le géotraitement utilise le type de données pour vérifier la valeur du paramètre. Par exemple, si vous entrez une classe d'entités pour un paramètre dont le type de données est un espace de travail, le géotraitement génère une erreur (un "X" rouge dans la boîte de dialogue), comme indiqué ci-dessous.
Le type de données sert également à rechercher des données : seules les données correspondant au type de données du paramètre sont affichées dans la boîte de dialogue Parcourir.
Une autre façon de concevoir les paramètres et les types de données est de penser que le géotraitement n'envoie pas les valeurs à votre script qui ne correspondent pas au type de données. C'est un avantage indéniable pour la création d'un outil de script : la valeur du paramètre est comparée au type de données du paramètre avant que la valeur ne soit envoyée à votre script.