64位FME Server 与32位FME Desktop协同处理MDB格式数据
作者:ZJ
在FME所支持的數據格式中,部分數據格式受限于軟件位數,例如常見的GIS數據格式包含SHP(Esri Shapefile)、GDB(File Geodatabase)、MDB(Personal Geodatabase),其中SHP和GDB格式數據采用32位FME和64位FME都可以讀寫,但是MDB格式只能通過32位的FME進行讀寫。
那么,當用戶提供的格式是MDB格式數據,輸出的結果也需要是MDB格式數據時,用傳統的32位程序對大量數據進行空間計算時,內存的使用效率不高,FME運行過程中出現MDB內存超限的錯誤情況,因為在大量數據處理時,32位程序對內存的使用最大只能到4G,但是64位程序對內存的使用遠大于32位程序。
針對以上情況,我們在實際運行過程中發現,讀寫MDB格式的數據所需要的內存并不多,但是MDB數據讀取后,在任務過程中進行大量空間計算等操作時,所需要的內存就會增加。因此我們可以考慮用在通過64位的FME去調用32位的FME把MDB數據轉為GDB數據,再由64位FME讀取GDB數據,數據處理完成后輸出到GDB格式再由32位的FME轉為MDB格式。文字有點兒繞,看下圖:
?
簡而言之,主要分為以下幾步:
1、用64位FME軟件調用32位FME軟件將MDB轉為GDB數據;
2、用64位FME軟件讀取GDB數據進行數據處理,最后輸出GDB數據;
3、用64位FME軟件調用32位FME軟件將GDB轉為MDB數據。
以上過程在只通過FME Desktop產品進行數據處理時,則不需要這么復雜,直接安裝不同位數的FME軟件即可分步執行;但當使用FME Server來提供服務又不能在同一臺計算機中同時安裝不同位數的FME Server時,如何來實現以上步驟呢?
第一步:軟件環境準備
安裝ArcGIS軟件,FME讀寫MDB需要安裝ArcGIS軟件;
安裝64位FME Server,本文示例安裝版本FME Server 2019.1.3.1 Build 19643-win64
安裝32位FME Desktop,本文示例安裝版本FME(R) 2019.1.3.1 (20191019 - Build 19643 - WIN32)
第二步:制作模板
1、制作MDB轉GDB模板
利用32位FME Desktop制作一個通用型的MDB轉GDB模板,這個模板只需要做數據的讀取和數據的寫出操作,不進行任何空間或者屬性的處理。如下圖:
?
同時,設置改模板的數據輸入參數和數據輸出參數,參數名可自行命名,本文如下:
?
S_MDB參數為輸入源MDB數據;
D_GDB參數為輸出臨時GDB數據。
將該模板存放在某個目錄中,如“D:\Workspace\MDB2GDB.fmw” ,存放路徑可以自行指定,但最好不要有中文路徑,同時模板名稱最好不要用中文命名。
2、制作GDB轉MDB模板
利用32位FME Desktop制作一個通用型的GDB轉MDB模板,這個模板只需要做數據的讀取和數據的寫出操作,不進行任何空間或者屬性的處理。如下圖:
同時,設置改模板的數據輸入參數和數據輸出參數,參數名可自行命名,本文如下:
S_GDB參數為輸入源GDB數據;
D_MDB參數為輸出臨時MDB數據。
將該模板存放在某個目錄中,如“D:\Workspace\GDB2MDB.fmw”,存放路徑可以自行指定,但最好不要有中文路徑,同時模板名稱最好不要用中文命名。
3、制作64位程序主模板
根據程序的需要,我們設置一下參數內容,如下圖:
“FME_EXE”為本機32位FME Desktop程序安裝路徑下的“fme.exe”,如“C:\apps\FME2019643\fme.exe”
“GDB2MDB”為制作的GDB轉MDB模板本機存放路徑,如“D:\Workspace\GDB2MDB.fmw”
“MDB2GDB”為制作的MDB轉GDB模板本機存放路徑,如“D:\Workspace\MDB2GDB.fmw”
同時,在主模板中通過“SystemCaller”轉換器的來實現32位FME Desktop程序的調用,在“SystemCaller”轉換器中設置好執行語句,本文中調用模板的語法結構如下:“程序路徑<空格>模板路徑<空格>--參數名1<空格>參數值1<空格>--參數名2<空格>參數值2”,
MDB轉GDB過程如下:
“C:\apps\FME2019643\fme.exe D:\Workspace\MDB2GDB.fmw --S_MDB D:\Workspace\Data\SourceMDB.mdb --D_GDB D:\Workspace\Data\TempMDB2GDB.gdb”
其中程序路徑,模板路徑,參數值均可通過參數傳遞,如下:
“$(FME_EXE) $(MDB2GDB) --S_MDB @Value(_S_MDB) --D_GDB @Value(_D_TempMDB2GDB)”
GDB轉MDB過程如下:
“C:\apps\FME2019643\fme.exe D:\Workspace\GDB2MDB.fmw --S_GDB D:\Workspace\Data\TempGDB.gdb --D_MDB D:\Workspace\Data\Result_MDB.mdb”
其中程序路徑,模板路徑,參數值均可通過參數傳遞,如下:
“$(FME_EXE) $(GDB2MDB) --S_GDB @Value(_D_TempGDB) --D_MDB @Value(_D_MDB)”
?
第三步:發布主模板服務并運行
將制作的主模板發布到64位FME Server中運行,即可在一個任務中實現MDB數據在只有64位FME Server中處理的需求。
注意,在利用“SystemCaller”轉換器的來實現32位FME Desktop程序的調用的過程中,如果“SystemCaller”轉換器中的“Exit Code Attribute”參數如果沒有設置,當調用失敗的情況下,后續的流程中是無法判斷“SystemCaller”轉換器是否執行成功,因此我們需要設置“Exit Code Attribute”參數,以便后續利用Tester等參數來進行過濾是否執行成功。
根據幫助文檔,在“Exit Code Attribute”設置的屬性字段中如果屬性值為0,則“SystemCaller”轉換器執行成功,屬性字段中為非0時,則“SystemCaller”轉換器執行失敗。
最后,大家在使用“SystemCaller”轉換器來執行模板時,如果被執行模板中的參數過多,不知道具體怎么寫執行語句時,可在主模板中通過“WorkspaceRunner”來調用模板,運行程序后可以在日志中查看到對應的“SystemCaller”執行語句,如下圖,然后根據具體的參數進行修改即可。
?
?
總結
以上是生活随笔為你收集整理的64位FME Server 与32位FME Desktop协同处理MDB格式数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab:神经网络分类预测鸢尾花(i
- 下一篇: 超级管理器Android,超级文件管理器