Link: http://blog.163.com/antufme@126/blog/static/140492492201022545726452/?suggestedreading&wumii
關鍵詞:動態扇出
FME2010 案例分析: 動態批量轉換
2010-04-22 14:20:16| 分類: FME 應用案例 | 標簽:扇出 |舉報|字號 訂閱
作者:walh
聯系方式:mark.ireland@safe.com
整理:亂馬
這個案例是由一個用戶在FMETalk用戶組提出的問題引出的:
客戶在一個目錄下有大量的Shape格式的文件。所有這些文件都要被重投影到另一個坐標系。我們正考慮如何進行批量自動化的轉換。可以預見的主要問題是,我不能就shape的屬性結構進行統一。但是,轉換不需要對屬性做任何操作,只是將它們復制到目標文件。
能夠處理未知屬性對於FME2010的動態功能是一件容易的事情。然而,動態工作空間不會做的是重新創建目錄結構。事實上,FME默認的行為把所有源數據合並成一個單一的輸出數據集。
因此,本文介紹了如何在FME中集成動態和批處理工具。
源數據
本案例采用了FME的標准樣例數據FME Sample Dataset。
在默認安裝目錄C:FMEDataData中,包括了系列的shp格式的數據。我們將會把這些數據重投影到C:FMEDataReprojectedData目錄中。
創建工作空間
創建一個讀取多源數據集的工作空間是非常簡單的----同樣容易的是,設置它來讀取包含數目未知的數據集文件夾。
下圖,創建工作空間:
首先設置源數據和目標數據(都是Shape格式),然后選擇"添加目錄"圖標:十字叉形狀
在設置對話框中,通過選擇所有子目錄的選項,來選擇所有源數據目錄。
寫數據集的參數並不重要- 而事實上它是可選的,所以我甚至不需要設置。最后,確認使用的是動態架構的工作流程,然后單擊確定以創建工作空間。它看起來像這樣
(下圖):
要注意的是,在目標要素上面沒有任何屬性,在動態工作空間中是不需要的。源數據要素類型合並了所有的屬性到一個shape的數據集,這個對我們不重要。
獲取源數據文件夾
我們需要知道所有源數據來自哪個目錄,能夠在寫到目標數據的時候,寫入相同的相對路徑。可以通過設置要素的fme_dataset屬性來進行,因此首先需要打開工作空間中的源要素類的屬性定義對話框,選擇Format Attributes選項頁,選擇fme_dataset屬性,如下圖:
現在這個fme_dataset屬性已經可以用了,但是我們需要的是文件夾名稱,而不是文件夾+文件名的全名。所以使用FilenamePartExtractor轉換器進行文件夾的提取,如下圖:
這里我們提取fme_dataset的目錄名稱,放到一個新的屬性new_fme_dataset。
設置輸出文件夾
在new_fme_data中,指向的目錄為C:\FMEData\Data\xxxx,xxxx包含了源數據shp文件。首先需要替換"Data"到"ReprojectedData",同時還需要去掉"C:\",這個在下面將有描述。
注意,在路徑設置中,需要雙斜杠,因為單斜杠是保留字符,因此需要使用轉義字符來保留。現在new_fme_dataset指向了目錄FMEData\ReprojectedData\xxxx。
設置扇出
現在進行數據集的扇出設置,對於數據集的扇出需要采用一個屬性進行分類,這里采用new_fme_dataset作為扇出屬性。
在導航窗體,找到shape寫模塊的設置中的Fanout參數,並雙擊它,如下圖:
在對話框中來設置:
正如看到的所示,設置C盤根目錄C:\為扇出目錄(這就是為什么在上面移除C:\)。然后設置扇出的屬性條件為new_fme_dataset。
轉換數據
所有設置完成后,就可以進行任何我們需要的轉換了。案例中進行的是重投影變換。如果shape格式的數據帶有一個工程prj,我們就不需要設置讀模塊的坐標系參數,只是需要設置寫模塊(目標數據集)。
運行工作空間
進行轉換,日志文件就會記錄讀入多少要素,寫出多少要素,如下圖:
通過windows資源管理器,可以查看轉換后的結果目錄:
利用FME Viewer可以查看轉換后的數據,屬性沒有任何變化,只是坐標系發生了改變:
更多的考慮
能夠從文件夾和子文件夾中讀取一組數據集是非常有用,其中任何文件可以在任何目錄位置。更重要的是,這個功能是動態的,在這個意義上講,在運行時,它才去搜索數據集,不是在創建工作空間的時候。所以,你可以添加和刪除任何文件,在轉換開始前的准備階段。扇出是另外一個方法對於多目標輸出(或者批處理)。也可以在Worbench中使用菜單File->Batch Deploy的功能,或者組合使用FilePath Reader(文件路徑讀模塊)和WorkspaceRunner函數來運行工作空間,並傳遞源數據參數到這個工作空間。
你所有的源數據越多,扇出的功能發揮的越好,因為所有的數據都會讀入並緩存到一個單獨的轉換過程。采用其它的方法,你將會降低性能,因為每個源數據都是單獨處理的。
FME Server實施
盡管我們沒有使用一個Web服務來運行數據轉換,但是這個方案有可能利用FME Server來完成。因為FME Server的構架是可伸縮的,所以對於海量數據的處理效果會更好。
在這個案例中,你可以定義使用WorkspaceRunner方法(更多的情況下是FMEServerJobSubmitter方法),因為每個數據集,在批處理過程中,可以在單獨的FME轉換引擎(FME Engine)上運行,這樣可以極大的提高性能和使用系統資源。
我們希望這個案例你能感興趣,這個能說明動態工作空間為什么重要,同樣演示了其他任務,比如批處理中使用扇出功能。