使用ModelBuilder迭代要素类输出文件名?


11

我正在尝试迭代模型构建器中的一系列要素类(多边形),以将一系列多边形转换为栅格,但是,输出文件名存在问题。

将“迭代要素类”工具插入模型构建器窗口,并将存储所有多边形的gdb链接为输入后,输出要素(绿色气泡)将自动成为我的第一个多边形的名称。结果,我尝试运行的模型似乎重命名为该多边形,而不是转到列表中的下一个多边形。创建了输出栅格,但是将覆盖该文件名,而不是生成一个具有与后续多边形匹配的新名称的新栅格。

我究竟做错了什么?

Answers:


10

这是模型,它使用Aaron所述的内联替换。请注意,多边形到栅格工具的输出为.. \ fGBD_Scratch.gdb \ ras_ %Value%。值来自迭代器,在这种情况下,迭代器被设置为FID以分发唯一行。因此,第一个栅格数据集将是ras_1,然后是ras_2,依此类推。

模型


您是否只是在输出中插入的名称的两侧添加了“%”?例如%name%_clip?
macdonaw

是的,因此在您的示例中,“名称”是模型中的变量,通常是来自迭代器的变量。
Hornbydd

1
是的,但是您的名字不应该以%符号开头...以相反的顺序使用它,即clip_%Name%
maycca

10

在模型构建器中有几种处理命名的方法。ArcGIS对此有一个帮助部分:使用内联变量替换快速浏览

一个光滑的方式,迅速从一个迭代器创建唯一的名称是通过调用%i%%n%系统变量,在下面的形式输出文件:文件1,文件2,文件3,文件4 ...的%i%系统变量引用当前列表中的位置,而%n%系统变量引用当前模型迭代。您可以在所使用工具的输出参数中将其付诸实践。例如:

输出要素类

C:\temp\out%i%.shp

1

听起来好像您想做几个嵌套循环,一个嵌套循环用于工作空间中的要素类,另一个用于每个要素类中的要素。使用ModelBuilder很难(但可能)。

如果您想动手使用Python(我绝对推荐使用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的资源?


模型构建器中的嵌套循环很痛苦。尽可能避免。
Mox
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.