我在模型构建器中遇到迭代多值的奇怪问题。 该模型部分基于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
使用从主模型传递的多值的子模型和脚本工具。
这是工具的输出
有没有人对这种奇怪的行为有解释?我做错了什么?
答案 0 :(得分:0)
我终于明白了。 派生输出参数的属性“获取自”必须在脚本工具中设置为输入参数。
脚本工具的参数:
显示名称:输入栅格,数据类型:字符串,类型:必需,多值:是
显示名称:输出栅格,数据类型:任意值,类型:派生,多值:是,取自:Input_Rasters
脚本工具的脚本代码:
import arcpy
input_rasters = arcpy.GetParameterAsText(0)
arcpy.SetParameter(1, input_rasters)