FME创建循环及双重循环

前言

创建循环是在地理空间数据处理过程中经常会遇到的一种情况。在程序开发中通常使用"for"语句或者“do while”语句,通过对某一条件的判断来控制循环次数。创建循环的过程中,变量的变化情况和循环的终止条件十分重要。一个合理的变量变化和终止条件决定了循环的效率,以及是否会出现死循环。在FME中创建循环需要通过自定义转换器以及“Loop”转换器。

一、FME中创建循环

在FME中,循环的创建需要通过“自定义转换器”(Create Custom Transformer),和在自定义转换器中插入“循环转换器”(Insert Transformer Loop)。如下图:
步骤一,创建自定义装换器:
Create Custom Rransformer
步骤二,插入循环转换器:
Insert Loop Transformer
创建后的自定义转换器模板示意图如下:
loop template

1.1 单重循环

在FME中创建循环不像在代码中那么直观,不仅需要设置循环的输入和输出方向,还需要设置循环的输入输出。本实例创建从1递增到10,步长为1的循环。
Python创建的循环如下:

# python
for i in range(1,11):
	print i

1、在主窗体,创建一个Creator作为数据的输入端,通过AttributeCreator设置控制循环所需的变量,count=10,i=0,j=0;
set loop param
2、通过Transformes创建自定义转换器,命名为iloop;在iloop内插入循环转换器,循环方向指向Input;Input输入端设置暴露输入的属性。然后创建循环体,设置循环条件。循环体需要对变量进行控制并设置循环终止条件,本实例使用AttributeManager和Tester转换器实现,效果图如下:
creat loop
3、运行以上工程能够得到从1递增到10的结果,一个简单的单循环就完成了。后面我们讲如何在FME中实现双重循环。
loop result

1.2 双重循环

双重循环的代码示例如下:

# python
for i in range(1,10):
    for j in range(1,10):
        print i,j

1、在单循环的基础上创建双重循环其实也非常简单,即在上一个工程的基础上重复一次插入循环的操作。
在iloop界面重复创建自定义转换器,插入循环转换器的操作,新的自定义转换器命名为jloop。创建好的jloop转换器与iloop一样,只不过AttributeManager里设置为控制变量“j”递增1,Tester里变成对变量“j”进行判断,效果图如下:
loop param
2、在iloop的自定义转换器内部,将jloop转换器放在输出端前面,效果图如下:
insert jloop
3、Main选项卡中的工程主体不变,运行工程可以得到一个10X10的矩阵数量,效果图如下:
result

二、总结

本文中提到的“单循环”和“双重循环”的例子都是非常简单和基础的,但是拓展开来可以实现三重循环的效果,可以应用到地图网格切片,矩阵运算等方面。所以越是基础的东西越要打好。

本文的工程提供下载,供FME研究爱好者交流学习:下载链接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章