斯潘8
斯潘4
域是定义属性允许值的一组规则。它们用于约束数据值,以确保数据完整性。域在地理数据库中定义为唯一实体,可以应用于包含域定义的地理数据库中任何要素类的任何属性。
有两种类型的地理数据库域(编码域和范围域),都由FME支持。编码域本质上是多个有效值的列表,而范围域是单个允许的数值范围。
读取地理数据库时,FME有一个解决域的选项。
选中此选项后,将添加一个附加属性,调用_
注释: 如果可以,我们建议使用描述的地理数据库模板在这里.这通常比在FME特征类型中定义域更容易和更灵活。
FME能够写入现有的或创建新的地理数据库表。像这样的,在编写地理数据库域时,工作流需亚搏在线求将倾向于以下三种情况之一:
这些场景主要由以下编写器参数控制:
-数据类型:编码域/范围域
-验证要写入参数值的功能:是/否
尽管有下面提到的情况,应该注意的是,使用XML工作区文档(包含所需的域定义)作为地理数据库编写器上的模板,是编写地理数据库域的一种高效且强烈推荐的方法。有关导入带有架构的XML文档的详细信息,请看地理数据库编写器文档.
场景1:使用现有域写入现有表
任何写入现有域字段的数据都是,默认情况下,正常插入。因为表已经存在,它的属性将已经与所需域关联,不需要设置任何参数来定义此连接。
然而,如果您希望验证传入数据,例如,将它与域定义进行比较,以确保它具有有效的属性值,然后必须将writer参数“validate features to write”设置为“yes”。如果验证参数设置为否,数据会毫无错误地传递到地理数据库中,尽管有些数据值可能不符合域规则。
场景2:使用现有域写入新表
创建要使用现有域的新表时,需要与域关联的属性应给定数据类型编码域或Range-域(取决于其类型)在模式定义中。然后单击属性宽度字段中的编辑按钮,并在“域名”部分输入现有域的名称。
场景3:写入新表并创建新域
应该注意的是,我们通常建议您使用ArcGIS创建和定义域,在插入新特征时,使用FME关联属性或验证数据。然而,使用FME可以创建域。该过程与使用现有域的过程相同,直到打开编辑对话框。此时,您检查“创建域”参数,输入新域名,并定义该域的值。
请注意,如果“验证要写入的功能”参数设置为是,传入功能将根据任何新定义的域自动验证。
局限性
在域名编写方面有一些限制。
首先,无法写入现有表,也无法创建与现有域的关联,也无法创建全新的域。这是因为这个关联包含在表定义中,现有的表定义不能被FME更改。为了能够做到这一点,您需要删除现有的表并完全重新创建它。
其次,出于上述同样的原因,创建域是一次性转换。您可以将数据类型设置为初始进程的编码域/范围域,但随后的数据加载应该在数据类型更改回实际数据类型(char,整数,等)
最后,无法动态创建域(即域定义应该在执行之前手动定义,而不是在工作区过程中定义)。
下面的示例演示 场景3:写入新表并创建新域。
道路(autodesk autocad dwg/dxf)
在上图中,我们看到了一个源道路的可视化autocadwg。将服从目标地理数据库域定义的值可以在“AutoCAD图层格式”属性中看到。
1。读取源数据
道路特征几何图形是使用autodesk autocad dwg/dxf从源autocad dwg文件中读取的。 读卡器,而受地理数据库域约束的值将从格式属性autocad_layer中读取。添加Autodesk AutoCAD DWG/DXF Reader时,请确保将工作流选项设置为单个合亚搏在线并的功能类型。这意味着我们只能得到一个读卡器特性类型来读取所有源数据。
此外,点击参数按钮,而且,在Group Entities by部分中,选择属性架构。
将读卡器添加到工作区画布后,双击读卡器并选择“格式属性”选项卡。向下滚动并选中AutoCAD_图层旁边的框。单击确定。
2。将属性映射到域代码
使用attributeValueMapper将来自源dwg的值映射到将应用于域定义的域代码。将attributeValueMapper添加到画布并打开参数对话框。选择autocad_图层作为源属性,输入streetcategory作为目标属性。输入99作为默认值,因为这将是我们将用于未知街道类型的域代码。在“参数”对话框的“值映射”部分中,输入以下屏幕截图中显示的值:
2。(可选)将属性映射到解析的域值
作为上述步骤的替代方案,你可以用一个属性管理器,从源dwg文件中获取值,并根据域定义解析值将其映射到域定义。这样做,将attributeManager添加到工作区并打开参数对话框。将autocad_layer重命名为streetcategory_resolved-域的解析版本(您需要键入街道类别已解决)
当您的工作流处于方案1(使用现有域定义写入现有表)或方案2(使用现有域写入地理数据库中的新表)下亚搏在线时,上述方法最适用。在这两种情况下,假设不知道域定义中包含的实际域代码,而是知道解析值。然而,这个过程在创建域时也会起作用。
三。编写功能并创建域
将ESRI地理数据库(文件geodb)编写器添加到工作区,从读卡器复制模式并指定将数据写入的输出地理数据库(即域)。单击“参数”选项卡并展开“高级”部分。将验证功能设置为“是”。此设置将确保传入的源数据符合域定义。一旦添加,连接attributeValueManager的输出(或,根据工作区遵循的工作流,亚搏在线属性管理器)到地理数据库编写器。
双击作者,在“常规”选项卡下,为输出要素类/表(即街道)下一步,单击“用户属性”选项卡,然后,名义下,将autocad_图层属性更改为streetcategory,并将类型设置为coded_domain。
单击编辑按钮,将打开编码域对话框窗口。输入域名(即StreetType)选中“创建域”旁边的框,并输入域定义的数据类型。最后,输入域定义的代码和解析值。
最后,确保From_hblock设置为char类型。
保存并运行工作区。
使用域代码的工作区
使用解析域值的工作区
*上述示例中使用的ESRI地理数据库(文件geodb)读写器要求用户可以使用授权版本的Arcgis。有关所需ArcGIS许可级别的更多信息,请看FME地理数据库格式所需的ARCGIS许可证类型。
?2019安全亚搏在线软件公司|合法的