免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 2752|回复: 4
收起左侧

64位FME Server 与32位FME Desktop协同处理MDB格式数据

[复制链接]

665

主题

2万

铜板

34

好友

传奇会员

Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30

积分
20649

精华勋章爱心勋章地信专家组贡献勋章冰雪节勋章

发表于 2021-1-11 14:22 | 显示全部楼层 |阅读模式

作者: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   版权归作者所有

43

主题

5万

铜板

19

好友

至尊VIP

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

积分
3490

精华勋章12周年纪念勋章

发表于 2021-1-11 21:02 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

3万

铜板

9

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
5549
发表于 2021-12-6 14:45 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

5140

铜板

1

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2100
发表于 2022-7-3 16:38 | 显示全部楼层
感谢楼主分享
回复 支持 反对

使用道具 举报

2

主题

3万

铜板

6

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
5686
发表于 2024-3-1 14:15 | 显示全部楼层
感谢楼主分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表