迭代多值字符串

时间:2014-11-22 20:23:09

标签: python arcgis arcpy

我在模型构建器中遇到迭代多值的奇怪问题。 该模型部分基于Generating a multivalue choice list示例。

我要做的是显示已过滤的图层列表,用户可以在其中选择其中一些。为此,我使用带有1个输入多值字符串参数的脚本工具和1个派生多值任意值参数。
然后在迭代多值中使用选定的图层名称(多值变量),其中每个迭代值都用于计算值。图层在ToolValidator中过滤。

现在,问题是Iterate Multivalue不会迭代值。相反,它只运行一个循环并传递一个值,该值是一个字符串,所有选定的图层名称用分号分隔。

ToolValidator的UpdateParameters代码

if not self.params[0].altered:
  mxd = arcpy.mapping.MapDocument("CURRENT")
  dataframe = arcpy.mapping.ListDataFrames(mxd)[0]
  layers = set()
  for lyr in arcpy.mapping.ListLayers(mxd, "", dataframe):
    if lyr.visible == True:
      desc = arcpy.Describe(lyr.name)
      if desc.dataType == "RasterLayer":
        layers.add(desc.name)
  self.params[0].filter.list = sorted(layers)
  self.params[0].values = sorted(layers)
  return

使用从主模型传递的多值的子模型和脚本工具。 enter image description here

这是工具的输出 enter image description here

有没有人对这种奇怪的行为有解释?我做错了什么?

1 个答案:

答案 0 :(得分:0)

我终于明白了。 派生输出参数的属性“获取自”必须在脚本工具中设置为输入参数。

脚本工具的参数:

  1. 显示名称:输入栅格,数据类型:字符串,类型:必需,多值:是

  2. 显示名称:输出栅格,数据类型:任意值,类型:派生,多值:是,取自:Input_Rasters

  3. 脚本工具的脚本代码:

    import arcpy
    input_rasters = arcpy.GetParameterAsText(0)
    arcpy.SetParameter(1, input_rasters)