如何使用AutoCAD Map 3D Object Data读模块
发布网友
发布时间:2022-04-24 06:26
我来回答
共1个回答
热心网友
时间:2022-06-16 19:44
如何设置转换方式没有固定标准,它取决于源数据模式和目标数据的结构。
一般情况下,AutoCAD Map 3D Object Data毫无疑问是Auto CAD的三维地图对象数据。对象数据允许属性存放在数据表中,但数据结构却非常自由。在数据集中,任何特定的空间要素(或实体)都可以在不限数量的数据表(或空表)中无*地存放属性记录。
因此,FME提供了很多不同的读取模式。这样用户就有更多的选择来布局工作空间的,然后在Workbench中查看数据模式。
示例数据
以下是一些示例。这些工作空间的示例数据是一张德克萨斯州的地图,其包含州、县边界线以及许多的道路网络。
上图为示例数据。该州的边界线为黑色,县边界线为红色,道路为蓝色。参考的坐标系统为LL83。边界要素存放在“Boundaries”图层,并与“County ”和“State”数据表连接。
数据源最重要的是所有要素为线要素,县与县之间的边界线(或县和州的外边界线)为含有两条记录的单一要素——记录为县边界(或一条记录为县边界,另一条记录为州边界)。
如上图所示:特写位置。箭头所指的弯曲部分是“county”数据表中一条包含两条记录的单线;一条记录为“San Saba”县,一条记录为Lampasas县。
运行模式
这三种不同的读模式为“按实体分组”,“原关系”,和“用对象数据分组”。当将数据集增加到工作空间(或Inspector)时,在参数设置对话框中选择模式。
如上所示:生成一个新的工作空间。点击“参数设置”按钮,弹出数据对象设置对话框。
如上所示:对象数据设置对话框。在对话框顶部选择三种不同的模式。
显然,这些设置会直接影响新生成空间的版面,因此在工作空间生成以后就不能再更改读模式(或一旦读模块被添加到工作空间,就不能再更改)。
“按实体分组”模式
在创建工作空间时,对于数据集中的每一个数据图层,“按实体分组”模式会将其分为不同的类型。
数据表属性与相关的每个特性依附于要素,这种方式是一种很好的模式,用于向GIS相关的数据格式写入数据,如Mif/Mid 或Shape。但对于保留数据源模式结构,这种方式效果不好,因此如果想回写相同的数据格式,就不能使用这种方式。
然而,由于对象数据格式的巨大灵活性,需要考虑一些问题:
考虑 #1):是否每个实体(要素)包含的记录大于1,特别是在同一张表中多于1条记录——那么就可以生成表结构。例如,以下是单个要素的同一张表中包含两条记录的情况:
要素# 数据表 字段
1 TableA FieldA1, FieldA2, FieldA3
1 TableA FieldA1, FieldA2, FieldA3
输出要素的模式中会包含列表属性
TableAData{0}.FieldA1
TableAData{0}.FieldA2
TableAData{0}.FieldA3
TableAData{1}.FieldA1
TableAData{1}.FieldA2
TableAData{1}.FieldA3
考虑 2#)因为有可能不同要素的记录在不同的数据表中,源数据类属性列表将会变得繁杂,包含所有可能的属性。
例如,以下的情况:
图层 要素 # 数据表 字段
LayerA 1 TableA FieldA1, FieldA2, FieldA3
LayerA 2 TableB FieldB1, FieldB2, FieldB3
数据源要素类A图层包含的属性:
FieldA1
FieldA2
FieldA3
FieldB1
FieldB2
FieldB3
要素类中存在的所有要素将拥有所有可能附加的属性,不管其是否为空值。
考虑 #3)因为不同的数据表包含相同字段名是可能的,因此用一个“前置表名称”的选项来区分它们。
例如,考虑一下方案:
图层 要素 # 数据表 字段
LayerA 1 TableA Field1, Field2, Field3
LayerA 2 TableB Field1, Field2, Field3
前置表选项将会确保无命名冲突字段:
TableA_Field1
TableA_Field2
TableA_Field3
TableB_Field1
TableB_Field2
TableB_Field3
如上所示:参数设置对话框的前置表选项
在我们的示例数据中,不存在表名冲突。然而模式将会有州和县字段(尽管有些要素不具有州字段),加上要素是两个县之间的边界线,因此其会有列表属性来存放这两个县的名称。
如同边界要素,道路要素也有要素类,但是没有数据,因为其没有关联的数据表。
如上所示:Workbench中的源模式。
如上所示:在FME Viewer中的数据显示了指定的列表的结构和内容。
如上所示:由于Shape数据不能接收列表结构的数据,调整工作空间,将列表属性变成用逗号分割的单个属性(可以用转换器ListConcatenator变为列表属性)。
如上所示:在输出Shape数据集中,州、县边界如图所示。
如上所示:县之间的边界如图所示。注意此处州属性为空值。
“原关系”模式
“原关系”模式将基于相同空间实体和数据库记录的对象作为单独的要素,用一个属性来标记它们作为相关的要素,每个要素类会分到各个数据层。
事实上,使用原关系数据模式对于用户来讲是最适合的。由于其空间数据和属性数据是存放在独立的表中,因此写入数据库很有用。也称此种模式为“关系”模式。此模式也适合将数据写入到特定的CAD格式,比如当属性数据和空间数据是单独存放在CAD数据中时。
在此模式中,我们没有必要担心任何“按实体分类”模式的考虑,因为分配多条记录到单一要素,仅仅会存放到数据库表要素类。类似于每个表存放一个单独的要素类,所以处理复杂的模式不会出现问题,尽管不同的表中存在同名字段,这也不会出现冲突字段。然而,在工作空间中当用户频繁地合并属性记录返回到要素中时,可能会出现。
如上所示:在示例工作空间中,将数据写入到Oracle数据库中。
如上:在“原关系”模式的初始工作空间就像这样。注意每一个图层为一个要素类,每一个图层对应一张表(CountyData,,StateData)。也要注意格式属性autocad_od_entity_key,它是标记属性数据和空间数据的标志。Layer0是所有AutoCAD数据的默认图层。
如上所示:如果没有连接Oracle数据库,就只能放到VisualLizer中查看数据。它将会显示没有用户属性的要素,但会有一个列表(autocad_map_odtable{}),加上entity key。
如上所示:该表的记录很明显是作为FME非几何要素的读取。它是与以上空间要素相关的StateData表的记录。
这是较为合适的模式,用于读取对象数据和将对象数据写入相同的格式。非几何要素的表记录可以作为一张表来写入,实体要素可以作为一个图层来写入。由于格式属性(autocad_od_entity_key)对于对象数据写模块是一样的,因此会自动连接。举个例来说,执行重投影而不希望改变格式,或执行表的连接或分割。
“用对象数据分组”模式
“用对象数据分组”模式几乎与“按实体分组”刚好相反,不需要获取每个图层的要素类,而是得到每张表的要素类,进入工作空间的数据是每张表的要素类的每条记录。正是由于此原因,每个对应很多条记录的AutoCAD实体会在数据中重复出现很多次。
例如,下面的情况,一个要素连接两条记录:
要素 # 数据表 字段
1 TableA FieldA1, FieldA2, FieldA3
1 TableB FieldB1, FieldB2, FieldB3
读模块就会输出两个要素:
要素1 (Attributes = FieldA1, FieldA2, FieldA3)
要素1 (Attributes = FieldB1, FieldB2, FieldB3)
这样的处理在FME中是很低效的,因为实际上会出现很多实体,需要处理很多次。另一方面来讲,当对于简单数据集中的单一实体存在多种地理对象(比如数据中的州县边界线)的情况,这又是一个很适用的模式。
然而,数据表要素类只是问题的一部分。对于没有关联记录的实体(即没有对象数据)也需要输出,因此新的工作空间中也有包含无对象数据实体的要素类。进一步来说,用户可能在一个图层上疑惑哪些需要读入而哪些需要忽略,因此让图层上的所有对象都输出,无论它们是否已经通过对象数据要素类输出。
这样明显可能会出现重复对象并做无用功,但是如同我们的开发人员所讲,这并不是无效的,它能够在处理目前的AUTODESK_MAP对象数据读模块时,确保向后兼容。
如上所示:“用对象数据分组”模式向工作空间中添加数据。注意每张表(CountyData, StateData)的要素类都包含属性,每个图层(Roads, Boundaries)的要素类都不包含属性——尽管一些实体可能关联了对象数据——用数据表要素类来区分它们。
如上所示:在该例中,如果不希望重复输出边界数据,将该要素类设为无效。
如上所示:输出结果在此处有两个要素;州边界和县边界。但这是正确的,因为它们被写入到了两个要素类。事实上还可以:
同上: ...添加转换器AreaBuilders 到工作空间,它可以:
同上:...分割每个要素类的面要素。如果没有重复要素,就不能达到此结果。
该读模式对于读取对象数据类型再回写到相同格式的数据集也是适用的(例如执行坐标系统的重投影)。重复要素并不是问题,因为写对象数据时,含有重复实体关键字的空间要素会被丢弃。输出结果可能是一个实体,但是包含很多条记录——满足该规则:每一行只匹配一个实体。然而我们仍然推荐使用“原关系模式”。
Q+A
Q)FME的哪个版本可以使用该功能?
A)FME 2008以及更新的版本
Q)为什么如今的安装程序会询问Autodesk RealDWG许可协议?
A)是的。我们使用AUTOCAD_OD 读模块之下的Autodesk RealDWG 2008 SDK。用户需要接受该协议才能获得AUTOCAD_OD格式的使用权。
Q)是否可以使用这种格式读取非对象的DWG/DXF数据集?
A)可以。除非有具体原因,不然我们还是建议用AutoCAD DWG/DXF (aka ACAD)读模块和写模块。
Q)什么级别的FME许可才能使用AUTOCAD_OD?
A)就像AutoCAD DWG/DXF,FME Base Edition中可以使用新格式。
Q)新的对象数据读模块适用于UNIX系统吗?
A)否,仅仅适用于Microsoft Windows平台(大概是因为SDK)。
Table Of Contents
Q)当执行打散操作时,具有属性数据的块要素会发生什么?
A)哦-这是复杂的。整个块可以只含有一条记录或块中的每个实体只包含同一条记录,或两者皆是。如果块参照关联对象数据,它就会附加到块的插入点。如果块参照被分成了多个部分,并且每个部分关联了对象数据,那么块就会被打散,块的每部分关联的对象数据将会附加到所有由块的各部分生成的要素。通常在执行对象数据转换时,用户不想打散块,因为这样会导致entity/record keys的冲突。