作者: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”执行语句,如下图,然后根据具体的参数进行修改即可。 本文转载来自CSDN作者:fmechina 版权归作者所有
|