ModelBuilder中iterator迭代(nested)

我有两个文件夹下的同名图像相减,使用submodel和main model各有一个iterator迭代,但我的想法是实现sub中的iterator嵌套在main中。结果sub中的iterator总是先一次跑完(只保留了最后一个图像),main中的iterator再跑,所以只能和sub中最后一个对比。
我查了好多资料,比如
https://geonet.esri.com/thread/57519http://gis.stackexchange.com/questions/194999/double-iteration-intersect-in-model-builder?rq=1都未给出明确的答案,还有http://blog.csdn.net/kikitamoon/article/details/50196863说不宜使用iterator做嵌套迭代。我还试了list,虽然可以做但是还需要手动填写batch表格,效率低下。的确写代码的话不麻烦,但我还是想请教一下大家怎么使用iterator迭代的?不止一次遇到这个问题了,谢谢.
ps:我自己的感觉每个iterator都是封装死的一样,似乎很难从中间插进去另外一个iterator?
不知道应用precondition或stop是不是有用呢?
arcgis知乎.png
已邀请:

穆天龙 - 专注Desktop

赞同来自: bwbj

如果模型做成这样的话,就是你说的这种结果。

首先Iterator在一个模型中只能有一个,所以你想到了是否可以使用迭代的嵌套,但是Sub Model在Main Model这是作为一个整体存在的,在Main Model中运行到这个Sub Model时是一次性运行完毕的,不会一次获取一个值,而是运行完毕后返回最后一个值,Model Builder依照这种逻辑。

如果两个文件夹中的栅格数量和名字完全一致,可以使用类似如下模型来做,对一个文件夹进行迭代,然后用每次获取的栅格名字,通过Calculate Value根据folder和栅格名字构建完整栅格,之后相减即可。我没有数据,你可是试试这种逻辑。
 

bwbj - 遥感

赞同来自: 穆天龙

穆天龙的solution很巧妙,我把加上数据的截图放上来大家参考。当然这只是一个孤例,大部分工作还是写代码更灵活写。谢谢大家

要回复问题请先登录注册