前言
創建循環是在地理空間數據處理過程中經常會遇到的一種情況。在程序開發中通常使用"for"語句或者“do while”語句,通過對某一條件的判斷來控制循環次數。創建循環的過程中,變量的變化情況和循環的終止條件十分重要。一個合理的變量變化和終止條件決定了循環的效率,以及是否會出現死循環。在FME中創建循環需要通過自定義轉換器以及“Loop”轉換器。
一、FME中創建循環
在FME中,循環的創建需要通過“自定義轉換器”(Create Custom Transformer),和在自定義轉換器中插入“循環轉換器”(Insert Transformer Loop)。如下圖:
步驟一,創建自定義裝換器:
步驟二,插入循環轉換器:
創建後的自定義轉換器模板示意圖如下:
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;
2、通過Transformes創建自定義轉換器,命名爲iloop;在iloop內插入循環轉換器,循環方向指向Input;Input輸入端設置暴露輸入的屬性。然後創建循環體,設置循環條件。循環體需要對變量進行控制並設置循環終止條件,本實例使用AttributeManager和Tester轉換器實現,效果圖如下:
3、運行以上工程能夠得到從1遞增到10的結果,一個簡單的單循環就完成了。後面我們講如何在FME中實現雙重循環。
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”進行判斷,效果圖如下:
2、在iloop的自定義轉換器內部,將jloop轉換器放在輸出端前面,效果圖如下:
3、Main選項卡中的工程主體不變,運行工程可以得到一個10X10的矩陣數量,效果圖如下:
二、總結
本文中提到的“單循環”和“雙重循環”的例子都是非常簡單和基礎的,但是拓展開來可以實現三重循環的效果,可以應用到地圖網格切片,矩陣運算等方面。所以越是基礎的東西越要打好。
本文的工程提供下載,供FME研究愛好者交流學習:下載鏈接