span8
span4
以上视频涵盖理论本文中介绍,和写作的ArcGIS地理数据库附件例
地理数据库关系类用于与其他功能来管理一个要素类特征之间的关系。归因和非归属关系类可以读取和写入FME。关系并不像其他功能表或要素类的行,但通过始发地和目的地功能的主键和外键的值的联系。
“起源”特征属于“起源表/要素类”创造ArcCatalog中的关系类时指定,而“目的地”的特性属于“目标表/要素类”。
关系类可以是简单的或复合材料,以及归因或非归属。
有关ArcGIS中关系的详细信息,请参考:http://desktop.arcgis.com/en/arcmap/10.3/manage-data/relationships/relationships-and-arcgis.htm
注意,本文中使用/提到的esri文件geodatabase reader/writer需要arcgis的许可版本。有关所需Arcgis许可级别的详细信息,请参阅所需的ArcGIS许可类型为FME地理数据库格式。这个FME读者和作家的SDE和地理数据库的比较也可能有用。
关系示例可在编写geodatabase关系类
简单对。混合成的:
在“简单”的关系类,特征可以彼此独立地存在 - 例如一个特征可以,而不必具有连接存在,任何附接可以在不影响功能被删除。
在“复合”关系类,始发地和目的地对象的结合更加紧密。如果一个功能被删除,以便也将是相关附件记录。
归属vs.非归属:
在非归属关系,关系类包含在只包含出发地和目的地功能键非空间表。
在一个归属关系,该关系类包含在非空间表不仅仅是标识键更多的属性。
阅读关系类
当读取一个关系类,两者的出发地和目的地的要素类必须同时作为关系类阅读。的关系特征类型示出的任一所允许的几何大地坐标系要么geodb_归属关系。
从一个关系类阅读时,每个关系特征储存了下面的格式属性:
这些属性可以用来识别工作区中的起点和终点特征之间的关系。这些属性用于FME的过程,格式属性,并不会出现在最终的书面输出。
性能
需要注意的是,从关系类阅读速度很慢,因为在读取时每个关系进行验证。因为此功能是不是经常需要,FME包括参数,默认情况下,关闭关系阅读来提高性能。因此,要读取关系类,您必须首先定位并停用“忽略关系信息”参数。
编写关系类
关系类不能通过FME创建,必须在运行转换之前通过ArcGIS设置。一旦在ArcGIS中定义了关系,以下属性必须存储在FME (这只与m:n和属性关系有关,因为您直接与关系表交互):
以下属性必须存储在写入到参与关系的源和目标特性类/表的特性上(这适用于所有类型的基数(1:1,1:M, M:N和属性)):
注:
写入关系类需要的属性:
宾语 | 必需的属性 |
产地要素类或表 | geodb_oid geodb_feature_has_relationships =是 |
目标要素类或表 | geodb_oid geodb_feature_has_relationships =是 |
关系类 | geodb_rel_origin_oid geodb_rel_destination_oid geodb_type =大地坐标系要么geodb_attributed_relationship 表处理:利用现有的 |
例如,如果原始特性geodb_oid = 1,而目标特性geodb_oid = 2,那么写入关系表的特性必须具有以下属性:
geodb_rel_origin_oid = 1
geodb_rel_destination_oid = 2
关系:插入、更新或删除
请注意参与的特性归属关系可以插入,更新和删除。而是参与a的功能非归属关系只能插入和删除。由于属性关系有与之关联的中间表,所以可以通过提供RID(关系id)作为更新/键字段来更新中间表的属性(不包括键值)。
在地理数据库中,关系键不必是对象ID(整数)类型。例如,他们可以是一个GUID。在这种情况下,很容易在关系中加载外键属性。你不需要这么做。您只需要设置geodb_rel_origin_oid和geodb_rel_destination_oid的值。FME Geodb编写器将填充关系特性类外键。
仅使用一个地理数据库编写器:如果您的工作空间中有多个地理数据库写入器,请小心。参与关系和关系类的源和目标特性类(或表)必须由相同的地理数据库编写器(即您不能使用一个地理数据库写入器来编写特性类,也不能使用另一个地理数据库写入器来编写关系类)。
有时候,源和目标特性类中的数据已经存在,而您只是希望这样添加关系到关系表。你可以这样做,如果:
-关系是M:N或属性关系
-关系类已经存在于geodb中
将geodb_type设置为geodb_relationship或geodb_attributedrelationship(如果带属性),将geodb_rel_origin_oid和geodb_rel_destination_oid设置为它们各自的OBJECTID。这确实需要FME读取参与关系的特性类,但不需要再次将它们写出来。在这种情况下,只需要写入关系表。
关系背景
必须使用ArcGIS工具创建关系,因为它们不能在FME中创建。
1:1,1:m非归属关系:它们没有用于跟踪关系的中间表。它们使用主(源表)和外(目标表)键进行链接。
m:n和任何1:1、1:m或m:n归属关系:单独的表用于跟踪关系。为了跟踪这些关系,每个关系条目都包含一个惟一的RID值以及主键和外键。
文件geodatabase和sde geodatabase:
1:1,1:m非属性化要素类:如果使用FME进行插入,您可以从空的特性类开始(因为一旦您在ArcMap中创建了关系,关系就已经完成了),也可以删除并重新插入参与关系的特性,从而重新构建关系。
仅限Geodatabase文件-不包括SDE Geodatabase:
1:1,1:m,m:n归属关系和m:n非归属关系:如果已经填充了特性类,需要插入关系表来填充它,或者希望更新或插入带属性关系表中的属性,可以直接插入关系表,而不需要写入参与关系的特性类。这包括主键/外键和/或属性。这里的假设是您已经定义了这些关系的表或某些源。这可能是一个不太常见的工作流程,但它是可行的,可能是一篇亚搏在线很好的高级文章,或者只是我们作为补充添加到其中一篇文章中的内容。通常,您将同时插入特性类和构建/插入关系表。
SDE地理数据库:
1:1,1:m,m:n归属关系和m:n非归属关系:
FME只能用于更新属性关系中的属性,而不能用于更新RID、外键和主键。如果需要这样做,则必须执行删除和插入操作。
目前,没有一种方法可以将现有的关系属性插入到带有SDE地理数据库的关系表中,而不必读取参与关系的特性来获取ObjectID。部分原因是,在ArcGIS中填充这些关系需要交互式地选择起点和终点,而不仅仅是定义关系。因此,如果参与关系类的特征已经存在于数据库中,并且仅需要填充关系表,则必须读取所参与的特征。这是获取objectid所必需的,但是这些特性不会被写回。为了填充关系表,需要将从原点和目标关系要素读取的objectid分别重命名为geodb_rel_origin_oid和geodb_rel_destination_oid。
关于删除关系类的记录…
可以从关系类中删除单个记录。为此,您可以:
©2019安全亚搏在线软件公司|法律