介绍
IFC和CityGML都具有分层数据结构。但是,IFC的结构更为复杂,并且包含CityGML不需要的中间要素。例如,在IFC中,“门”是“开口”的子类,而“开口”又是“墙”的子类,而在CityGML中,“门”是“墙”的子类。
同样,要素的分组也有所不同。例如,部分windows 和stairs 要素包含在IFCMember要素中,在转换为CityGML时必须添加到其父级元素中。
本示例说明了如何从高细节IFC模型转换为细节水平(LOD)为4的CityGML。该工作空间足够全面,可以处理大多数建筑IFC数据集。
资料下载
本练习将使用来自Vectorworks网站的DC Riverside Building LOD 300 IFC文件。
链接:https://pan.baidu.com/s/1_VJQBz6BNCFmBIJDloyfJQ
提取码:2020
使用说明
由于该工作空间非常复杂,而本教程是一个简单的概述。有关参数的详细信息,请打开工作区查看关键参数。
源数据
该工作空间使用DC Riverside Building LOD 300 IFC文件。
在Solibri Model Viewer中查看 DC_Riverside_Bldg_LOD_300.ifc
第1部分:创建父/子查询
IFC要素拥有指向其父要素的链接,但是要删除不需要的中间要素(如“开口”),所以我们还需要指向祖级要素的链接。为此,我们使用两个单独的Industry Foundation Class STEP(IFC)读模块。第一个读模块读取所有IFC要素,并设置图层名称和以父ID作为变量的查找表,由于该读模块不使用IFC几何图形,因此可以快速运行。FME顺序运行其读模块,以便该读模块完成操作,并且在第二个读模块运行之前完全设置好变量。
创建父/子查找表
第2部分:创建建筑物
第二个IFC读模块用于数据转换。Building要素是一个简单的转换,可以使用GeometryRemover转换器来删除几何,然后通过AttributeRenamer转换器将ifc_unique_id设置为gml_id。
从Building中移除几何的简单转换
第3部分:将复杂的IFC实体几何转换为MultiSurface
所有转换都需要将几何图形从复杂的IFC实体转换为可以写入CityGML的MultiSurface,因此将创建一个名为ConvertGeometry的自定义转换器,以快速复制此过程。
在ConvertGeometry自定义转换器中,IFC实体几何通过GeometryPartExtractor转换器从属性集中分离出来,然后通过GeometryCoercer转换器将其转换成surface几何类型。然后,要展平多级几何图形,可以使用Deaggregator转换器将其分解,并将“Mode”设置为“Flatten All Levels”。然后使用Aggregator转换器(“Mode”设置为“Geometry-Assemble One Level”)和GeometryRefiner转换器将几何重新聚合为MultiSurfaces 。
ConvertGeometry自定义转换器工作流程
第4部分:获取祖父母ID
几乎所有要素的父链接都设置为IFC建筑层,而不是建筑,因此我们需要上移一个链接,以使用存储在变量中的查找表创建指向该建筑的CityGML父链接。由于将在整个工作空间中重复此操作,因此将创建另一个名为GetGrandParentID的自定义转换器。
在GetGrandParentID自定义转换器中,BinaryEncoder转换器用于为传入的属性创建编码。然后,添加了VariableRetriever转换器以设置_gparent_id。最后,使用BinaryDecoder转换器对_gparent_id进行解码,并输出到目标属性中。
GetGrandParentID自定义转换器工作流程
第5部分:设置CityGML LOD名称和要素角色
在写出CityGML之前,始终必须遵循严格的命名约定来设置几个属性。在FME Hub上可以找到已经创建好的CityGMLGeometrySetter自定义转换器,用来防止数据录入错误。该转换器用于设置CityGMLLod名称和要素角色。
第6部分:简单转换
在写入CityGML之前的简单转换需要的最少步骤。主要工作流程如下:
1)读入IFC数据;
2)ConvertGeometry几何转换;
3)设置gml_id;
4)获取祖级ID;
5)CityGMLGeometrySetter设置CityGMLLod名称和要素角色;
6)写出到CityGML。
简单转换示例,将IfcSpace转换为CityGML Room
第7部分:复杂的转换
CityGML的BuildingInstallation和WallSurface要素由许多IFC要素类型组成,某些IFC要素可能是这两种要素的一部分。将 IFC Members、StairFlights、Slabs和Railings合并到Stairs中,然后将这些要素与Columns和Beams一起写出到BuildingInstallation。其他成员将合并到CurtainWalls中,这些要素会与Wall和WallStandardCase一起写出到WallsSurfaces中。
这些分离和组合可能需要从第一个IFC读模块创建的变量中多次查找父类和祖父母ID。
第8部分:结果
在FZK Viewer中查看的输出CityGML文件