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许可级别的更多信息,请参见FME地理数据库格式需要ArcGIS许可类型。的SDE和Geodatabase的FME读写器的比较也可能有用。
中的关系示例编写地理数据库关系类
简单的vs。复合材料:
在“简单”的关系类,特征可以彼此独立地存在 - 例如一个特征可以,而不必具有连接存在,任何附接可以在不影响功能被删除。
在“复合”关系类,始发地和目的地对象的结合更加紧密。如果一个功能被删除,以便也将是相关附件记录。
由于vs。Non-attributed:
在非归属关系,关系类包含在只包含出发地和目的地功能键非空间表。
在一个归属关系,该关系类包含在非空间表不仅仅是标识键更多的属性。
阅读类的关系
当读取一个关系类,两者的出发地和目的地的要素类必须同时作为关系类阅读。的关系特征类型示出的任一所允许的几何geodb_relationship要么geodb_attributed_relationship。
从一个关系类阅读时,每个关系特征储存了下面的格式属性:
这些属性可以用来识别工作区中的起点和终点特征之间的关系。这些属性用于FME的过程,格式属性,并不会出现在最终的书面输出。
性能
需要注意的是,从关系类阅读速度很慢,因为在读取时每个关系进行验证。因为此功能是不是经常需要,FME包括参数,默认情况下,关闭关系阅读来提高性能。因此,要读取关系类,必须首先找到并停用“忽略关系信息”参数。
编写关系类
关系类不能通过fme创建,必须在运行转换之前通过arcgis设置。在arcgis中定义关系后,必须将以下属性存储在fme中写入关系类表的要素上(这只是到M:N的关系和属性关系,因为您直接与关系表交互)以下内容:
以下属性必须存储在写入参与关系的源和目标要素类/表的要素上(这适用于所有类型的基数(1:1、1:m、m:n和attributed)):
注意:
写入关系类所需的属性:
对象 | 必需属性 |
原始特性类或表 | geodb_oid geodb_feature_has_relationships =是的 |
目标特性类或表 | geodb_oid geodb_feature_has_relationships =是的 |
类的关系 | geodb_rel_origin_oid geodb_rel_destination_oid geodb_type =geodb_relationship要么geodb_attributed_relationship 表处理:使用现有的 |
例如,如果原始要素的geodb_oid=1,而目标要素的geodb_oid=2,则写入关系表的要素必须具有以下属性:
大地坐标系原点=1
geodb_rel_destination_oid=2
关系:插入、更新或删除
请注意,参与由于关系可以插入、更新和删除。但是参与non-attributed关系只能插入和删除。由于属性关系具有与其关联的中间表,因此可以通过将rid(关系id)作为update/key字段来更新中间表的属性(不包括键值)。
在geodatabase中,关系键不必是对象id(整数)类型。例如,它们可以是一个guid。在这种情况下,很容易在关系中加载外键属性。你不需要这么做。您只需要设置geodb_rel_origin_oid和geodb_rel_destination_oid的值。fme geodb编写器将填充关系功能类外键。
只使用一个地理数据库作者:如果工作区中有多个地理数据库编写器,请小心。参与关系和关系类的源要素类和目标要素类(或表)必须由同一地理数据库编写器(即不能用一个geodatabase编写器写入要素类,也不能写入另一个关系类)。
有时,原点和目的地特征类中的数据已经存在,而您只想添加的关系到关系表。如果出现以下情况,则可以执行此操作:
-关系是m:n或属性关系
-您的GEODB中已经存在关系类
将geodb_type设置为geodb_relation或geodb_attributed relation relation(如果已属性化),将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值以及主键和外键。
文件地理数据库和SDE地理数据库:
1:1, 1:M个非属性特征类:如果使用fme插入,则可能是从空的要素类开始(因为一旦在arcmap中创建关系,关系就已经完成),或者是删除并重新插入参与关系的要素,从而重建该关系。
文件地理数据库只有-不是SDE地理数据库:
1:1, 1:M, M:N有属性关系和M:N无属性关系:如果已填充要素类,并且需要插入关系表以填充该要素类,或者希望更新或插入属性关系表中的属性,则可以直接插入关系表,而不必写入参与关系的要素类。这包括主键/外键和/或属性。这里的假设是您已经定义了一个表或一些具有这些关系的源。这可能是一个不太常见的工作流,但它是可行的,可能是一个很亚搏在线好的高级帖子,或者只是我们作为旁白添加到一篇文章中的东西。通常,您将同时插入要素类和构建/插入关系表。
SDE Geodatabase:
1:1, 1:M, M:N有属性关系和M:N无属性关系:
fme只能用于更新属性关系中的属性,而不是rid、外键和主键。如果需要,则必须执行删除和插入操作。
目前,没有一种方法将现有的关系属性插入到SDE地理数据库的关系表中,而不需要读取参与关系的特征,以获得目标。这在一定程度上是因为在arcgis中填充这些关系需要交互地选择起点和终点,而不仅仅是定义关系。因此,如果参与关系类的特性已经存在于数据库中,并且只需要填充关系表,那么仍然必须读取参与关系类的特性。这是获取ObjectID所必需的,但是不需要将这些特性写回。为了填充关系表,ObjectID从源关系和目标关系中读取的特性需要分别重命名为geodb_rel_origin_oid和geodb_rel_destination_oid。
关于删除关系类的记录的更多信息…
您可以从关系类中删除单个记录。要做到这一点,你可以:
©2019安全亚搏在线软件公司|法律