一直割舍不掉对FME的喜爱。前段时间,群里有人谈建库的事,看到有人发了些建库标准。正好闲着,便想:“能不能用FME,根据建库标准自动建立数据库空库模板?”。于是找到一份Word版的不动产数据库标准,以自动生成不动产MDB数据库空库模板为目标,开始了FME的探索之旅。
经过摸索,发现FME不支持对数据库属性域写入和字段属性域设置,而这是建库必须的。于是开始寻求arcpy的帮助。首先想到的是在pythonCaller中调用arcpy函。这种方法是可行的,但是需要编写大量额外代码对数据库标准中的属性表,字段、域编码等数据进行操作,应该很累,放弃了此方案;然后想到arcpy脚本也可以建库,脚本也是格式化的文本,FME擅长输出格式化的文本,那FME能不能直接生成arcpy脚本呢?片刻思考之后,确定FME完全能胜任:只需要用FME把用于定义数据库的属性结构表、编码表中相应数据作为参数值直接填入相应的arcpy函数中,一条数据对应一个arcpy函数,全部参数填充好后安排好输出顺序,最终通过text写模块直接输出py文件即可。
利用FME编写Arcpy脚本的方式建模板库,从word版的数据库标准到数据库空库模板的生产全过程如下:
1. Word版数据库定义表格提取
将定义数据库的word版表格手工复制至Excel,做好Sheet名称标注,保持与标准一致。
2. FME清洗,形成标准Excel表格
用FME清洗复制出来的Excel格式数据库定义表,排除不规范数据,形成4张标准表1)AttributeTables 2)FeatureClasses 3)Fields 4)Domains 。(详见原文链接)
3. FME模板生成arcpy建库脚本
4. 运行arcpy建库脚本
5. 检查
总结:
利用FME编写Arcpy脚本的方式建模板空库,一方面减少了手工操作过程,提高了效率和质量,另一方面更加灵活,可以节省很多数据操作代码的编写;另外,相比于用pythonCaller,通过生成独立脚本的方式,不需要同时具备FME和arcpy环境,便于共享。
此方法不足和待改进之处有:1)arcpy脚本运行速度受限 2)生成的脚本语句过长,有待进一步改进。3)脚本运行过程中错误处理方式有待进一步优化 。