span8
span4
域是一组定义允许值用于属性规则。它们被用来约束数据值,以保证数据的完整性。一个域可以在地理数据库中被定义为一种独特的实体,并且可以被应用到包含该域定义地理数据库内的任何要素类的任何属性。
鉴于域定义的复杂性,强烈推荐一个使用ArcGIS来定义自己的地理数据库域。但是,如果你提供的域中定义还没有被应用到地理数据库,并在查找表中,而不是存在的数据会发生什么?下面的练习将演示如何使用地理数据库表包含域代码和值创建使用FME编码域定义。
街道特征类(ESRI地理数据库-文件Geodb)
另外,在上述图像中,我们看到源街道特征类的可视化。将受到目标地理数据库域定义的值可以在StreetCategory属性中可以看出。
StreetCategory Geodatabase表(ESRI地理数据库- Geodb文件)
另外,在上述图像中,我们看到源StreetCategory地理数据库表的可视化。此表中的值将为地理数据库域定义的值。需要注意的是重要的地理数据库表中对应于将受到编码域定义属性的名称。
1.阅读源数据
信息将包含我们的编码域定义将使用由ESRI的地理数据库(文件地理数据库),读卡器,而街道的特征几何形状和数据的基础架构将从街道要素类使用FeatureReader变压器读一个独立的地理数据库表中读取。这将允许我们做的创建从包含在地理数据库表中的信息域定义所需的基础架构操作。当添加FeatureReader变压器,打开参数对话,并确保设置类似于下面的屏幕截图:
此外,一旦FeatureReader已添加到画布上,增加一个变压器的创造者和创造者连接到在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安全亚搏在线软件公司|法律