Итерация имен выходных файлов классов пространственных объектов с использованием ModelBuilder?

11

Я пытаюсь перебрать серию классов объектов (полигонов) в конструкторе моделей, чтобы преобразовать серию полигонов в растры, однако у меня возникла проблема с именами выходных файлов.

После вставки инструмента «Iterate Feature Class» в окно построителя модели и связывания моего GDB, хранящего все полигоны в качестве входных данных, выходной объект (зеленый пузырь) автоматически становится именем моего первого полигона. В результате модель, которую я пытаюсь запустить, кажется, возвращается к названному многоугольнику, а не к следующему многоугольнику в списке. Выходные растры создаются, но перезаписывают это имя файла, а не генерируют новый растр с новым именем, соответствующим последующим полигонам.

Что я делаю не так?

macdonaw
источник

Ответы:

10

Вот модель, она использует встроенную замену, как описано Аароном. Обратите внимание, что вывод инструмента «Многоугольник в растр»: .. \ fGBD_Scratch.gdb \ ras_ % Value% . Значение исходит от итератора, который в этом случае был установлен на FID для выдачи уникальных строк. Таким образом, первый набор растровых данных будет ras_1, затем ras_2 и т. Д.

модель

Hornbydd
источник
Вы просто добавляете «%» по обе стороны от имени, вставленного в вывод? например% name% _clip?
Macdonaw
Да, так что в вашем примере 'name' - это переменная в вашей модели, обычно что-то из итератора.
Хорнбидд
1
Да, но ваше имя не должно начинаться со знака% ... используйте его в обратном порядке, то есть clip_% Name%
maycca
10

Есть несколько способов справиться с именами в конструкторе моделей. ArcGIS имеет раздел справки по этому вопросу: краткий обзор использования встроенной замены переменных .

Одним из простых способов быстрого создания уникальных имен из итератора является вызов системных переменных %i%или %n%, которые выводят файлы в следующей форме: file1, file2, file3, file4 ... %i%Системная переменная ссылается на текущую позицию списка, а %n%системная переменная ссылается на текущую модель итерации. Вы бы применили это на практике в выходном параметре используемого вами инструмента. Например:

Выходной класс объектов

C:\temp\out%i%.shp
Аарон
источник
1

Похоже, вы хотите сделать пару вложенных циклов, один для классов пространственных объектов в рабочей области, а другой для пространственных объектов в каждом классе пространственных объектов. Это больно (но возможно ) делать с ModelBuilder.

Если вы хотите испачкать руки Python (что я определенно рекомендую для подобных вещей), вот пример для начала:

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)

Не проверено, но, надеюсь, вы поняли идею. IMO, со скриптами Python работать гораздо проще, чем с моделями ModelBuilder для всех, кроме самых тривиальных задач.

Что касается учебных ресурсов Python / ArcPy, посмотрите не далее, чем этот вопрос: Каковы некоторые ресурсы для изучения ArcPy?

blah238
источник
Вложенные циклы в конструкторе моделей - это страдания. Избегайте, если это возможно.
Мокс