原文发布时间:2011-04-22
作者:叶子
tag(标签),是用户自定义的一些可以挂接到元素上的属性,这些可以被FME读出和写入(只能是DGNV8格式)。另外,为了对用户自定义的属性提供一个值,标签也可以在原始的文件中显示为一个文本。TAGS_AS_TEXT 指令控制标签数据元素是否会作为文本元素返回。当读入一个设计文件时,FME首先扫描所有的标签数据元素和标签集定义元素,然后从设计文件中读入图形元素,使用元素相关的ID来重新连接数据合属性名字到图形元素。所有的标签数据值会被添加到要素中返回给FME。
下表中显示的属性被添加到每个元素相关的标签中。
注意:<tag name>被每个元素相关的TAG NAME替代。例如,如果元素相关的标签叫做"NUMLANES" and "PAVETYPE",那么要素会有类似"NUMLANES", NUMLANES.height, PAVETYPE, PAVETYPE.rotation等属性。
注意,多数标签属性它们的文本相同。例如,igds_tag_names{}.height 与igds_text_height 相同,因此没有明确的记录。所有其它标签属性记录如下:
注意写标签只支持DGNV8。为了把标签连接到一个要素,设置写的关键值WRITE_TAGS设置为yes。有两种方法的标签集,标签的定义可以加载到V8写模块上。
1、 通过定义DEF行:这是默认的行为。写模块查找DEF行来提取标签集的信息和标签名称。要素的类型作为标签集指定,同时用户属性变为它的标签。例如,如果DEF行如下:
GNV8_DEF Roads
Name char(50)
Type integer
那么标签集写入的名为“Road”的要素包含了成为“Name”的字符串类型和“Type”的整数类型。可能的数据类型是char(n), integer 和 double。注意,这种方法引入到标签自动写入的过程来避免使用“列表属性”方法的大量工作。这种方法有下列限制:
A. 每次只能写一个要素到一个标签集。
B. 只能定义标签的名称和他们相关的属性类型。默认的标签,提示和现实的属性不能被设置。现实的属性自动的设置为no,为了打开用户需要设置在要素的属性上设置<tag_name>.display属性为yes。
如果想写多个标签集,那么可以使用“list attribute”方法。同时注意写模块这种情况下写模块在igds_tag_names{}的名字下面看到列表属性,忽略了在DEF行提供的标签集的定义。
2、 通过列表属性:另一种写标签的方法是通过提供所有的类别属性的名字到要素的igds_tag_names{}属性。
DGNV8写模块只有在写入标签时才查找下面的属性,使用他们来计算所有的其它属性。因此,任何提供任何标签相关的属性除了下面的属性,其它属性会被忽略:
igds_tag_names{}<tag name>.tagset_name
<tag name>.tagtype
<tag name>.prompt
<tag name>.display
<tag name>.default_value
<tag name>.x_offset
<tag name>.y_offset
<tag name>.z_offset
这种情况的标签位移不能提供,写模块使用一些位移默认的值,并关闭标签显示属性。
标签写入的一些提示以避免相关的问题:
当从dgn->dgn,建议确保“TAG_AS_TEXT”关闭来避免得到附加的文本元素到写入标签的元素上。注意这个选项默认的设置为“no”。
当从dgn->dgn,如果源有标签相关的要素到单元,那么注意展开单元会导致标签关联到每个单元成员上。因此,每个单元成员会有相同的标签写入到输出的文件中。
如果源标签绑在一个细胞然后注意爆炸的细胞会获得附加标签,以每一个细胞的成员。因此,每一个细胞的会员将有相同的标签上写的输出文件。
下面以第二种方法为例,来说明在FME中对dgn格式的数据添加标签:
现在有一个多边形的DGNV8文件,现在想给每个每个多边形添加标签:
FLDM=TEST,NAME=TEST。
这时候,只要在Workbench中,把写模块的Write tags参数设置为yes,
并且创建一个标签集mapstationtag和两个标签名称FLDM、NAME并赋值。
执行成功后,打开Mircostation软件,可以看到所有标签设置已经添加进来: