斯潘8
斯潘4
以上视频涵盖了本文所涵盖的理论,和编写Arcgis地理数据库附件例子
地理数据库关系类用于管理一个要素类中要素与另一个要素之间的关系。属性关系类和非属性关系类可以使用FME读写。关系不像其他特性那样是表或特性类中的行,但是通过源和目标特性的主键值和外键值进行链接。
“原始”功能属于在ArcCatalog中创建关系类时指定的“原始表/功能类”。而“目的地”特性属于“目的地表/特性类”。
关系类可以是简单的或复合的,以及属性化或非属性化。
有关ArcGIS中关系的更多信息,请参考:http://desktop.arcgis.com/en/arcmap/10.3/manage-data/relationships/relationships-and-arcgis.htm
注意,本文中使用/提到的ESRI文件Geodatabase读写器/写入器需要获得ArcGIS的许可版本。有关所需ArcGIS许可级别的更多信息,请参阅FME地理数据库格式所需的ARCGIS许可证类型。这个SDE和Geodatabase中FME读写器的比较也可能有用。
的关系示例编写地理数据库关系类
简单VS混合成的:
在“简单”的关系类中,特征可以彼此独立存在——例如,特征可以存在而不必具有附件,任何附件都可以删除,不影响功能。
在“复合”关系类中,源对象和目标对象之间的连接更紧密。如果功能被删除,那么相关的附件记录也会被删除。
属性VSNon-attributed:
在非归属关系中,关系类包含在一个非空间表中,该表只包含源和目标功能键。
在归属关系中,relationship类包含在非空间表中,其中包含的属性不止标识键。
阅读类的关系
在读关系课的时候,源和目标要素类必须与关系类同时读取。关系特征类型显示允许的几何图形地理数据库关系或geodb_attributed_relationship。
从关系类读取时,每个关系功能都存储了以下格式属性:
这些属性可用于标识工作区中源和目标特性之间的关系。这些属性用于FME的流程,作为格式属性,不要出现在最终的书面输出中。
性能
请注意,从关系类中读取非常慢,因为读取时会验证每个关系。因为通常不需要这种功能,FME包含一个参数,默认情况下,关掉关系阅读来提高表现。因此,要读取关系类,必须首先找到并停用“忽略关系信息”参数。
编写关系类
关系类不能通过FME创建,必须在运行翻译之前通过Arcgis设置。一旦在Arcgis中定义了关系,以下属性必须存储在写进FME中关系类表的功能上(这只是与M:N和属性关系的关系,因为直接与关系表交互):
以下属性必须存储在写入源和目标要素类/表的要素上,这些要素参与到关系中(这适用于所有类型的基数(1:1,1:M,m:n和属性)):
注意:
写入关系类所需的属性:
对象 | 必需的属性 |
原始要素类或表 | 土拨鼠 geodb_特性_有_关系=对 |
目标特性类或表 | 土拨鼠 geodb_特性_有_关系=对 |
类的关系 | geodb_rel_origin_oid 地理数据库相关目标 GeodbyType =地理数据库关系或地理数据库属性关系 |
例如,如果一个源特征有geodb_oid = 1,一个目标特征有geodb_oid = 2,写入关系表的功能必须具有以下属性:
geodb_rel_origin_oid = 1
geodb_rel_destination_oid=2
关系:插入,更新或删除
请注意,参与归属关系可以插入,更新和删除。但参与的功能非归属关系只能插入和删除。因为属性化关系有关联的中间表,中间表的属性(不包括键值),可以通过提供一个RID(关系ID)作为更新/键字段进行更新。
在地理数据库中,关系键不必是对象ID (integer)类型。例如,它们可以是一个guid。在这种情况下,很容易在关系中加载外键属性。你不需要这么做。您只需要设置geodb_rel_origin_oid和geodb_rel_destination_oid的值。fme geodb writer将填充关系要素类外键。
仅使用一个地理数据库编写器:如果工作区中有多个地理数据库编写器,请小心。参与关系和关系类的源和目标要素类(或表)必须由同一个地理数据库编写器(即不能使用一个geodatabase编写器写入功能类,也不能使用另一个geodatabase编写器写入关系类)。
有时,源和目标特性类中的数据已经存在,您只需要这样做添加关系到关系表。您可以在以下情况下执行此操作:
-关系是M:N或属性关系
-关系类已经存在于geodb中
将geodb_type设置为geodb_relationship或geodb_attributedrelationship(如果是attributedrelationship),将geodb_rel_origin_oid和geodb_rel_destination_oid设置为各自的目标。这确实要求FME读取参与关系的特性类,但不需要再次将它们写出来。在这种情况下,只需要写入关系表。
背景的关系
必须使用ArcGIS工具创建关系,因为它们不能在FME中创建。
1:1,1:m非归属关系:它们没有用于跟踪关系的中间表。它们使用主键(原始表)和外键(目标表)进行链接。
M:N和任意1:1,1:m或m:n属性关系:单独的表用于跟踪关系。为了追踪这些关系,每个关系项都包含一个惟一的RID值以及主键和外键。
文件地理数据库和SDE地理数据库:
1:1,1:M非属性特征类:如果使用FME插入,您要么从空的feature类开始(因为一旦在ArcMap中创建了关系,关系已经完成),或者您将删除并重新插入参与关系的功能,从而重建关系。
文件地理数据库只-不SDE地理数据库:
1:1,1:M,M:N个属性关系和M:N个非属性关系:如果您已经填充了要素类,并且需要插入关系表来填充它,或者要在属性化关系表中更新或插入属性,您可以直接插入关系表,而不必写入参与关系的功能类。这包括主键/外键和/或属性。这里的假设是您已经有一个表或某个源,其中定义了这些关系。这可能是一个不太常见的工作流程,但它是可行的,也许是一篇亚搏在线好的高级文章,或者只是我们添加到其中一篇文章作为补充。一般来说,您将同时插入到特性类和构建/插入到关系表中。
SDE Geodatabase:
1:1,1:M,M:N个属性关系和M:N个非属性关系:
FME只能用于更新属性关系中的属性,不掉,外键和主键。如果这是可取的,必须执行删除和插入操作。
目前,没有一种方法可以将现有的关系属性插入到具有SDE地理数据库的关系表中,而不需要读取关系中参与的特性以获得客观目标。这在一定程度上是因为在ArcGIS中填充这些关系需要交互式地选择源和目的地,而不仅仅是定义关系。像这样的,如果参与关系类的功能已经存在于数据库中,并且只需要填充关系表,必须阅读参与的功能。为了得到目标函数,但是,这些特性不会被写回。为了填充关系表,需要分别将objectid从源和目标关系功能中读取的内容重命名为geodb ou rel ou origin ou oid和geodb ou rel ou destination ou oid。
关于删除关系类的记录的更多信息…
可以从关系类中删除单个记录。要做到这一点,你可以:
©2019安全亚搏在线软件公司|法律