6 votos

¿Tiene arcpy.GetParameterAsText() un tipo de datos?

import arcpy 
# Retrieve input parameters
inX = arcpy.GetParameterAsText(0)
inY = arcpy.GetParameterAsText(1)
inDescription = arcpy.GetParameterAsText(2)

incidentsFC = "C:/Data/Yakima/Incidents.shp"
descriptionField = "DESCR"

# Make a tuple of fields to update
fieldsToUpdate = ("SHAPE@XY", descriptionField)

# Create the insert cursor
with arcpy.da.InsertCursor(incidentsFC, fieldsToUpdate) as cursor:
    # Insert the row providing a tuple of affected attributes
    cursor.insertRow(((float(inX),float(inY)), inDescription))

Me encontré con esta herramienta script en un curso online que muestra un ejemplo para usar el Cursor de Inserción donde insertamos una fila en un shapefile de puntos. Aquí no he podido entender algo. ¿Especificamos de alguna manera qué "tipo" de entrada vamos a proporcionar cuando usamos GetParameterAsText() ?

Si es así, ¿por qué tenemos que volver a especificar en la última línea que las coordenadas dadas anteriormente son de tipo float?

¿No podemos escribir cursor.insertRow((inX, inY), inDescription) y si es No, entonces cómo entiende Python la entrada en la variable inDescription es una cadena/texto sin usar las comillas dobles en ninguna parte?

7voto

mercator Puntos 16196

Como indica el nombre GetParameterAsText(), o el documentación el valor se convertirá en texto o como lo llamamos nosotros: un cadena .

Gets the specified parameter as a **text** string by its index position from the list of parameters. 

Así, si el usuario introduce coordenadas, como 35.5432 entonces la herramienta conseguiría entender esos como '35.5432' , una cadena. Sin embargo, esto no es necesariamente lo que queremos, por lo que, en este caso, volveríamos a convertir esa cadena en un número. Como nos interesan los decimales tenemos que convertirlo en un float (no un entero, ya que se cortarían los decimales), y utilizar float() .

Tenga en cuenta que también podría haber convertido a la derecha al obtener los parámetros:

inX = float(arcpy.GetParameterAsText(0))

En mi opinión, eso hace que el código sea más fácil de leer, y menos desordenado después.

La parte importante con GetParameterAsText() es lo que se define en ArcGIS, cuando se construye la herramienta. Aquí se define el tipo de datos más importante, el interno de ArcGIS. Puede ser desalentador al principio, y a veces uno tiene que probar varias veces hasta encontrar el tipo correcto. La interfaz tiene este aspecto (¡lo siento, interfaz en alemán!):

enter image description here

Pero la conclusión es que llegaría a tu Python como texto por lo que a veces es necesario realizar conversiones, como el float() en este caso.

4voto

UnkwnTech Puntos 21942

Para respetar el tipo de entrada establecido en el diálogo de una herramienta de Python script habría que utilizar arcpy.GetParameter().

Al usar arcpy.GetParameterAsText() entiendo que todo lo que se ingiere tiene su tipo de datos convertido a una cadena.

Parece que float se utiliza aquí para convertir esas cadenas en números de punto flotante.

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