西班牙
斯潘4
以上视频涵盖了本文所涉及的理论,以及编写Arcgis地理数据库附件例子
geodatabase关系类用于管理一个要素类中的要素与另一个要素类中的要素之间的关系。属性化和非属性化关系类可以用fme读写。关系不像其他要素那样是表或要素类中的行,而是通过原始要素和目标要素的主键和外键值进行的链接。
“origin”特征属于在arccatalog中创建关系类时指定的“origin table/feature class”,而“destination”特征属于“destination table/feature class”。
关系类可以是简单的或复合的,也可以是属性化的或非属性化的。
有关Arcgis中关系的更多信息,请参阅:http://desktop.arcgis.com/en/arcmap/10.3/manage-data/relationships/relationships-and-arcgis.htm
需要注意的是使用ESRI文件地理数据库读/写/这篇文章中提到,需要ArcGIS的行货版本..有关要求ArcGIS许可级别的详细信息,请参阅所需的ArcGIS许可类型为FME地理数据库格式。该FME读者和作家的SDE和地理数据库的比较也可能是有用的。
相关的例子是可用编写geodatabase关系类
简单对比综合:
在“简单”关系类中,特征可以彼此独立地存在——例如,一个特征可以存在而不必有附件,并且任何附件可以在不影响特征的情况下被删除。
在“复合”关系类中,源对象和目标对象的连接更紧密。如果功能也被删除,则相关的附件记录也会被删除。
归因与非归属:
在非属性关系中,关系类包含在仅包含原点和目标要素键的非空间表中。
在属性关系中,关系类包含在一个非空间表中,该表具有比标识键更多的属性。
阅读关系类
读取关系类时,必须同时读取源要素类和目标要素类。关系特征类型显示允许的几何图形geodb_relationship或geodb_attributed_relationship。
从关系类中读取时,每个关系功能都存储有以下格式属性:
这些属性可用于标识工作区内源要素和目标要素之间的关系。这些属性作为格式属性用于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_relationship或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值以及主键和外键。
文件地理数据库和地理数据库SDE:
1:1,1:M非归因要素类:如果使用FME进行插入,您可以从空的特性类开始(因为一旦您在ArcMap中创建了关系,关系就已经完成了),也可以删除并重新插入参与关系的特性,从而重新构建关系。
文件地理ONLY - 没有SDE地理数据库:
1:1,1:M,M:N归因关系和M:N非归属关系:如果已经填充了特性类,需要插入关系表来填充它,或者希望更新或插入带属性关系表中的属性,可以直接插入关系表,而不需要写入参与关系的特性类。这包括主键/外键和/或属性。这里的假设是您已经定义了这些关系的表或某些源。这可能是一个不太常见的工作流程,但它是可行的,可能是一篇亚搏在线很好的高级文章,或者只是我们作为补充添加到其中一篇文章中的内容。通常,您将同时插入特性类和构建/插入关系表。
SDE地理数据库:
1:1,1:M,M:N归因关系和M:N非归属关系:
FME只能用于更新属性关系中的属性,而不能用于更新RID、外键和主键。如果需要这样做,则必须执行删除和插入操作。
目前,没有一种方法可以将现有的关系属性插入到带有SDE地理数据库的关系表中,而不必读取参与关系的特性来获取ObjectID。部分原因是,在ArcGIS中填充这些关系需要交互式地选择起点和终点,而不仅仅是定义关系。因此,如果其参与的关系类的特点,在数据库中已经存在,只是关系表需要填充,其参与的特征仍然必须阅读。这样做是为了获得对象ID的要求,但这些功能不要写回。从出发地和目的地的关系特征的对象ID的读取将需要被重新命名为geodb_rel_origin_oid分别geodb_rel_destination_oid为了要填充关系表。
多了几分删除记录的一个关系类...
您可以从一个关系类中删除单个记录。要做到这一点,您可以:
?2019安全亚搏在线软件公司|合法的