西班牙
斯潘4
本文包含许多编写geodatabase关系类的示例。它包括以下概念的演示使用geodatabase关系类简介是的。示例包括1:m关系、插入m:n m:n或属性关系以及高级m:n关系。
对于以下示例,假设关系已经在arcgis中创建。这是必需的,因为fme不能创建关系,而只能填充它们。
*本文中使用的/提到的ESRI文件Geodatabase reader/writer需要ArcGIS的授权版本。有关所需ArcGIS许可级别的更多信息,请参见FME地理数据库格式需要ArcGIS许可类型是的。的SDE和Geodatabase的FME读写器的比较文章也可能有用。
请注意: FME无法在目标地理数据库中创建关系类。要么在ArcGIS/ArcPro中创建关系类,要么使用a 模板是的。
在本例中,将演示1:m关系类翻译。如前一篇文章所述,当处理以1:m类别为中心的关系类时,没有中间表来跟踪这些关系。因此,这些关系通过主键和外键相互绑定。
步骤
1)打开提供的工作区“one2manyrelstart.fmwt”,或打开空白工作区并添加“esri file geodb”读取器。
如果打开了提供的工作区,请跳到步骤3。
2)对于ESRI文件geodb reader,导航到1Manyrelstart.gdb。选择它并单击“确定”。
再次单击“确定”。当被要求选择地块和邻域要素类型时,应添加读取器。当被要求选择地块和邻域要素类型时,应添加读取器。
3)向每个要素类添加attributecreator,新属性为
“geodb_feature_has_relationships”,值为“yes”。
4)同一“属性创建者”。将origin和destination要素类的“objectid”重命名为“geodb_oid”。这样做是为了告诉作者哪些特征是相关的。必须确保大地水准面是原点表的ID。例如:要在地块和邻域之间建立关系,请使用objectid(原始表)和neighbourid(目标表)。
AttributeCreator参数
5)现在是将writer添加到工作区的时候了。写入程序>添加写入程序。选择“esri file geodb”作为格式。
选择要保存输出geodatabase的文件夹位置,并为geodatabase命名。
单击参数,并将导入XML工作区模板设置为提供的XML文档:“xml workspace template.xml”。这将允许您使用提供架构(包括关系类)的模板写入新的geodatabase。
注意:除非在每次完成转换后更改输出名称,否则在初始转换后删除XML模板,以允许覆盖现有的地理数据库。
单击Run。工作空间应该成功完成。检查任何ArcGIS产品中的地理数据库。您应该能够使用ArcMap查看哪些特性与哪些特性相关。下面是ParcelID的一个例子:144。可以看出,它与Kitsilano社区有关。
有时,源和目标特性类中的数据已经存在,您只想将关系添加到关系表中。你可以这样做,如果:
-关系是M:N或属性关系
-关系类已经存在于您的地理数据库中
要添加关系,请将geodb_type设置为geodb_relationship或geodb_attributedrelationship(如果有属性),并将geodb_rel_origin_oid和geodb_rel_destination_oid设置为它们各自的OBJECTID。这确实需要FME读取参与关系的特性类,但不需要再次将它们写出来。在这种情况下,只需要写入关系表。
步骤
通过查看工作空间,您可以看到从地理数据库中读取的两个特性类。在继续之前,让我们先看看我们正在读取的地理数据库。
2)打开ArcCatalog,导航到包含地理数据库的文件夹
FMWT文件。
通过查看地理数据库,我们可以看到两个表(结构和地址)以及一个关系类(Structure_to_Address_rel)。
在ArcCatalog中检查源数据
在这里,您可以看到已经创建了relationship类。视图可以通过ArcGIS访问,并打开关系类的属性。右键单击关系类>属性。提醒一下,这是因为必须在ArcGIS中创建关系类,然后可以通过FME填充它们。
事实上,这是一个M:N关系,我们需要确保将一些属性存储在要写入关系类的特性中。
源和目标oid,指的是各自特性类上的主键和外键。在本例中,我们使用ObjectID作为新创建的源/目标oid的值。需要注意的是,这些新创建的值并没有显式地写入到地理数据库中,而是帮助FME处理特性与关系之间的关系。为了将这些特性存储到每个特性类中,我们需要为每个特性类添加一个AttributeManager。这允许用户创建前面提到的所需属性。
原始属性管理器参数(结构表):
目标属性管理器参数(地址表):
设置了主键和外键之后,我们现在可以使用一个FeatureMerger转换器合并这些特性。这将使用两个特性类(在本例中为结构)之间共享的字段合并特性。SiteID Address.Remarks。
5)最后,需要另一个AttributeManager transformer来确保将特征识别为特征类。这是通过将geodb_type设置为' geodb_relationship '来实现的,如果要处理带属性的关系,则需要将值设置为' geodb_attributed_relationship '。
6)最后,加上作者。在这里,我们直接写入关系表。为了正确地做到这一点,我们之前设置的值:
Geodb_rel_origin_oid
Geodb_rel_destination_oid
Geodb_type
我们不需要设置外键值(StructureEventID和AddressEventID),因为只要相应地映射了上述值,写入器就会填充这些外键值。
运行工作区。现在应该用AddressEventID和StructureEventId的外键值填充关系类。
如果从两个特性类开始,并且您想要用一个关系类插入到一个新的地理数据库中,那么需要一个1:M关系工作空间和更新一个M:N关系工作空间的组合来执行这个任务。同样,需要注意的是,在转换之前,需要通过ArcGIS在目的地创建relationship类。这样一个工作空间的例子可以在“Many2ManyAdvanced”模板中看到。
?2019安全亚搏在线软件公司|合法的