Iterazione dei nomi dei file di output della classe di caratteristiche usando ModelBuilder?


11

Sto cercando di iterare una serie di classi di funzioni (poligoni) nel generatore di modelli per convertire una serie di poligoni in raster, tuttavia, sto riscontrando un problema con i nomi dei file di output.

Dopo aver inserito lo strumento "iterate feature class" nella finestra del model builder e collegato il mio gdb memorizzando tutti i poligoni come input, la funzione di output (bolla verde) diventa automaticamente il nome del mio primo poligono. Di conseguenza, il modello che tento di eseguire sembra ricorrere a quel poligono denominato anziché passare al poligono successivo nell'elenco. I raster di output vengono creati, ma sovrascrivono quel nome di file anziché generare un nuovo raster con un nuovo nome che corrisponda ai poligoni successivi.

Che cosa sto facendo di sbagliato?

Risposte:


10

Ecco il modello, usa la sostituzione in linea come descritto da Aaron. Si noti che l'output dello strumento Poligono su raster è .. \ fGBD_Scratch.gdb \ ras_ % Value% . Il valore proviene dall'iteratore che in questo caso è stato impostato su FID per distribuire righe univoche. Quindi il primo set di dati raster sarebbe ras_1, quindi ras_2, ecc.

Modello


Aggiungete semplicemente "%" su entrambi i lati del nome inserito nell'output? ad esempio% name% _clip?
macdonaw,

Sì, quindi nel tuo esempio 'nome' è una variabile nel tuo modello, in genere qualcosa proveniente da un iteratore.
Hornbydd,

1
Sì, ma il tuo nome non deve iniziare con il segno% ... usalo nell'ordine inverso, cioè clip_% Nome%
maycca

10

Esistono diversi modi per gestire la denominazione in Model Builder. ArcGIS ha una sezione di aiuto su questo: una breve panoramica sull'uso della sostituzione delle variabili in linea .

Un modo semplice per creare rapidamente nomi univoci da un iteratore è chiamare le variabili di sistema %i%o %n%, che generano i file nel seguente formato: file1, file2, file3, file4 ... La %i%variabile di sistema fa riferimento alla posizione corrente dell'elenco, mentre la %n%variabile di sistema fa riferimento all'attuale iterazione del modello. Lo metteresti in pratica nel parametro di output di uno strumento che stai utilizzando. Per esempio:

Classe caratteristica di uscita

C:\temp\out%i%.shp

1

Sembra che tu voglia fare un paio di loop nidificati, uno per le classi di feature in uno spazio di lavoro e uno per le funzionalità di ciascuna classe di feature. Questo è doloroso (ma possibile ) a che fare con ModelBuilder.

Se vuoi sporcarti le mani con Python (che consiglio vivamente per cose come questa), ecco un esempio per iniziare:

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)

Non testato, ma spero che tu abbia l'idea. Gli script IMO e Python sono molto più facili da lavorare rispetto ai modelli ModelBuilder per tutte le attività tranne quelle più banali.

Per le risorse di apprendimento Python / ArcPy, non cercare oltre questa domanda: quali sono alcune risorse per l'apprendimento di ArcPy?


I loop nidificati nel modellista sono miseria. Evitare se possibile.
Mox,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.