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研究愛好者交流學習:下載鏈接

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