4 votos

arcpy.GetParameterAsText no pasa argumentos a script?

He estado trabajando en una herramienta ArcGIS Python script que toma el sistema de coordenadas de un raster de entrada y reproyecta un vector al mismo sistema de coordenadas.

El script funciona bien cuando codifico las direcciones del espacio de trabajo y los conjuntos de datos de entrada. Pero en cuanto intento pasarlas como parámetros en una caja de herramientas ya no funciona.

¿Puede alguien indicarme qué estoy haciendo mal?

import arcpy

class Toolbox(object):
    def __init__(self):
        """Define the toolbox (the name of the toolbox is the name of the
        .pyt file)."""
        self.label = "Toolbox"
        self.alias = ""

        # List of tool classes associated with this toolbox
        self.tools = [Tool]

class Tool(object):
    def __init__(self):
        """Define the tool (tool name is the name of the class)."""
        self.label = "Test_tool"
        self.description = ""
        self.canRunInBackground = False

    def getParameterInfo(self):
        """Define parameter definitions"""
        param0 = arcpy.Parameter(
            displayName="Input workspace",
            name="workspace",
            datatype="DEWorkspace",
            parameterType="Required",
            direction="Input")
        param1 = arcpy.Parameter(
            displayName="Input classified raster",
            name="input_raster",
            datatype="GPRasterLayer",
            parameterType="Required",
            direction="Input")
        param2 = arcpy.Parameter(
            displayName="Input features",
            name="input_features",
            datatype="GPFeatureLayer",
            parameterType="Required",
            direction="Input")

        params = [param0, param1, param2]

        return params

    def execute(self, parameters, messages):
        """The source code of the tool."""

        # Define some paths/variables
        outWorkspace = arcpy.GetParameterAsText(0)
        arcpy.env.workspace = outWorkspace
        input_raster = arcpy.GetParameterAsText(1)
        input_features = arcpy.GetParameterAsText(2)

        output_features = outWorkspace + "\\projected.shp"

        out_coordinate_system = arcpy.Describe(input_raster).spatialReference
        proj_grid = arcpy.Project_management(input_features, output_features, out_coordinate_system)

        return

Cuando ejecuto la herramienta da el siguiente error:

Traceback (most recent call last):
  File "<string>", line 75, in execute
  File "c:\program files\arcgis\pro\Resources\arcpy\arcpy\__init__.py", line 1245, in Describe
    return gp.describe(value, data_type)
  File "c:\program files\arcgis\pro\Resources\arcpy\arcpy\geoprocessing\_base.py", line 370, in describe
    self._gp.Describe(*gp_fixargs(args, True)))
OSError: "" does not exist
 Failed to execute (Tool).

me parece que las variables de entrada de los parámetros no se están pasando correctamente.

0 votos

Prueba con arcpy.GetParameter() en lugar de arcpy.GetParameterAsText()

1 votos

Arcpy.GetParameter() no funcionó. Lo que sí funcionó fue: parameters[].valueAsText Gracias por la ayuda tho.

6voto

UnkwnTech Puntos 21942

El código que ha presentado es para una caja de herramientas de Python ( *.pyt ) para lo cual es necesario utilizar el Parameter clase.

GetParameter() y GetParameterAsText() sólo se utilizan con las herramientas script de Python en las cajas de herramientas estándar ( *.tbx ).

5voto

M. Cunille Puntos 113

Utilizando el respuesta de @PolyGeo mi código corregido es el siguiente:

import arcpy

class Toolbox(object):
    def __init__(self):
        """Define the toolbox (the name of the toolbox is the name of the
        .pyt file)."""
        self.label = "Toolbox"
        self.alias = ""

        # List of tool classes associated with this toolbox
        self.tools = [Tool]

class Tool(object):
    def __init__(self):
        """Define the tool (tool name is the name of the class)."""
        self.label = "Test_tool"
        self.description = ""
        self.canRunInBackground = False

    def getParameterInfo(self):
        """Define parameter definitions"""
        param0 = arcpy.Parameter(
            displayName="Input workspace",
            name="workspace",
            datatype="DEWorkspace",
            parameterType="Required",
            direction="Input")
        param1 = arcpy.Parameter(
            displayName="Input classified raster",
            name="input_raster",
            datatype="GPRasterLayer",
            parameterType="Required",
            direction="Input")
        param2 = arcpy.Parameter(
            displayName="Input features",
            name="input_features",
            datatype="GPFeatureLayer",
            parameterType="Required",
            direction="Input")

        params = [param0, param1, param2]

        return params

    def execute(self, parameters, messages):
        """The source code of the tool."""

        # Define some paths/variables
        outWorkspace = parameters[0].valueAsText
        arcpy.env.workspace = outWorkspace
        output_location = parameters[0].valueAsText
        input_raster = parameters[1].valueAsText
        input_features = parameters[2].valueAsText

        output_features = output_location + "\\projected.shp"

        out_coordinate_system = arcpy.Describe(input_raster).spatialReference
        proj_grid = arcpy.Project_management(input_features, output_features, out_coordinate_system)

        return

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X