西班牙
斯潘4
当使用文件地理数据库时可能遇到的场景是,希望在不改变现有功能类表的情况下,将数据写入现有的特性类,同时改变其模式。这将允许用户维护其现有特征类的字段名,同时手动或源数据集添加新字段。虽然我们确实建议ArcGIS客户端处理现有特征类的任何模式更改,但下面的示例将显示如何在FME中使用FME和ArcGIS Python模块来向现有的GeDeMek特征类添加字段。
python解释器必须是设置为解释器由Arcgis安装。见:没有名为arcpy的模块:导入esri的arcpy以用于fme
ARCGIS与FME安装在同一台机器上
在上面的图像中,我们看到了包含ESW RealSeFiFILE的可视化,其中包含了我们想添加到现有特征类中的新字段“Boad”。
在上图中,我们看到了目标要素类的可视化。可以看到,除了shapefile有一个额外的属性字段外,数据基本上是相同的。
1.读取源数据并公开属性
垃圾计划几何图形是使用esri shapefile读取器从shapefile源文件读取的。此shapefile包含一个属性字段,该字段不出现在我们将向其写入数据的相应要素类上。将shapefile读取器添加到工作区后,打开“读取器参数”对话框并单击“格式参数”选项卡。公开以下属性(即复选框):
功能类型
fme_几何
形状几何
FME U型
*注意-需要公开的属性因数据集、格式和格式而异。
2.重命名/删除属性
attributeManager将用于重命名源shapefile数据集中的各种属性并将其移除。将shapefile读取器连接到attributemanager,并在attributemanager属性中,将输出属性“numaddress”更改为“numaddress”。此外,更改fme_geometry、fme_type、fme_feature_type和shape_geometry(即在上一步中公开的属性)为“remove”。
*注意-公开的格式属性将被删除,这样它们就不会通过我们即将发布的python代码附加到目标特性类中。
3.向目标特性类添加字段
为了将源shapefile中包含的新字段包含到现有的目标特性类中,必须以编程方式添加它。这将允许进行模式更改,而不必删除现有的特性类表。PythonCaller通过调用FME (fmeobjects)和ArcGIS (arcpy)的功能来进行这些更改。
首先,导入FME和ArcGIS的python模块,然后从相应的FME宏读取目标地理数据库路径。然后,我们将目标特性类的名称硬编码到地理数据库路径。arcpy函数“List Fields”用于获取当前包含在目标特性类中的字段名的单独字符串。然后创建一个空列表变量,并将list字段调用中的字符串追加到空列表。
getallattributenames()函数用于获取源数据集上的字段列表。然后,我们将目标属性列表与源属性中包含的值进行比较,从源属性列表中删除源属性已经存在于目标数据集中的实例。
最后,我们循环遍历源属性列表中的剩余值,并根据相关属性的数据类型向目标特性类添加字段。
下面包含将出现在PythonCaller中的整个代码定义:
fme进口fmeobjects进口进口:arcpy #模板函数接口:#使用这个函数时,确保它的名字是#的值设置为类或函数过程特性的变压器参数def processFeature(特性):#得到目标的位置GDB fme宏的值。Dest_GDB = fme基金。macroValues['DestDataset_GEODATABASE_FILE'] # Call in the Destination feature class from the Destination Geodatabase and # get a list of field names from the destination feature class.dest_featureclass = Dest_GDB + '\\GarbageSchedule' dest_attr = arcpy.ListFields(dest_featureclass)dest_list = [] for a in dest_attr: dest_list.append(a.name) # Get属性名来自源文件。source_attr = feature.getAllAttributeNames() #比较dest_list中的值和source_attr列表中的值,#删除dest_list中val的重复项:(源文件在目标文件中不存在),#使用适当的数据类型添加相应的#字段。用户可以根据数据需要为#数据类型添加更多if语句。对于source_attr中的值:if type(value) == str: arcpy。AddField_management(dest_featureclass, value, "TEXT") if type(value) == int: arcpy.AddField_management(dest_featureclass, value, "LONG")
确保将Process特性的类或函数更改为“processFeature”,以便执行适当的函数。
4.写入数据
将Esri地理数据库(文件Geodb)写入器添加到工作区。对于writer数据集,导航到提供的地理数据库(请参阅下载部分的add_fields.zip)。对于特性类或表定义,选择“从数据集导入”。之所以选择Import from Dataset选项,是因为特性类已经存在于地理数据库中,我们将写入数据并更改其模式。
当提示时,设置格式并选择上文所述的文件geodatabase(它可能—应该—已经由FME设置)。FME现在将扫描地理数据库以确认存在哪些表。当提示一个类列表时,选择GarbageSchedule。
将写入器添加到画布后,双击写入器功能类型以进入功能类型属性对话框。单击Format Parameters选项卡,将Truncate表设置为“Yes”。
保存并运行工作空间并检查来自shapefile的数据,但是现在还添加了“Truck”字段,同时维护来自feature类的原始属性字段名。
数据属性
这里使用的数据来源于由温哥华市不列颠哥伦比亚省。它包含在开放政府许可下的信息-温哥华。
?2019安全亚搏在线软件公司|合法的