Iterando nomes de arquivo de saída da classe de recurso usando o ModelBuilder?

11

Estou tentando iterar uma série de classes de recurso (polígonos) no construtor de modelos para converter uma série de polígonos em rasters, no entanto, estou tendo um problema com os nomes dos arquivos de saída.

Após inserir a ferramenta "iterate feature class" na janela do model builder e vincular meu gdb armazenando todos os polígonos como entrada, o recurso de saída (bolha verde) automaticamente se torna o nome do meu primeiro polígono. Como resultado, o modelo que tento executar parece retornar ao polígono nomeado, em vez de ir para o próximo polígono da lista. Rasters de saída são criados, mas substituem esse nome de arquivo em vez de gerar uma nova varredura com um novo nome que corresponda aos polígonos subseqüentes.

O que estou fazendo de errado?

Macdonaw
fonte

Respostas:

10

Aqui está o modelo, ele usa substituição em linha, conforme descrito por Aaron. Observe que a saída da ferramenta Polygon to raster é .. \ fGBD_Scratch.gdb \ ras_ % Value% . O valor é proveniente do iterador que, nesse caso, foi definido como FID para distribuir linhas exclusivas. Portanto, o primeiro conjunto de dados rasterizado seria ras_1, ras_2 etc.

Modelo

Hornbydd
fonte
Você simplesmente adiciona o "%" em ambos os lados do nome inserido na saída? por exemplo% name% _clip?
macdonaw
Sim, portanto, no seu exemplo, 'name' é uma variável em seu modelo, geralmente algo de um iterador.
Hornbydd
1
Sim, mas o seu nome não deve começar com o sinal% ... usá-lo em ordem inversa, ou seja, clip_% Nome%
maycca
10

Existem várias maneiras de lidar com a nomeação no construtor de modelos. O ArcGIS possui uma seção de ajuda sobre isso: Um rápido tour pelo uso da substituição de variáveis ​​em linha .

Uma maneira inteligente de criar rapidamente nomes exclusivos a partir de um iterador é chamar as variáveis ​​de sistema %i%ou %n%, que produzem arquivos da seguinte forma: arquivo1, arquivo2, arquivo3, arquivo4 ... A %i%variável de sistema faz referência à posição atual da lista, enquanto a %n%variável de sistema referencia a iteração do modelo atual. Você colocaria isso em prática no parâmetro de saída de uma ferramenta que você está usando. Por exemplo:

Classe de recurso de saída

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

Parece que você deseja executar alguns loops aninhados, um para as classes de recurso em uma área de trabalho e outro para os recursos em cada classe de recurso. Isso é doloroso (mas possível ) relacionado ao ModelBuilder.

Se você deseja sujar as mãos com o Python (que eu definitivamente recomendo para coisas como esta), aqui está um exemplo para você começar:

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)

Não testado, mas espero que você entenda a idéia. Os scripts IMO e Python são muito mais fáceis de trabalhar do que os modelos ModelBuilder para todas as tarefas, exceto as mais triviais.

Para os recursos de aprendizado do Python / ArcPy, não procure mais: esta pergunta: Quais são alguns recursos para aprender o ArcPy?

blah238
fonte
Loops aninhados no construtor de modelos são uma miséria. Evite se possível.
Mox