span8
span4
与文件地理数据库工作时,一个可能遇到的情况是,一个愿望而改变其模式,而不必放弃现有的要素类表中的数据写入到现有要素类。这将允许用户以维持其现有的要素类的字段名称,而手动或从源数据集,添加新的领域。虽然我们建议任何模式改建现有要素类由您的ArcGIS客户端来处理,下面的例子将展示如何使用这两种FME和ArcGIS Python模块在FME将字段添加到现有的地理数据库要素类。
Python解释器必须是设置解释由ArcGIS安装。看到的:没有名为ArcPy的模块:导入Esri的ArcPy与FME一起使用
在同一台机器上FME ArcGIS安装
在上面的图像中,我们看到了源Esri shapefile的可视化,其中包含我们想要添加到现有feature类的新字段“Truck”。
在上面的图像中,我们看到了目标特性类的可视化。可以看到,除了shapefile有一个额外的属性字段之外,数据本质上是相同的。
1.阅读源数据和Expose属性
垃圾附表几何形状从与ESRI的shape文件读取shape文件的源文件中读取。这shape文件包含不上的相应要素类,我们将写入数据显示属性字段。一旦shape文件阅读器已被添加到工作区,打开阅读器参数的对话,然后单击格式参数选项卡上。露出下面的属性(即检查箱):
fme_feature_type
fme_geometry
SHAPE_GEOMETRY
fme_type
*注 - 所需要的属性暴露会有所不同,从数据集的数据集,格式格式。
2.重命名/删除属性
的AttributeManager将用于用于重命名和从源shape文件数据集删除各种属性。shape文件阅读器连接到AttributeManager并在AttributeManager性质,改变输出属性“NumAddress”到“NumAddresses”。此外,对于fme_geometry,fme_type,fme_feature_type和SHAPE_GEOMETRY(即,在先前步骤中露出的属性)为“删除”更改的操作。
*注意——公开的格式属性正在被删除,这样它们就不会通过我们即将发布的Python代码被添加到我们的目标特性类中。
3.将字段添加到目标特性类
为了包含在源shape文件的新领域获得包括到我们现有的目标要素类,则必须以编程方式添加。这将允许架构更改生效,而不必放弃现有的特征类表格。该PythonCaller用于通过调用两个FME的功能(fmeobjects)和ArcGIS(ArcPy中)做出这些改变。
首先,导入FME和ArcGIS的python模块,然后从相应的FME宏读取目标地理数据库路径。然后,我们将目标特性类的名称硬编码到地理数据库路径。arcpy函数“List Fields”用于获取当前包含在目标特性类中的字段名的单独字符串。然后创建一个空列表变量,并将list字段调用中的字符串追加到空列表。
其次,fmeobjects feature.getAllAttributeNames()函数来获取对源数据集的字段列表。然后,我们比较包含在源属性目标属性列表中的值,从那里源属性的目标数据集已经存在的源属性列表中删除实例。
最后,我们循环源属性列表中,其余值字段添加到基于问题的属性的数据类型的目标要素类。
下面包含将出现在PythonCaller整个代码定义:
fme进口fmeobjects进口进口:arcpy #模板函数接口:#使用这个函数时,确保它的名字是#的值设置为类或函数过程特性的变压器参数def processFeature(特性):#得到目标的位置GDB fme宏的值。Dest_GDB = fme基金。macroValues['DestDataset_GEODATABASE_FILE']从目标地理数据库中调用目标功能类,并从目标功能类中获取字段名列表。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列表中的值和#删除重复的val dest_list:如果val source_attr: source_attr.remove (val) #剩余的属性(即源并不存在于目标),#添加相应的#字段与适当的数据类型。用户可以根据数据需要为#数据类型添加更多if语句。for value in source_attr: if type(value) == str: arcpy。AddField_management(dest_featureclass, value, "TEXT") if type(value) == int: arcpy。AddField_management (dest_featureclass价值,“长”)
确保将Process Features的类或函数更改为“processFeature”,以便执行适当的函数。
4.将数据
将Esri地理数据库(文件Geodb)写入器添加到工作区。对于writer数据集,导航到提供的地理数据库(请参阅下载部分中的add_fields.zip)。对于特性类或表定义,请选择“从数据集导入”。之所以选择Import from Dataset选项,是因为特性类已经存在于geodatabase中,我们将编写数据并更改其模式。
出现提示时,设置的格式,然后选择文件地理数据库中上段提到(它可能 - 应该 - 已经由FME设置)。FME将扫描的地理数据库,以确认哪些表存在。当用类列表提示,选择GarbageSchedule。
一旦作家已经被添加到画布上,对作家特征类型双击进入专题类型属性对话框。单击格式参数选项卡,并设置截断表“是”。
保存并运行工作区并检查来自shapefile的数据,现在还添加了“Truck”字段,同时维护来自feature类的原始属性字段名。
数据属性
这里使用源自从公开数据中的数据由提供温哥华市, 不列颠哥伦比亚省。它包含了开放政府许可协议进行许可信息 - 温哥华。
©2020安全亚搏在线软件公司|法律