span8
span4
域是定义属性允许值的一组规则。它们用于约束数据值,以确保数据完整性。域在地理数据库中定义为唯一的实体,可以应用于地理数据库中包含域定义的任何特性类中的任何属性。
有两种类型的地理数据库域(编码域和范围域),它们都受到FME的支持。编码域本质上是多个有效值的列表,而范围域是单个允许的数值范围。
读取地理数据库时,FME有一个解析域的选项。
当选中此选项时,将添加一个名为_的附加属性
注意: 如果可以的话,如上所述,我们会建议使用地理数据库模板这里。这是通常更容易比FME要素类型中定义域更加灵活。
FME能够写入现有的或创建新的地理数据库表。因此,在编写地理数据库域时,工作流需求将趋向于以下三种情况之一:亚搏在线
这些场景将主要由以下作者参数控制:
-数据类型:coded_domain / range_domain
-验证功能写入参数值:是/否
尽管有下面提到的场景,但是应该注意,使用XML Workspace文档(包含所需的域定义)作为地理数据库编写器的模板,是一种高效的、强烈推荐的编写地理数据库域的方法。有关使用模式导入XML文档的更多信息,请参见地理数据库作家文档。
方案1:使用现有域名写入现有表
在默认情况下,写入现有域字段的任何数据都按正常方式插入。由于表已经存在,它的属性将已经与所需的域相关联,因此不需要设置任何参数来定义此连接。
但是,如果希望验证传入的数据—例如,将其与域定义进行比较以确保其具有有效的属性值—则必须将写入器参数“validate Features to Write”设置为Yes。如果将验证参数设置为No,则数据将毫无错误地传递到地理数据库,尽管有些数据值可能不符合域规则。
方案2:使用现有的域写入新表
在创建要使用现有域的新表时,应该为需要与域关联的属性指定数据类型coded_domain或range_domain(取决于它的类型)。然后单击属性宽度字段中的Edit按钮,并在“domain name”部分输入现有域的名称。
方案3:写一个新表并创建一个新的域
需要注意的是,我们通常建议您使用ArcGIS创建和定义域,在插入新特性时使用FME关联属性或验证数据。但是,使用FME可以创建域。该过程与使用现有域相同,直到打开编辑对话框的点。此时,您将检查“Create Domain”参数,输入一个新域名,并定义该域的值。
请注意,如果将“validatefeaturestowrite”参数设置为Yes,则将根据任何新定义的域自动验证传入的功能。
限制
在领域写作方面有一些限制。
首先,不可能写入现有表,或者创建与现有域的关联或创建全新域。这是因为该关联被封装在表定义中,并且现有的表定义不能被FME更改。您需要删除现有的表并重新创建它,以便能够这样做。
其次,出于同样的原因,创建一个域是一次性的翻译。在初始过程中,您可以将数据类型设置为coded_domain/range_domain,但是后续的数据加载应该在数据类型更改回实际数据类型(char、integer等)的情况下完成
最后,不可能动态创建域(即。域定义应该在执行之前手动定义,而不是在工作区过程中定义)。
下面的示例演示方案3:写一个新表并创建一个新的领域。
道路(欧特克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版(用现有域写入Geo Debug亚搏在线中的新表)时,上述情况最为适用。在这两种情况下,都假设一个人不知道域定义中包含的实际域代码,而是知道解析的值。但是,在创建域时,此过程也将起作用。
3。写功能和创建域
将ESRI Geodatabase(文件Geodb)writer添加到工作区,从读卡器复制模式,并指定将数据写入的输出Geodatabase(即域)。单击参数选项卡并展开高级部分。将“验证功能”设置为“是”。此设置将确保传入的源数据符合我们的域定义。添加后,将AttributeValueMapper的输出(或者,根据工作区遵循的工作流,AttributeManager)连接到Geodatabase编写器。亚搏在线
双击writer,在General选项卡下,为输出特性类/表输入一个更有意义的名称(即。街道)。接下来,单击“用户属性”选项卡,并在“名称”下,将“autocad_图层”属性更改为“StreetCategory”,并将类型设置为“编码域”。
单击“编辑”按钮,将打开“编码域”对话框窗口。输入域的名称(即。StreetType),选中“创建域”旁边的复选框,然后输入域定义的数据类型。最后,输入代码和解决数值域的定义。
最后,确保From_HBlock设置为char类型。
保存并运行该工作区。
工作空间利用域代码
工作空间利用解决域值
*在上述实施例中使用的地理数据库ESRI(文件地理数据库)读取器/写入器要求的ArcGIS的许可版本可用给用户。有关要求ArcGIS许可级别的详细信息,请参阅所需的ArcGIS许可的地理数据库FME格式类型。
©2019安全亚搏在线软件公司法律