西班牙
斯潘4
域是定义属性允许值的一组规则。它们用于约束数据值,以确保数据完整性。域在geodatabase中定义为唯一实体,可以应用于geodatabase中包含域定义的任何要素类中的任何属性。
鉴于域定义的复杂性,强烈推荐使用ArcGIS来定义它们的地理数据库域。但是,如果您提供了域定义尚未被应用到GEODATABASE而替代存在于查找表中的数据,会发生什么情况?下面的练习将演示如何使用包含域代码和值的geodatabase表来使用fme创建编码域定义。
街道特征类(ESRI地理数据库-文件Geodb)
在上面的图片中,我们看到了source streets特性类的可视化。可以在streetCategory属性中看到受目标地理数据库域定义约束的值。
StreetCategory Geodatabase表(ESRI地理数据库- Geodb文件)
在上面的图片中,我们看到了源streetcategory地理数据库表的可视化。此表中的值将提供geodatabase域定义的值。需要注意的是,geodatabase表的名称对应于将受编码域定义约束的属性。
1.阅读源数据
组成编码域定义的信息将使用ESRIGeodatabase(文件GEODB)读取器从独立的Geodatabase表中读取,而街道特征几何图形和数据的基础架构将使用FeatureReader Transformer从街道特征类中读取。这将允许我们根据geodatabase表中包含的信息执行创建域定义所需的底层模式操作。添加FeatureReader Transformer时,打开参数对话框并确保设置类似于以下屏幕截图:
此外,将FeatureReader添加到画布后,添加Creator Transformer并将Creator连接到FeatureReader上的启动器输入端口。创建者确保FeatureReader将在工作区运行时触发。
2.从表中为编码的域定义构建字符串
FME使用特定的语法编写编码域,然后将该语法应用于地理数据库的底层模式——coded_domain(
coded_domain (StreetType:整数:1:动脉:2:二次:3:住宅:4:收集器:5:私人:6:NonCity: 7:: 99:未知)
为了将Geodatabase表中包含的数据转换成上面提到的格式,我们需要进行一些字符串操作。StringConcatenator用于创建和保存单独的代码:值对(即第1集:动脉)到一个属性称为StreetCategoryKeys。
ListBuilder从这些传入的代码:值对创建一个列表,而ListConcatenator将这些代码:值对合并到单个字符串属性(StreetCategoryConcate)中,其中代码:值对由冒号(即1:动脉:2:二次)。
AttributeCreator用于创建一个属性,该属性将保存地理数据库表的fme_feature_type的值(在本例中是表的名称——StreetCategory)。这个已创建属性的值将允许我们在稍后的工作流中搜索和更改特性模式的数据类型。亚搏在线
3.将查找表合并为特征模式
FeatureMerger转换器用于将新创建的域定义代码:value列表合并到源街特性类的模式中。编码的域定义将作为FeatureMerger中的供应商数据,而来自FeatureReader的模式端口将提供请求者输入源。将FeatureMerger添加到画布并连接输入后,打开transformer的参数对话框,确保参数如下所示:
4.搜索模式
既然code:value列表已经应用到特性模式,我们现在需要告诉模式它将是一个编码的域数据类型。首先,我们将使用ListSearcher搜索模式列表,以返回特性属性的索引号,该特性属性将服从于我们的编码域。有了索引号之后,就可以将该属性的底层本机数据类型从String更改为编码域的数据类型(参见步骤5)。
5.创建编码的域和句柄属性
AttributeCreator用于更改特性属性的数据类型,该属性将服从于编码的域定义。为此,我们从上面的步骤中获取索引值,并将其应用于编码域特性属性的底层本机数据类型属性(属性{}.native.data.type)。这个数据类型属性将被分配完整的语法,它包含了编码的域定义——coded_domain(StreetType:integer:@Value(StreetCategoryConcate))。
同时,AttributeCreator将用于创建Sort属性,该属性将在稍后的工作流中用于控制特性和模式到达文件Geodatabase写入器的顺序。亚搏在线
现在我们已经处理了编码的域定义和特性模式操作,现在我们可以处理来自FeatureReader的特性了。AttibuteManager用于将特性的StreetCategory属性中包含的属性值映射到新定义的编码域值。这是通过将一个条件值定义(如下所示)应用到StreetCategory属性来实现的。
正如您在上面的屏幕截图中所注意到的,在我们将StreetCategory属性映射到编码域定义的同时,我们还创建了一个Sort属性并将其值设置为2。
6.对架构/特性和域进行动态排序
前面两个步骤中创建的Sort属性将用于确保在应用更改的模式之后将我们的特性写入目标地理数据库。一个分类转换器用于控制工作流的这一部分。亚搏在线
最后,设置为动态表定义的Esri地理数据库(文件Geodb)编写器将接受修改后的模式并将其应用于目标地理数据库。应用模式之后,来自源Streets特性类的特性将使用应用于StreetCategory属性的编码域定义来编写。
?2019安全亚搏在线软件公司|合法的