Suite

Problème de création de paramètres pour un outil


Je suis toujours un débutant arcpy, mais je pense avoir une compréhension de base des principes fondamentaux, notamment la syntaxe, les variables, les modules, etc. Ma question concerne l'utilisation des paramètres lors de la création d'un outil.

J'essaie de créer un outil qui calculera et résumera la surface d'une couche d'entités "niveaux". J'ai le script qui fonctionne pour le calcul et le résumé de la couche d'entités qui sort sous forme de tableau, mais je ne parviens pas à faire fonctionner les entrées de paramètres pour l'outil. La syntaxe est extraite (en utilisant PyScripter comme IDE) mais lorsque j'essaie d'exécuter l'outil dans ArcMap, "Cet outil n'a pas de paramètres" apparaît. Idéalement, j'aimerais que l'utilisateur saisisse les "niveaux" de la couche d'entités en tant que paramètre et renvoie le tableau récapitulatif, mais une fenêtre de message affichant le récapitulatif de la zone serait encore meilleure si cela était possible. S'il vous plaît laissez-moi savoir ce qui pourrait ne pas aller avec les paramètres, ou comment je pourrais changer la sortie en une fenêtre de message.

import arcpy class GeoArea(object): def __init__(self): """Définir la boîte à outils (le nom de la boîte à outils est le nom du fichier .pyt).""" self.label = "GeoArea" self.alias = "Tom" # Liste des classes d'outils associées à cette boîte à outils self.tools = [LevelsCalcTool] class LevelsCalcTool(object): def __init__(self): self.label = "LevelsCalcTool" self.description = "Calcule et résume la zone des niveaux dans mètres carrés" self.canRunInBackground = False def getParameterInfo(self): param0 = arcpy.Parameter( displayName="Input Features", name="in_features", datatype="GPFeatureLayer", parameterType="Required", direction="Input" ) params = [param0] return params def execute(self, parameters, messages): """Le code source de l'outil.""" arcpy.AddField_management(params,"area","DOUBLE","#"," #","#","#","NULLABLE","NON_REQUIRED","#") arcpy.CalculateField_management(params,"area","[email protected]!","PYTHON_9.3"," #") arcpy.Statistics_analysis(params, "out_table.dbf", [["area", "SUM"]]) return

Votre boîte à outils ne fonctionnera pas correctement à moins que vous ne changiez le nom de la classe enBoîte à outilscomme décrit dans l'aide :

Pour s'assurer que la boîte à outils Python est reconnue correctement par ArcGIS, la classe de la boîte à outils doit rester nomméeBoîte à outils.

Une fois cette modification effectuée, votre outil s'est ouvert correctement :

Quelques autres commentaires sont :

  1. vous passez la liste des paramètres à vos appels arcpy.SomeTool dans votre méthode d'exécution, au lieu d'un seul paramètre, c'est-à-direarcpy.AddField_management(params[0], etc… )
  2. vous définissezparamètrescomme 2e argument de laexécuterméthode mais essayez d'utiliserparamètresdans le corps de la méthode. Vous devez soit :

    1. changer le 2ème argument duexécuterméthode deparamètresàparamètresOU ALORS
    2. monnaieparamètresàparamètresdans le corps de la méthode

Code fixe :

import arcpy class Toolbox(object): def __init__(self): """Définir la toolbox (le nom de la toolbox est le nom du fichier .pyt).""" self.label = "GeoArea" self.alias = "Tom" # Liste des classes d'outils associées à cette boîte à outils self.tools = [LevelsCalcTool] class LevelsCalcTool(object): def __init__(self): self.label = "LevelsCalcTool" self.description = "Calcule et résume la zone des niveaux dans mètres carrés" self.canRunInBackground = False def getParameterInfo(self): param0 = arcpy.Parameter( displayName="Input Features", name="in_features", datatype="GPFeatureLayer", parameterType="Required", direction="Input" ) params = [param0] return params def execute(self, params, messages): """Le code source de l'outil.""" arcpy.AddField_management(params[0],"area","DOUBLE","# ","#","#","#","NULLABLE","NON_REQUIRED","#") arcpy.CalculateField_management(params[0],"area","[email protected]!"," PYTHON_9.3","#") arcpy.Statistics_analysis(params[0], "out_table.dbf", [["area", "SUM"]]) re tour

Comme vous l'avez posté ici, il semble qu'il y ait un problème avec le formatage de votregetParameterInfométhode. Vous devez vous assurer que votre indentation est cohérente dans tout le fichier. Je pense que ça devrait ressembler à ça :

def getParameterInfo(self): param0 = arcpy.Parameter( displayName="Input Features", name="in_features", datatype="GPFeatureLayer", parameterType="Required", direction="Input") params = [param0] return params

Tel que posté, il semble que leretourner les paramètresl'énoncé ne fait pas réellement partie degetParameterInfo, ce qui signifierait que cette fonction retourneRien. Cela expliquerait pourquoi vous ne voyez aucun paramètre dans votre outil.


Voir la vidéo: CURA: Optimiser ses supports sur ses impressions 3D (Octobre 2021).