西班牙
斯潘4
域是定义属性允许值的一组规则。它们用于约束数据值,以确保数据完整性。域在geodatabase中定义为唯一实体,可以应用于geodatabase中包含域定义的任何要素类中的任何属性。
有两种类型的地理数据库域(编码域和范围域)都受fme支持。编码域本质上是多个有效值的列表,而范围域是单个允许的数值范围。
读取地理数据库时,fme可以选择解析域。
选中此选项时,将添加一个名为_
请注意: 如果可以,我们建议使用前面描述的地理数据库模板在这里是的。这通常比在FME特性类型中定义域更容易、更灵活。
FME有能力写入现有的或创建新的GEORBATABLE表。因此,在编写geodatabase域时,工作流需求将倾向于属于以下三种情况之一:亚搏在线
这些场景主要由以下writer参数控制:
-数据类型:编码域/范围域
-验证要写入参数值的功能:是/否
尽管有下面提到的场景,但应该注意的是,在geodatabase编写器上使用xml工作区文档(包含所需的域定义)作为模板,是编写geodatabase域的一种高效和高度推荐的方法。有关使用架构导入XML文档的详细信息,请参见Geodatabase作家文档是的。
场景1:使用现有域写入现有表
默认情况下,写入到现有域字段的任何数据都是正常插入的。由于表已经存在,其属性(s)将已经与所需的域相关联,并且不需要设置任何参数来定义该连接。
但是,如果希望验证传入数据(例如,将其与域定义进行比较以确保其具有有效的属性值),则必须将writer参数“validate features to write”设置为“是”。如果validation参数设置为no,则数据将毫无错误地传递到geodatabase,尽管某些数据值可能不符合域规则。
场景2:使用现有域写入新表
当创建要使用现有域的新表时,需要与域关联的属性应被赋予数据类型。coded_domain或range_domain(取决于其类型)在架构定义中。然后单击属性宽度字段中的编辑按钮,并在“域名”部分中输入现有域的名称。
场景3:写入新表并创建新域
需要注意的是,我们通常建议您使用arcgis创建和定义域,在插入新特性时使用fme关联属性或验证数据。但是,使用fme可以创建域。这个过程与使用现有域相同,直到打开编辑器对话框的那一点为止。此时,您将检查“create domain”参数,输入一个新域名,并定义该域的值。
请注意,如果将“validatefeaturestowrite”参数设置为yes,则将根据任何新定义的域自动验证传入的功能。
限制
在领域写作方面有一些限制。
首先,不可能写入现有表,或者创建与现有域的关联或创建全新域。这是因为该关联被封装在表定义中,并且现有的表定义不能被FME更改。您需要删除现有表并重新创建它,以便能够做到这一点。
其次,出于同样的原因,创建一个域是一次性的翻译。在初始过程中,您可以将数据类型设置为coded_domain/range_domain,但是后续的数据加载应该在数据类型更改回实际数据类型(char、integer等)的情况下完成。
最后,不可能动态创建域(即域定义应该在执行之前手动定义,而不是在工作区过程中定义)。
下面的示例演示场景3:写入新表并创建新域。
道路(Autodesk AutoCAD DWG/DXF)
在上图中,我们看到了autocad dwg的源道路可视化。在autocad_layer format属性中可以看到受目标geodatabase域定义约束的值。
1.阅读源数据
使用autodesk autocad dwg/dxf从源autocad dwg文件读取道路要素几何图形读卡器,同时将从格式属性autocad_layer读取受geodatabase域约束的值。添加autodesk autocad dwg/dxf读取器时,请确保将工作流选项设置为单个合并的要素类型。亚搏在线这意味着我们只需要一个reader特性类型来读取所有源数据。
此外,单击parameters按钮,在groupentitiesbysection中,选择attribute schema。
将读卡器添加到工作区画布后,双击读卡器并选择“格式属性”选项卡。向下滚动并选中“autocad_图层”旁边的复选框。单击“确定”。
2.将属性映射到域代码
attributeValueMapper用于将来自源DWG的值映射到我们将应用于域定义的域代码。将AttributeValueMapper添加到画布并打开“参数”对话框。选择autocad_layer作为源属性,并输入streetcontegory作为目标属性。输入99作为默认值,因为这将是我们将用于未知街道类型的域代码。在“参数”对话框的“值映射”部分中,输入如下图所示的值:
2.(备用)将属性映射到已解析的域值
作为上述步骤的替代,可以使用attributemanager从源dwg文件中获取值,并根据域定义解析的值将其映射到域定义。要执行此操作,请将attributemanager添加到工作区并打开“参数”对话框。将autocad_图层重命名为streetcontegory_resolved-域的已解析版本(您需要键入StreetCategory_resolved)中。
当您的工作流位于场景1(使用现有域定义写入现有表)或场景2(使用现有域写入地理数据库中的一个新表亚搏在线)时,上述情况最为适用。在这两种情况下,都假设一个人不知道域定义中包含的实际域代码,而是知道解析的值。但是,在创建域时,此过程也将起作用。
3.编写特性并创建域
将esri geodatabase(文件geodb)writer添加到工作区,从读卡器复制模式,并指定将数据写入的输出geodatabase(即域)。单击参数选项卡并展开高级部分。将“验证功能”设置为“是”。此设置将确保传入的源数据符合我们的域定义。添加后,将attributevaluemapper的输出(或者,根据工作区遵循的工作流,attributemanager)连接到geodatabase编写器。亚搏在线
双击writer,在general选项卡下,为输出特性类/表输入一个更有意义的名称(即街道)。接下来,单击“用户属性”选项卡,并在“名称”下,将“autocad_图层”属性更改为“streetCategory”,并将类型设置为“编码域”。
单击“编辑”按钮,将打开“编码域”对话框窗口。输入域名(即,选中“创建域”旁边的复选框,然后输入域定义的数据类型。最后,输入域定义的代码和解析后的值。
最后,确保From_HBlock设置为char类型。
保存并运行工作区。
利用域码的工作空间
利用解析域值的工作空间
*上述示例中使用的ESRI地理数据库(文件Geodb)读写器/编写器要求用户能够使用ArcGIS的授权版本。有关所需ArcGIS许可级别的更多信息,请参见FME地理数据库格式需要ArcGIS许可类型。
?2019安全亚搏在线软件公司|合法的