¿Iterando nombres de archivo de salida de clase de entidad usando ModelBuilder?

11

Estoy tratando de iterar una serie de clases de entidad (polígonos) en el generador de modelos para convertir una serie de polígonos en rásteres, sin embargo, tengo un problema con los nombres de los archivos de salida.

Después de insertar la herramienta "iterar clase de entidad" en la ventana del generador de modelos y vincular mi gdb almacenando todos los polígonos como entrada, la entidad de salida (burbuja verde) se convierte automáticamente en el nombre de mi primer polígono. Como resultado, el modelo que intento ejecutar parece recurrir a ese polígono llamado en lugar de ir al siguiente polígono de la lista. Se crean rásteres de salida, pero sobrescriben ese nombre de archivo en lugar de generar un nuevo ráster con un nuevo nombre que coincida con los polígonos posteriores.

¿Qué estoy haciendo mal?

macdonaw
fuente

Respuestas:

10

Aquí está el modelo, utiliza la sustitución en línea como lo describe Aaron. Tenga en cuenta que la salida de la herramienta Polígono a ráster es .. \ fGBD_Scratch.gdb \ ras_ % Value% . El valor proviene del iterador que en este caso se configuró en FID para entregar filas únicas. Entonces, el primer dataset ráster sería ras_1, luego ras_2, etc.

Modelo

Hornbydd
fuente
¿Simplemente agrega el "%" a cada lado del nombre insertado en la salida? por ejemplo% name% _clip?
macdonaw
Sí, en su ejemplo, 'nombre' es una variable en su modelo, típicamente algo de un iterador.
Hornbydd
1
Sí, pero su nombre no debe comenzar con el signo% ... utilícelo en orden inverso, es decir, clip_% Name%
maycca
10

Hay varias formas de tratar los nombres en el generador de modelos. ArcGIS tiene una sección de ayuda sobre esto: un recorrido rápido por el uso de la sustitución de variables en línea .

Una forma de mancha de la creación rápida de nombres únicos de un iterador es llamando a la %i%o %n%las variables de sistema, que los archivos de salida de la siguiente forma: file1 file2,, file3, file4 ... Las %i%referencias a variables del sistema de la posición de la lista actual, mientras que la %n%variable del sistema hace referencia a la iteración del modelo actual. Pondría esto en práctica en el parámetro de salida de una herramienta que está utilizando. Por ejemplo:

Clase de entidad de salida

C:\temp\out%i%.shp
Aaron
fuente
1

Parece que desea hacer un par de bucles anidados, uno para las clases de entidad en un espacio de trabajo y otro para las entidades en cada clase de entidad. Esto es doloroso (pero posible ) de hacer con ModelBuilder.

Si desea ensuciarse las manos con Python (que definitivamente recomiendo para cosas como esta), aquí hay un ejemplo para comenzar:

import arcpy, os

# Your source file geodatabase
input_workspace = r"c:\GISData\input.gdb"

# Your output raster folder
output_workspace = r"c:\GISData\rasters"

# The file extension for the output rasters -- when not saving to a geodatabase, specify .tif for a TIFF file format, .img for an ERDAS IMAGINE file format, or no extension for a GRID raster format.
output_ext = ".img"

# The field used to assign values to the output raster -- hopefully this is the same for all of your feature classes
value_field = "VALUE"

# Note: Instead of hardcoding the above values, you could also use arcpy.GetParameterAsText to allow the user to specify them via script tool parameters

# Set current workspace to the source file geodatabase
arcpy.env.workspace = input_workspace

# Loop over the feature classes
for fc in arcpy.ListFeatureClasses():

  # Get the name of the ObjectID field so we can use it to name the output rasters
  oid_field = arcpy.Describe(fc).OIDFieldName

  # Loop over the features in the current feature class
  for row in arcpy.SearchCursor(fc):

    # Figure out what to name the output raster. In this case we should get something like "c:\GISData\rasters\myFeatureClass_1.img"
    out_raster = os.path.join(output_workspace, "{0}_{1}{2}".format(os.path.basename(fc), row.getValue(oid_field), output_ext))

    # Convert to raster
    arcpy.PolygonToRaster_conversion(row, value_field, out_raster)

No probado, pero espero que entiendas la idea. En mi opinión, los scripts de Python son mucho más fáciles de trabajar que los modelos ModelBuilder para todas las tareas, excepto las más triviales.

Para recursos de aprendizaje de Python / ArcPy, no busque más allá de esta pregunta: ¿Cuáles son algunos recursos para aprender ArcPy?

blah238
fuente
Los bucles anidados en el generador de modelos son miseria. Evitar si es posible.
Mox