西班牙
斯潘4
当使用文件地理数据库时可能遇到的场景是,希望在不改变现有功能类表的情况下,将数据写入现有的特性类,同时改变其模式。这将允许用户维护其现有特征类的字段名,同时手动或源数据集添加新字段。虽然我们确实建议ArcGIS客户端处理现有特征类的任何模式更改,但下面的示例将显示如何在FME中使用FME和ArcGIS Python模块来向现有的GeDeMek特征类添加字段。
python解释器必须是设置解释由Arcgis安装。见:没有名为arcpy的模块:导入esri的arcpy以用于fme
ARCGIS与FME安装在同一台机器上
在上面的图像中,我们看到了包含ESW RealSeFiFILE的可视化,其中包含了我们想添加到现有特征类中的新字段“Boad”。
在上图中,我们看到了目标要素类的可视化。可以看到,除了shapefile有一个额外的属性字段外,数据基本上是相同的。
1。阅读源数据和Expose属性
垃圾计划几何图形是使用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。添加字段到目标要素类
为了包含在源shape文件的新领域获得包括到我们现有的目标要素类,则必须以编程方式添加。这将允许架构更改生效,而不必放弃现有的特征类表格。该PythonCaller用于通过调用两个FME(fmeobjects)和ArcGIS(ArcPy中)的功能,使这些改变。
首先,对于两个FME python模块和ArcGIS被导入其中,所述目的地地理数据库路径,然后从对应FME宏读取。我们那么我们的目标要素类的名称硬编码到地理数据库路径。在ArcPy中的功能“列表字段”,然后用于获取当前包含在目标要素类的字段名称的单独字符串。然后创建一个空的列表变量,从我们的列表字段调用字符串被追加到空列表。
其次,fmeobjects feature.getAllAttributeNames()函数来获取对源数据集的字段列表。然后,我们的目标属性列表比较包含在源属性的值,从那里源属性的目标数据集已经存在的源属性列表中删除实例。
最后,我们循环源中的剩余价值属性列表和字段添加到基于问题的属性的数据类型的目标要素类。
下面包含将出现在PythonCaller整个代码定义:
进口FME进口fmeobjects导入ArcPy中#模板函数接口:#使用此功能时,请确保它的名称设置为#值的“类或函数来处理功能”变压器参数高清processFeature(功能):#获取的位置 the Destination GDB from the FME Macro value.Dest_GDB = fme.macroValues从目标地理数据库和#目标要素类[“DestDataset_GEODATABASE_FILE”]#调用得到目标要素类的字段名称的列表。dest_featureclass = Dest_GDB + '\\ GarbageSchedule' dest_attr = arcpy.ListFields(dest_featureclass)#创建空列表并追加从目标要素类的字段名称。dest_list = [用于在dest_attr]:dest_list.append(a.name)#获得从源文件属性名称。source_attr = feature.getAllAttributeNames()#在dest_list比较的值,以在source_attr列表中的值和在#dest_list删除重复用于VAL:如果val在source_attr:source_attr.remove(VAL)#对于剩余的属性(即源中不存在目标),#添加相应#字段与适当的数据类型。用户可如果#数据类型的语句作为其数据需要添加更多。在source_attr值:如果类型(值)== STR:arcpy.AddField_management(dest_featureclass,值, “TEXT”)如果类型(值)== INT:arcpy.AddField_management(dest_featureclass,值, “LONG”)
一定要更改类或函数来处理功能,以“processFeature”,使正常功能将被执行。
4。写数据
ESRI的地理数据库(文件地理数据库)的作家加入到工作区。对于作家的数据集,导航到所提供的地理数据库(请参阅add_fields.zip在下载部分)。要素类或表定义,选择“导入从数据集”。选择从数据集导入选项,因为要素类已在地理数据库存在,我们将数据写入并改变其架构。
出现提示时,设置的格式,然后选择文件地理数据库中上段提到(它可能 - 应该 - 已经由FME设置)。FME将扫描的地理数据库,以确认存在哪些表。当用类列表提示,选择GarbageSchedule。
一旦作家已经被添加到画布上,对作家特征类型双击进入专题类型属性对话框。单击格式参数选项卡,并设置截断表“是”。
保存并运行该工作区,检查从shape文件中的数据,而且目前拥有“卡车”领域,同时保持从要素类的原始属性字段名称添加。
数据归属
这里使用的数据来自经提供开放的数据起源温哥华市, 不列颠哥伦比亚省。它包含了开放政府许可协议进行许可信息 - 温哥华。
?2019安全亚搏在线软件公司|合法的