一。CASS数据转换(一)读取南方CASS数据
南方CASS数据采用AutoCAD的DWG、DXF文件方式进行存储,用FME可以直接对DWG\DXF文件进行读取,但FME不能识别CASS扩展属性信息。在FME WorkBench中无法看到CASS数据层的字段信息,但可以通过FME Viewer中的“autocad_extended_data_list{}”属性看到这些信息。
图1
不过要处理这些被放到列表中的属性信息,却是一件很麻烦的事情,我们不得不手工采用“List Transformers”单独处理每一个字段,或是在目标图层中手动创建对应属性字段,把大量的时间浪费来连线操作上。如果转换的图层或是字段众多,情况可能会变得更糟糕。
MyFME提供一个CASS插件来解决这些问题,将CASS文件的扩展信息解析为被FME识别的字段结构(注:源数据层中没有字段时,MyFME将自动创建一个名为“SOUTH”的字段)。通过解析后的字段信息,处理过程就变得方便了很多,用户可以对这些字段直接进行操作,或是快速生成目标数据层的字段结构。
图2
同时,MyFME自动读取属性值,并和对应的字段名称关联到一起。
图3
下图为CASS软件中原始数据:
图4
MyFME目前只针对CASS数据文件的扩展属性读取进行处理,图形读取仍然采用FME读取AutoCAD的方式,其相关选项和AutoCAD Reader的选项保持一致,选项的说明请参考FME帮助文文件。
图5
二。CASS数据转换(二)南方CASS数据输出
和南方CASS文件的扩展信息读取类似,用FME直接输出南方CASS属性信息同样很繁琐。大致的思路是,设置AutoCAD Writer的“Attribute Output”选项为“Extended Entity Data”,并设置“Default Application Name”选项为“SOUTH”,然后在目标层添加属性字段写入CASS编码;转换完成后还需要去掉FME增加的属性值前缀。并且这种转换方案只能写入一个有效的CASS属性字段,大多数时候我们将“Default Application Name”设置为“SOUTH”,写入CASS的编码。
图1
MyFME提供CASS插件将其他格式的属性数据直接输出为能被CASS识别的扩展属性,简化用户转换操作,尽量减少转换后数据的后期处理工作;MyFME在输出CASS数据时一般情况下无需进行额外的设置和处理,源和目标数据对应后直接转换即可。下图示意将SHAPE数据文件输出为CASS数据文件。
图2
MyFME约定CASS目标图层中属性名称为“SOUTH”字段存储南方CASS的编码信息,用户必须将有效的CASS编码值写入到“SOUTH”字段(如图2所示),以便南方CASS软件正确识别地物类型;其余的字段用户可以更加需要进行定义。CASS软件打开转换后数据。
图3
MyFME目前只针对CASS属性信息的转换进行处理,图形输出仍然采用FME的输出AutoCAD文件的方式,输出的选项和AutoCAD Writer保持一致,但“Default Application Name”选项无效,MyFME将忽略用户设置的这一选项。
图4
和FME输出AutoCAD文件相同,用户采用MyFME输出CASS文件时可以选择CAD文件版本,并且允许用户选择自定义模板文件(注:用户自定义模板文件必须完整的包含输出的数据层和符合CASS扩展属性的定义)。
图5
三。CASS数据转换(三)处理属性数组
在读取南方CASS数据时,我们发现存在“属性数组”,即一个字段名称,包含一组属性值。FME Viewer中显示如下:
图1
南方CASS软件中查看原始数据如下:
图2
MyFME将这类“属性数组”直接映射为属性字段,并约定以“CASS_EX_”为前缀,以上数据在FME WordBench中显示如下。
图3
“SOUTH”属性字段共存储了4个属性值(图1),其中第一个属性值映射到“SOUTH”字段,其后的值依次映射到“CASS_EX_1”、“CASS_EX_2”、“CASS_EX_3”。读取到FME Viewer中显示如下图:
图4
向CASS数据文件写入“属性数组”时,需要在目标层中新建以“CASS_EX_”为前缀的字段,顺序排列到相应的属性字段后即可。下图写入一个名为“INFO”的字段,该字段包含三个属性值。
图5
转换完成后用FME Viewer查看数据如下:
图6
四。CASS数据转换(四)CASS数据分层
FME在读取CASS数据时,默认用AutoCAD的图层名称来划分要素层:
图1
CASS通过既定的编码来进行要素识别,为了更好的对要素进行归类,MyFME在CASSReader中提供Group Entities By选项,让FME在读取CASS要素时,按照CASS编码来进行图层划分。如图2所示,选择"CASS Code"表示用CASS编码进行分层,"Layer Name"则表示用图层名称进行分层。
图2
采用CASS编码分层后,图层将采用CASS编码类命名,无CASS编码的要素统一划分到图层"none"中进行输出。
图3
采用CASS编码分层数据输出如下:
图4