域是一组规则,用于定义属性的允许值。它们用于约束数据值以确保数据完整性。属性域在地理数据库中定义为唯一实体,可应用于包含属性域定义的地理数据库中任何要素类中的任何属性。
有两种类型的地理数据库属性域(编码属性域和范围属性域),FME支持这两种类型。编码属性域本质上是多个有效值的列表,而范围属性域是单个允许的数值范围。通俗形容就是属性的取值范围,常见情况属性约束中取值字典表。
以道路类型为例:常见道路类型为下表6种。(字典表与样例数据均来源于网络,仅用于交流学习使用)
序号 | 代码 | 道路类型 | 释义 |
1 | G | 国道 | 指具有全国性政治、经济意义的主要干线公路 |
2 | S | 省道 | 又称省级干线公路。在省公路网中,具有全省性的政治、经济、国防意义,并经省、市 |
3 | X | 县道 | 是指具有全县〔县级市〕政治、经济意义,连接县城和县内主要乡〔镇〕、等主要地 |
4 | Y | 乡道 | 意思为乡村道路,一般宽度大约在3M之间,是乡村通往各地点的保障 |
5 | Z | 专用公路 | 是由工矿、农林等部门投资修建,主要为该部门使用的公路,分别称为厂矿公路、林区 |
6 | D | 城市道路 | 通达城市的各地区,供城市内交通运输及行人使用,便于居民生活、工作及文化娱乐活 |
表1:道路类型字典表
01
在样例数据库中,选择道路数据右键,选择数据库属性,查看数据库的属性域。如下图所示:
图1:属性域截图
02
在对该数据库的属性进行修改时,编辑存在属性域的字段,会出现类似下拉框选项的形式,如下图样例属性所示。编辑属性“DLLX”时,出现类似下拉框选项(国道、省道、县道、乡道、专用公路、城市道路),即为该属性的编码值范围。
图2:编辑属性编码值范围截图
01
通过FME默认设置对该数据进行读取。
图3:默认设置读取GDB数据设置截图
选取其中一条数据,进行查看属性,属性“DLLX”显示的仍然是代码,其实际代码的属性并未显示。因此采用默认方式读取属性域,是无法读取到的。
图4:默认设置读取数据属性截图
02
勾选“Resolve Domains”(解析属性域)对该数据进行读取。
图5:勾选“Resolve Domains”(解析属性域)
对该数据进行读取设置截图
选取其中一条数据,进行查看属性。属性“DLLX”显示的仍然是代码,但在属性中多了一个“DLLX_resolved”属性,并且其属性值是该数据属性“DLLX”对应的实际属性值。
图6:勾选“Resolve Domains”后读取出来的属性截图
因此,当我们需要读取数据的属性域及其编码值时,只需要将读取设置中的“Resolve Domains”(解析属性域)进行勾选即可读取到数据属性域的实际值和编码值。
(一)使用现有属性域
已经有属性域的数据库,我们在对数据进行读取处理后,将原有数据库的属性域进行保留继承。
仅对示例数据进行属性替换等操作。
图7:数据处理模板截图
01
采用已有属性域的数据库为模板文件进行输出。
图8:采用以已有属性域的数据库为模板文件进行输出设置截图
02
采用以已有属性域的数据库的XML工作空间文档为模板文件。
图9:采用以已有属性域的数据库XML工作空间文档为模板文件输出设置截图
(二)创建新的属性域
在实际数据生产中原数据格式,如DWG,SHP等数据格式不存在属性域,那么是否需要如上文所述,先在GIS中设置好属性域,再进行调用呢,其实不需要,可以在FME中直接创建属性域。
以SHP格式的样例数据为例,将SHP数据中的字段“dllx”字段按照标准进行规范化,同时创建属性域。
图10:样例SHP数据截图
01
按照上文中的字典表,通过转换器“AttributeValueMapper”对数据进行标准化。
图11:将样例SHP数据标准化转换器设置截图
02
添加GDB写模块。
03
修改需要创建属性域的字段属性类型为“coded_domain”。
图12:选取对应属性修改字段属性截图
图13:选取对应属性修改字段属性后截图
04
点击“Edit”(编辑),进入属性域创建界面,并根据上文中字典表进行创建属性域,如下图所示。
图14:创建属性域页面原始和填写属性域后截图
05
数据写出,查看数据属性域。
图15:创建属性域后查看输出的GDB属性域
图16:创建属性域后输出GDB属性域修改属性截图
FME支持500种以上数据格式及500种以上的数据处理转换器,可以实现各种生产过程中的需求。欢迎大家共同努力,继续研究、学习FME!