span8
span4
在使用文件地理数据库时可能遇到的一个场景是,希望将数据写入现有的特性类,同时更改其模式,而不必删除现有的特性类表。这将允许用户在手动或从源数据集添加新字段时,维护其现有特性类的字段名。虽然我们确实建议现有特性类的模式更改由ArcGIS客户端处理,但下面的示例将展示如何在FME中使用FME和ArcGIS Python模块向现有的地理数据库特性类添加字段。
Python解释器必须是设置为解释器由ArcGIS安装。看:无模块命名ArcPy中:导入ESRI公司ArcPy中为使用FME
ArcGIS与FME安装在同一台机器上
另外,在上述图像中,我们看到包含新字段“卡车”,其中我们要添加到现有要素类的源ESRI的shape文件的可视化。
在上图中,我们看到了目标要素类的可视化。如可以看到的,该数据是除了将shape文件具有一个附加的属性字段基本上相同。
1.读取源数据并公开属性
使用Esri shapefile读取器从shapefile源文件读取垃圾调度几何体。这个shapefile包含一个属性字段,该字段不会出现在我们将向其写入数据的相应特性类上。将shapefile读取器添加到工作区后,打开读取器参数对话框并单击格式参数选项卡。暴露以下属性(即勾选复选框):
fme_feature_type
fme_geometry
SHAPE_GEOMETRY
fme_type
*注意-需要公开的属性会因数据集和格式的不同而不同。
2.重命名/删除属性
AttributeManager将用于从源shapefile数据集重命名和删除各种属性。将shapefile读取器连接到AttributeManager,并在AttributeManager属性中,将输出属性“NumAddress”更改为“NumAddresses”。此外,将fme_geometry, fme_type, fme_feature_type和SHAPE_GEOMETRY的Action(即上一步中暴露的属性)更改为“Remove”。
*注 - 暴露的格式属性被去除,使得它们不会通过我们即将到来的Python代码添加到我们的目标要素类。
3.添加字段到目标要素类
为了将源shapefile中包含的新字段包含到现有的目标特性类中,必须以编程方式添加它。这将允许在不删除现有特性类表的情况下进行模式更改。PythonCaller通过调用FME (fmeobjects)和ArcGIS (arcpy)的功能来进行这些更改。
首先,对于两个FME和ArcGIS Python模块被导入其中,所述目的地地理数据库路径,然后从对应FME宏读取。然后,我们硬编码了我们的目的地要素类与地理数据库的路径名。在ArcPy中的功能“列表字段”,然后用于获取当前包含在目标要素类的字段名称的单独字符串。然后创建一个空的列表变量,从我们的列表字段调用字符串被追加到空列表。
其次,使用fmeobjects feature.getAllAttributeNames()函数获取源数据集中的字段列表。然后将目标属性列表与源属性中包含的值进行比较,从源属性列表中删除源属性已经存在于目标数据集中的实例。
最后,我们循环遍历源属性列表中的其余值,并根据相关属性的数据类型向目标特性类添加字段。
下面包含将出现在PythonCaller整个代码定义:
进口FME进口fmeobjects导入ArcPy中#模板函数接口:#使用此功能时,请确保它的名称设置为#的价值“类或函数来处理功能”变压器参数高清processFeature(功能):#获取的位置从FME宏价值目标GDB。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() # Compare the values in dest_list to the values in the source_attr list and # remove duplicates for val in dest_list: if val in source_attr: source_attr.remove(val) # For the remaining attributes (i.e. source does not exist in destination), # add the corresponding # field with the proper data type. The user can add more if statements for # data types as their data requires. 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, value, "LONG")
请务必将类或函数改变工艺特点为“processFeature”,使正常功能将被执行。
4.写入数据
ESRI的地理数据库(文件地理数据库)的作家加入到工作区。对于作家的数据集,导航到地理数据库提供(请参阅add_fields.zip在下载部分)。要素类或表定义,选择“导入从数据集”。选择从数据集导入选项,因为要素类已在地理数据库存在,我们将数据写入并改变其架构。
当出现提示时,设置格式并选择上面段落中提到的文件地理数据库(它可能-应该-已经由FME设置)。FME现在将扫描地理数据库以确认哪些表存在。当提示类列表时,选择GarbageSchedule.
一旦写入器被添加到画布上,双击写入器特性类型以进入特性类型属性对话框。单击“格式参数”页签,将“截断表”设置为“是”。
保存并运行工作区和从shape文件检查数据,而且目前拥有“卡车”领域,同时保持从要素类的原始属性字段名称添加。
数据归属
这里使用的数据来源于由温哥华的城市不列颠哥伦比亚省。它包含了在温哥华开放政府许可证下许可的信息。
©2020 S亚搏在线afe Software Inc |法律