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.非归属:
在非属性关系中,关系类包含在非空间表中,该表只包含源和目标特征键。
在带属性关系中,关系类包含在一个非空间表中,该表具有比标识键更多的属性。
阅读关系类
在读取关系类时,源和目标特性类必须与关系类同时读取。关系特征类型显示任意一个允许的几何形状大地坐标系或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
关系:插入、更新或删除
请注意,具有参与的归属关系可以插入,更新和删除。但功能参与非归属关系只能插入和删除。因为属性关系具有与其关联的中间表,中间表的属性(不包括密钥的值),可以通过提供一种RID(关系ID)作为更新/键字段更新。
在地理数据库中,关系键不必须是类型对象ID(整数)的。他们可能是例如GUID。在这种情况下,这是很有诱惑力的关系加载外键的属性。你并不需要这样做。你只需要设置geodb_rel_origin_oid&geodb_rel_destination_oid的值。在FME地理数据库作家将填充的关系要素类的外键。
仅使用一个地理数据库编写器:要小心,如果你在你的工作区多个地理数据库的作家。参与的关系和关系类的起源和目的地要素类(或表)必须由同一个地理数据库写入器被写入(即你无法写入设有一个地理数据库作家和关系类与另一个)班。
有时,在出发地和目的地的要素类的数据已经存在,你只是想添加关系到关系表。如果你能做到这一点:
- 的关系为M:N或归因关系
- 关系类已经存在于地理数据库
设置geodb_type到geodb_relationship或geodb_attributed关系(如果归结)和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的关系,这种关系已经完成),否则你会被删除并重新插入其参与的关系特征,从而重建 that relationship.
仅限Geodatabase文件-不包括SDE Geodatabase:
1:1,1:m,m:n归属关系和m:n非归属关系:如果你已经填充要素类,需要插入关系表来填充它,或者你想更新或在归属关系表中插入的属性,你可以简单地插入到关系表的情况下直接写入到其参与的要素类 the relationship.这包括主/外键和/或属性。这里假设你已经有一个表或一些源与定义这些关系。这可能是一个不太常见的工作流程,但它是可行的,并可能是一亚搏在线个很好的高级职位,或只是我们增加了文章为抛开的一个东西。一般情况下,你会插入到两个要素类和建筑/插入关系表在同一时间。
SDE地理数据库:
1:1,1:m,m:n归属关系和m:n非归属关系:
FME可以仅被用于更新在归属关系,而不是RID,外国和主键属性。如果这是可取的,必须进行删除和插入操作。
目前,还没有插入现有的关系属性与一个SDE地理数据库中的关系表不读,以获得对象ID参与的关系特征的一种方式。这部分是因为填充在ArcGIS这些关系需要渊源以及采摘目的地交互,而不是仅仅定义的关系。因此,如果参与关系类的特征已经存在于数据库中,并且仅需要填充关系表,则必须读取所参与的特征。这是获取objectid所必需的,但是这些特性不会被写回。为了填充关系表,需要将从原点和目标关系要素读取的objectid分别重命名为geodb_rel_origin_oid和geodb_rel_destination_oid。
关于删除关系类的记录…
可以从关系类中删除单个记录。为此,您可以:
©2019安全亚搏在线软件公司法律