Mais

Problema ao criar parâmetros para uma ferramenta

Problema ao criar parâmetros para uma ferramenta


Ainda sou um novato arcpy, mas acho que tenho um conhecimento básico dos fundamentos, incluindo sintaxe, variáveis, módulos, etc. Minha pergunta é sobre o uso de parâmetros ao criar uma ferramenta.

Estou tentando criar uma ferramenta que irá calcular e resumir a área dos "níveis" de uma camada de feição. Eu tenho o script funcionando para o cálculo e o resumo da camada de recursos que resulta em uma tabela, mas não consigo fazer as entradas dos parâmetros para a ferramenta funcionar. A sintaxe é verificada (usando PyScripter como IDE), mas quando tento executar a ferramenta no ArcMap, "Esta ferramenta não tem parâmetros" aparece. Idealmente, gostaria que o usuário inserisse os "níveis" da camada de feição como um parâmetro e retornasse a tabela de resumo, mas uma janela de mensagem mostrando o resumo da área seria ainda melhor, se possível. Por favor, deixe-me saber o que pode estar errado com os parâmetros, ou como eu poderia mudar a saída para uma janela de mensagem.

import arcpy class GeoArea (objeto): def __init __ (self): "" "Defina a caixa de ferramentas (o nome da caixa de ferramentas é o nome do arquivo .pyt)." "" self.label = "GeoArea" self.alias = "Tom" # Lista de classes de ferramentas associadas a esta caixa de ferramentas self.tools = [LevelsCalcTool] classe LevelsCalcTool (objeto): def __init __ (self): self.label = "LevelsCalcTool" self.description = "Calcula e resume a área dos Níveis em metros quadrados "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): "" "O código-fonte da ferramenta." "" 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

Sua caixa de ferramentas não funcionará corretamente a menos que você altere o nome da classe paraCaixa de ferramentasconforme descrito na ajuda:

Para garantir que a caixa de ferramentas Python seja reconhecida corretamente pelo ArcGIS, a classe da caixa de ferramentas deve permanecer nomeadaCaixa de ferramentas.

Depois que fiz essa alteração, sua ferramenta abriu corretamente:

Mais alguns comentários são:

  1. você está passando a lista de parâmetros para o seu arcpy. Algumas chamadas de ferramenta em seu método execute, em vez de um único parâmetro, ou seja,arcpy.AddField_management (params [0], etc…)
  2. você defineparametroscomo o segundo argumento doexecutarmétodo, mas tente usarparamsno corpo do método. Você precisa:

    1. mudar o segundo argumento doexecutarmétodo deparametrosparaparamsOU
    2. mudançaparamsparaparametrosno corpo do método

Código fixo:

import arcpy class Toolbox (object): def __init __ (self): "" "Defina a caixa de ferramentas (o nome da caixa de ferramentas é o nome do arquivo .pyt)." "" self.label = "GeoArea" self.alias = "Tom" # Lista de classes de ferramentas associadas a esta caixa de ferramentas self.tools = [LevelsCalcTool] classe LevelsCalcTool (objeto): def __init __ (self): self.label = "LevelsCalcTool" self.description = "Calcula e resume a área dos Níveis em metros quadrados "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): "" "O código-fonte da ferramenta." "" 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 vez

Como você postou aqui, parece que há um problema com a formatação de seugetParameterInfométodo. Você precisa se certificar de que seu recuo é consistente em todo o arquivo. Eu acho que deveria ser assim:

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

Conforme postado, parece que oretorno paramsdeclaração não é realmente parte degetParameterInfo, o que significaria que essa função está retornandoNenhum. Isso explicaria por que você não vê nenhum parâmetro em sua ferramenta.