span8
span4
与文件地理数据库工作时一个可能遇到的情况是,一个希望而改变其架构,而无需删除现有的特征类表格将数据写入到现有的要素类。这将允许用户以维持其现有的要素类的字段名称,而手动或从源数据集,添加新的领域。虽然我们建议任何模式改建现有要素类由您的ArcGIS客户端来处理,下面的例子将展示如何使用这两种FME和ArcGIS Python模块在FME将字段添加到现有的地理数据库要素类。
Python解释器必须是设置为解释器由ArcGIS安装。看到:没有名为arcpy的模块:导入esri的arcpy以用于fme
安装在同一台机器上FME的ArcGIS
另外,在上述图像中,我们看到包含新字段“卡车”,其中我们要添加到现有要素类的源ESRI的shape文件的可视化。
在上图中,我们看到了目标要素类的可视化。如可以看到的,该数据是除了将shape文件具有一个附加的属性字段基本上相同。
一。读取源数据并公开属性
垃圾附表几何形状从与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代码添加到我们的目标要素类。
三。向目标要素类添加字段
为了使源SabFEFLE中包含的新字段被包含到我们现有的目的地特征类中,必须以编程方式添加。这将允许在不必删除现有特征类表的情况下进行架构更改。蟒蛇通过调用fme(fmeobjects)和arcgis(arcpy)的功能来进行这些更改。
首先,导入fme和arcgis的python模块,然后从相应的fme宏中读取目标地理数据库路径。然后,我们将目标要素类的名称硬编码到geodatabase路径。然后使用arcpy函数“list fields”获取目标要素类中当前包含的字段名的单个字符串。然后创建一个空列表变量,并将列表字段调用中的字符串追加到空列表中。
其次,使用fmeobjects feature.getAllAttributeNames()函数获取源数据集中字段的列表。然后,我们将目标属性列表与源属性中包含的值进行比较,从源属性列表中移除源属性列表中已经存在的实例。
最后,我们循环遍历源属性列表中的其余值,并根据所讨论属性的数据类型向目标要素类添加字段。
下面包含将出现在pythoncaller中的整个代码定义:
import fme import fmeobjects import arcpy#Template Function interface:#使用此函数时,请确保将其名称设置为“要处理功能的类或函数”转换器参数def Process feature(feature)的值:#从fme宏值中获取目标GDB的位置。Dest_GDB=fme.macroValues['DestDataset_GEODATABASE_FILE']\。dest_featureClass=dest_gdb+'\\garbageschedule'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中的val:source_attr.remove(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”)
请确保将类或函数更改为“processfeature”,以便执行正确的函数。
四。写入数据
将esri geodatabase(文件geodb)编写器添加到工作区。对于writer数据集,导航到提供的geodatabase(请参阅下载部分的add_fields.zip)。对于要素类或表定义,请选择“从数据集导入”。选择DataSet选项的导入是因为GeatDatabase中已经存在特征类,我们将编写数据并更改其架构。
出现提示时,设置格式并选择上面段落中提到的geodatabase文件(它可能-应该-已经由FME设置)。FME现在将扫描地理数据库以确认哪些表存在。当提示输入类列表时,选择垃圾时间表是的。
将编写器添加到画布后,双击编写器功能类型以进入“功能类型属性”对话框。单击“格式参数”选项卡并将“截断表”设置为“是”。
保存并运行工作区并检查shapefile中的数据,但现在也添加了“Truck”字段,同时保留了feature类中的原始属性字段名。
数据属性
此处使用的数据源于温哥华市,不列颠哥伦比亚省。它包含根据开放的政府许可证-温哥华许可的信息。
©2019安全亚搏在线软件公司|法律