斯潘8
斯潘4
使用文件geodatabase时可能遇到的一种情况是,希望在不必删除现有要素类表的情况下更改其架构的同时将数据写入现有要素类。这将允许用户在手动或从源数据集添加新字段时维护其现有功能类的字段名。虽然我们确实建议您的ArcGIS客户机处理对现有特性类的任何模式更改,下面的示例将演示如何在FME中同时使用FME和Arcgis python模块来向现有的地理数据库功能类添加字段。
python解释器必须是设置为解释器由Arcgis安装。见
没有名为arcpy的模块:导入ESRI的arcpy以用于FME
在上图中,我们看到一个包含新字段“truck”的源形状文件的可视化,我们希望将其添加到现有的功能类中。
在上图中,我们看到了目标特性类的可视化。我们可以看到,除了shapefile有一个额外的属性字段外,数据基本上是相同的。
1。读取源数据并公开属性
垃圾计划几何图形是使用ESRI形状读取器从形状文件源文件读取的。此形状文件包含一个属性字段,该字段不显示在我们将写入数据的相应功能类上。将shapefile reader添加到工作区后,打开读卡器参数对话框,单击格式参数选项卡。公开以下属性(即复选框):
功能类型
FME_几何
形状\几何
FME_型
*注意-需要公开的属性因数据集而异,格式化为格式化。
2。重命名/删除属性
attributeManager将用于重命名和删除源shapefile数据集中的各种属性。将shapefile reader连接到attributeManager和attributeManager属性中,将输出属性“numAddress”更改为“numAddresses”。此外,更改FME_几何的操作,FME_型,FME_特征_类型和形状_几何(即上一步中公开的属性)到“移除”。
*注意-公开的格式属性将被删除,这样它们就不会通过即将到来的Python代码附加到目标特性类中。
三。将字段添加到目标要素类
为了使源shapefile中包含的新字段包含到我们现有的目标功能类中,必须以编程方式添加。这将允许在不必删除现有功能类表的情况下进行架构更改。pythoncaller通过调用fme(fmeobjects)和arcgis(arcpy)的功能来进行这些更改。
第一,导入了用于FME和ARCGIS的python模块,然后从相应的FME宏中读取目标地理数据库路径。然后,我们将目标特性类的名称硬编码为geodatabase路径。然后,arcpy函数“list fields”用于获取目标要素类中当前包含的各个字段名称字符串。然后创建一个空列表变量,并将列表字段调用中的字符串追加到空列表中。
其次,fmeobjects feature.getAllattributeNames()函数用于获取源数据集上的字段列表。然后将目标属性列表与源属性中包含的值进行比较,从源属性列表中删除目标数据集上已存在源属性的实例。
最后,我们循环访问源属性列表中的其余值,并根据相关属性的数据类型向目标功能类添加字段。
下面包含将出现在pythoncaller中的整个代码定义:
导入fmeimport fmeobjectsimport arcpy模板功能界面:使用此功能时,确保其名称设置为“要处理功能的类或函数”的值transformer参数def process feature(feature):从fme宏值中获取目标gdb的位置。dest_gdb=fme.macrovalues['destDataset_geodatabase_file']从目标geodatabase调用目标要素类,并从目标要素类获取字段名称列表。dest_feature class=dest_gdb+'\\garbagschedule'dest_attr=arcpy.listfields(dest_featureclass)创建空列表并从目标功能类附加字段名。dest_list=[]对于in dest_attr:dest_list.append(a.name)从源文件获取属性名。source_attr=feature.getAllattributeNames()将dest_列表中的值与source_attr列表中的值进行比较,并删除dest_列表中val的重复项:如果source_attr:source_attr.remove(val)用于其余属性(即目标中不存在源),#使用适当的数据类型添加相应的字段。用户可以根据数据需要为数据类型添加更多的if语句。对于源文件中的值,attr:if type(value)==str:arcpy.addfield_management(dest_featureclass,价值,“text”)如果type(value)==int:arcpy.addfield_management(dest_featureclass,价值,“长”)
确保将类或函数更改为“processFeature”,以便执行正确的函数。
4。写入数据
将ESRI地理数据库(文件geodb)编写器添加到工作区。对于编写器数据集,导航到提供的地理数据库(请参见下载部分的add_fields.zip)。对于要素类或表定义,选择“从数据集导入”。之所以选择从数据集导入选项,是因为要素类已经存在于地理数据库中,我们将写入数据并更改其模式。
当提示时,如上文所述,设置格式并选择文件geodatabase(可能–应该–已经由FME设置)。FME现在将扫描地理数据库以确认存在哪些表。当提示一个类列表时,选择垃圾桶.
一旦作者被添加到画布上,双击“编写器要素类型”以进入“要素类型属性”对话框。单击“格式参数”选项卡,并将“截断表”设置为“是”。
保存并运行工作区并检查形状文件中的数据,但现在也添加了“truck”字段,同时维护了要素类中的原始属性字段名称。
?2019安全亚搏在线软件公司|合法的