胡瑛婷,王铭浩,石玉
(山东师范大学 信息科学与工程学院,山东 济南 250358)
随着信息技术的高速发展,如何使前沿科学技术推动现代城市的优化发展,这是向无数学者和业内人士提出的一个热点问题,而智慧城市的建设是解决此类问题的主要方法。实现数字城市向智慧城市过渡升级的一个重要表现便是城市管理的精细化。为了达成这一目标,首先需要实现建筑信息模型(Building Information Modeling, BIM)和地理信息系统(Geographic In-formation System, GIS)的融合。BIM 是以建筑物的三维化为依托,以建筑物的全生命周期为线索,将建筑生产各个环节所需的信息进行统一整合,形成建筑信息集。建筑构件的三维可视化和建筑各个阶段协调性工作是BIM 的重要特征。BIM 具有丰富的设计细节,精度较高,包含几何、物理、规则等丰富的空间信息和语义信息,在应用于建筑三维建模时可提供有关建筑物的大量信息,包括几何信息、物理信息、规则信息等建筑空间信息。而GIS具有能提供完整的地理空间信息,并能进行空间分析的三维模型的优点。但令人遗憾的是,若我们仅利用BIM 便会缺少地理坐标上的数据信息,而仅利用GIS 的话又无法得到建筑物室内构件的组成信息。通过BIM 和GIS 的融合即可结合二者各自的数据信息,将BIM 领域中的精确模型数据信息和GIS 领域中的空间信息系统数据信息相结合,以实现信息的相互补充,这样做拓宽了数据的表示范围,增加了数据的深度,最终实现从建筑物外部走到建筑物内部的目标。
BIM 技术的快速发展为三维城市模型的建立提供了更为详细的数据信息和更加强大的数据支持,同时也实现了城市管理效率的提高,不仅是当下城市三维建模研究的重点,同时也是智慧城市等研究领域的技术支撑。
在学术界,BIM 与GIS 的融合是当前相关专业研究的前沿方向,许多学者和组织都就此展开了深入的探讨和研究。褚靖豫等人将BIM 和GIS 的融合应用于地铁运维系统,有助于建设智慧地铁运维系统。程才等人分析了GIS 和BIM 两种技术融合带来的好处,研究了优化GIS 和BIM 数据集相互转换的方法。吴明堂等人设计了基于BIM 与GIS 融合的地质灾害治理系统,实现了对不同地区划分地质灾害等级并提出相应的治理措施。Wyszomirski Michal等人提出了使用可穿戴设备和物联网数据实现BIM 和GIS 融合。而在工业界的研究中,目前已有部分工业商用软件成功实现了IFC 模型与多层LOD 级别CityGML 模型之间的双向转换。IFCExplorer 现已可以导入IFC 标准的模型和CityGML 标准的模型,但对于模型转换的研究依然停留在从IFC 标准模型向低层次CityGML 标准模型的转换上;BIMServer 可实现对IFC 标准模型的管理以及导出CityGML、KML 等格式的文件,但却存在导出的CityGML 标准模型精度低的问题。
为了从真正意义上实现BIM 和GIS 两大技术领域中数据层面的融合,将其载体IFC 标准与CityGML 标准数据格式转换分为以下几类:(1)设计框架。陈光等人提出了一个框架,通过轨道交通BIM 和三维GIS 数据交换方法实现几何和语义信息的转换,进一步定义一体化三维空间数据模型,实现轨道交通及周边空间数据的统一管理和无缝表达。(2)设计中间模型。Kang 等人提出将BIM 和GIS 的模型数据转换为适当的格式,利用ETL 概念实现BIM 与GIS的数据集成。
目前尚未实现IFC 标准和CityGML 标准的完整映射和数据补充的原因为:(1)语义信息不对等。(2)不具备完整的映射规则。(3)在对语义对象进行定义时,IFC 标准和CityGML 标准的侧重点不同。
本文提出的方法是基于本体通过SWRL 规则来实现映射和推理。从IFC 和CityGML 自身文件的结构定义出发,其实体类别和实体属性信息表达不同。例如,IFC 用IfcWallStandardCase 表示墙, 而CityGML 则采用WallSurface 和InteriorWallSurface 来表示墙面,因此需要先建立从IFC 标准到CityGML 标准实体类型的映射规则。其次是IFC 标准和CityGML 标准所对应的实体属性信息详细程度和表达不同,因此需要先将其转换为本体用OWL 格式进行存储,再建立LOD0-LOD4 五层映射规则实现自动转换。详细步骤如1 图所示,图1描述了从IFC 标准的建筑模型转换为CityGML LOD0-LOD4 标准模型的过程。
图1 转换过程图
1.2.1 解析IFC 格式建筑模型实体类别
本文利用IfcOpenShell 解析IFC 标准的建筑文件,其主要思路是解析XML 文件,重点解析IFC 模型各个构件的几何坐标,IfcOpenshell 定义了专门的数据结构,用于存储从IFC 模型中解析出的实体类别和实体属性信息。我们最终可以解析出21 个实体类别、36 114 个IFC 属性。
所提取的IFC 标准建筑实体包括21 个类别,分别是IfcBeam、IfcBuildingElementProxy、IfcChimney、IfcColumn、IfcCovering、IfcCurtainWall、IfcDoor、IfcFooting、IfcMember、IfcPile、IfcPlate、IfcRailing、IfcRamp、IfcRampFlight、IfcRoof、IfcShadingDevice、IfcSlab、IfcStair、IfcStairFlight、IfcWall、IfcWindow。通过判断IFC 标准建筑模型中某一实体的类别来提取实体。
1.2.2 解析IFC 格式建筑模型实体属性
根据IFC 标准和CityGML 标准文档,本研究选取了二者兼具的IFC 标准的属性(或是名称表达不一样而实际意义一样的IFC 标准的属性)。GlobalId 表示该实体的唯一标识,ObjectPlacement.RelativePlacement.Location 表示该实体的坐标位置,SweptArea 表示该实体的占地面积,RelatingMaterial 表示该实体的组成材料,Transparency 表示该实体的透明度,SurfaceColour.Red、SurfaceColour.Blue、SurfaceColour.Green、DiffuseColour 表示该实体的漫射颜色,Outer 表示该实体的边缘轮廓信息。
1.2.3 以OWL 本体建模语言形式存储实体和属性
在本研究中,利用OWL 本体建模语言能够很好地定义概念,可以从简单概念构造出复杂概念,允许使用推理机等,将解析出的IFC 标准建筑模型信息用OWL 本体建模语言来表示及存储。
首先建立实体类,将每一个实体类型分别以类的形式存储在OWL 文件中。其次建立属性类,并将实体类与属性类建立关联,最后把它们存储到IFC 标准的本体文件中。其中,类globalId、类type、类StyleName、类StyleSide 是数据属性,其属性值为字符串格式;类StyleDiffuseColour、类StyleSurfaceColour_blue、 类StyleSurfaceColour_green、类StyleSurfaceColour_red、类StyleTransparency 是数据属性,其属性值为浮点型;类has_Context 是ObjectProperty,其作用域domain 是onto.IfcWallStandardCase,属性值range是on-to.IfcContext;类has_Covering 是ObjectProperty,其作用域domain 是onto.IfcWallStandardCase,属性值range 是onto.IfcCovering; 类has_Opening 是ObjectProperty, 其作用域domain 是onto.IfcWallStandardCase,属性值range 是onto.IfcOpeningElement。最终将实体类别及属性信息OWL以本体建模语言的形式存储。
通过语义匹配和几何转换,将IFC 标准下的实体和属性信息转换为CityGML 标准下的实体和属性信息。其中,CityGML共有五个细节层次表达,下文介绍转换的具体规则。
(1)IFC—CityGML LOD0。IfcSlab 对应CityGML 实体,Floorsurface、OuterFloorsurface 在此LOD 层获取Slab 的长和宽(即该模型的占地面积),此时该建筑物为二维。
(2)IFC—CityGML LOD1。在LOD0 层的基础上,IFC 实体IfcSpace 对应CityGML 实体Room,IFC 实体IfcRoof 对应CityGML 实体RoofSurface。获取IfcRoof 实体及其高度的数据信息,与LOD0 的占地面积相结合即可将该建筑拉伸为三维实体。
(3)IFC—CityGML LOD2。在LOD1 层的基础上,IFC 实体IfcWall 对应CityGML 实体WallSurface,IFC 实体IfcCovering 对应CityGML 实体OuterCeilingsurface。获取墙和屋顶实体的详细信息,通过获取屋顶的边缘点可更加详细地勾勒出屋顶的形状。
(4)IFC—CityGML LOD3。在LOD2 层的基础上,IFC 实体IfcWindow 对应CityGML 实体Window,IFC 实体IfcDoor 对应CityGML 实体Door,IFC 实体IfcBeam、IfcColumn、IfcStair、IfcRailing 对 应CityGML 实 体BuildingInstallation。获取门、窗口、梁等实体的信息,该层将建筑物刻画得更加细致,但始终都是对建筑物外表面的描述。
(5)IFC—CityGML LOD4。在LOD3 层的基础上(该层添加了室内的实体信息),实现了从室外转向室内。
根据第四层CityGML 标准,实体信息的映射关系如表1所示。
表1 IFC 实体与CityGML 实体映射关系
从IFC 到CityGML 的属性信息映射需要通过规则转换来实现,属性信息分为关系属性和数据属性。
2.2.1 IFC 关系属性映射到CityGML 属性规则
IFC 关系属性表示实体与实体之间的关系,将其转换到CityGML 标准是为了确定实体与实体之间相邻或包含的关系,便于建筑的创建。关系属性主要有ContainedInStructure、hasAssociations、hasCoverings、hasOpenings、hasContext 五种,具体转换规则为:
(1)规则1:ContainedInStructure。查看当前IFC 实体包含在哪一个IFC 实体内:如果有包含实体,遍历所有实体的GlobalID,找到包含实体的GlobalID;若找到包含实体的GlobalID,则将当前实体与包含实体建立关联属性ContainedInStructure。
(2)规则2:hasAssociations。查看与当前IFC 实体有关联的实体,如果有关联实体,则遍历IFC 所有实体的GlobalID,找到与覆盖物实体GlobalID 相同的实体;如果找到关联实体,则将当前实体与该实体建立关联hasAssociations。
(3)规则3:hasCoverings。查看当前IFC 实体是否包含覆盖物,如果有覆盖物,则遍历IFC 所有实体的GlobalID,找到与覆盖物实体GlobalID 相同的实体;如果找到覆盖物,则将当前实体与context 建立关联hasCoverings;如果没找到覆盖物,则建立一个对象context_1,与IfcWall 建立关联hasCoverings。
(4)规则4:hasOpenings。查看当前IFC 实体是否包含窗户,如果有窗户,则遍历IFC 所有实体的GlobalID,找到与窗户实体GlobalID 相同的实体;如果找到窗户,则将当前实体与opening 建立关联hasOpenings。
(5)规则5:hasContext。查看当前IFC 实体是否有文字贴纸,如果有文字贴纸,则遍历IFC 所有实体的GlobalID,找到与该实体GlobalID 相同的实体;如果找到文字贴纸,则将该实体与context 建立关联hasContext;如果没有找到文字贴纸,则建立一个对象context_1,与IfcWall 建立关联hasContext。
2.2.2 IFC 数据属性映射到CityGML 属性规则
IFC 数据属性映射到CityGML 的数据属性分三类实体:实体IfcCovering、实体IfcBuildingElementProxy 以及其他实体,均需要经过六步。
其中,其他实体的数据属性映射流程为:
(1)将IFC 标准的实体解析出八个离散的顶点。
(2)获取该实体的GlobalID。
(3)针对不同实体,建立空间面的方式不同:
1)IfcWall。 把点、、、连接,组成interiorWallSurface,id 为GlobalID_1;把点、、、连接,组成WallSurface,id 为GlobalID_2。
2)IfcSlab。 把点、、、连接,组成Floorsurface,id 为GlobalID_1;把点、、、连接,组成OuterFloorsurface,id 为GlobalID_2。
3)IfcBeam。通过连接顶点建立多个面片实体,并依次将其id 设置为GlobalID_1,2,3....
4)IfcFurniture。连接每一个outer 里的顶点建立一个面片对象,多个outer 属性就有多个面片对象,并依次将其id设置为GlobalID_,2,3....
5)IfcSpace。连接边缘顶点建立一个对象,并将其id设置为GlobalID_1。
6)IfcWindow、IfcDoor。把点、、、分别与点、、、合并,组成二维的Window,id 为GlobalID_1。
(4)把面的顶点坐标放在<gml:posList srsDi-mension=“3”></gml:posList>。
(5)根据向量矩阵将所获取点的坐标转化为CityGML中的世界坐标。其中,是指矩阵在Y 轴的延伸方向,是指矩阵在Z 轴的延伸方向,向量矩阵是指,公式为:
(6)将IfcSurfaceStyleRendering 类中的属性与CityGML 中相应的属性做对应。映射表如表2所示。
表2 IFC 关系属性映射到CityGML 数据属性
GlobalID gml:id LongName名称Outer外围边缘点坐标OuterCurve ObjectPlacement gml:posList
实体IfcCovering 的数据属性映射流程为: 通过Outer 属性解析出IFC 标准IfcCovering 的边缘顶点;获取该IfcCovering 的GlobalID;将边缘顶点连接,组成:面Ceilingsurface,id 为GlobalID_1, 面OuterCeilingsurface,id 为GlobalID_2;把面的点坐标放在<gml:posList srsDimension=”3”></gml:posList>;根据向量矩阵将所获取点的坐标转化为CityGML 中的世界坐标;将IfcSurfaceStyleRendering类中的属性与CityGML 中相应的属性做对应。
实体IfcBuildingElementProxy 的数据属性映射流程为:通过ObjectPlacement 属性找出IFC 标准实体的坐标点;获取该实体的GlobalID;通过objectType 属性获取其高度或宽度;通过坐标点和高度将该实体拉伸,将其id 设置为GlobalID;把原点坐标和拉伸后的坐标放在<gml:posList srsDimension=”3”></gml:posList>;根据向量矩阵将所获取顶点的坐标转化为CityGML 中的世界坐标。
最后,使用Python 中的Owlready2 接口,将实体类别和实体属性以三元组的形式存储到CityGML2.0 标准的OWL文件中。
基于所存储的实体类别和实体属性,采用SWRL 规则将LOD0-LOD4 对应的数据信息推理出来,实现从IFC 格式到CityGML 格式LOD0-LOD4 的转换。
对于LOD0 层次SWRL 规则的建立,具体过程为先找到所有的墙和地板实体,并把墙和地板的、值分别表示出来;再比较各实体的、,找出值最大的点和值最小的点,以及值最大的点和值最小的点共四个顶点。对于LOD1 层次SWRL 规则的建立,具体过程为在LOD0 的基础上,通过比较Z 轴方向数值的大小来寻找屋顶实体,并把屋顶在Z 轴方向的值作为该建筑的最高点。对于LOD2 层次SWRL 规则的建立,具体过程为在LOD1 的基础上,把LOD2 内没有开口的实体及其属性转换为CityGML 标准本体的实体和属性的表示方法。对于LOD3 层次SWRL 规则的建立,具体过程为在LOD2 的基础上,加上开口的实体(如门、窗等)。对于LOD1 层次SWRL 规则的建立,具体过程为在LOD3 的基础上,不只看该建筑物外面的实体和属性,还需要从室外走进室内,将室内家具、里墙等室内结构遍历出来,并将其转换为CityGML 标准本体的实体和属性表达。
使用SWRL 规则把部分属性转化为CityGML 标准属性的具体步骤为:
Step1:建立变量,分别为wall_Type、wallSurface、wall_DiffuseColour、wall_Transparency、wall_Id。
Step2:遍历集合LOD2_E_attri 中的所有实体SE 及属性:
wall_Type = SEi.type。
wallSurface = [(SE1.x, SE1.y, SE1.z), (SE2.x, SE2.y, SE2.z), (SE3.x, SE3.y, SE3.z), (SE4.x, SE4.y, SE4.z)]。
wall_DiffuseColour = SEi.RGB。
wall_Transparency = SEi.transparency。
wall_Id = SEi.GlobalID。
根据SWRL 规则可获取CityGML 标准的OWL 本体文件,进而获取CityGML 模型的实体及属性信息。根据自定义程序规则将所获取的信息转换为CGA 语言,以此实现自动建模。
首先,遍历CityGML 标准owl 本体文件中的实体类型,并为每一个实体类型建立组,如为整个建筑建立组并命名为1 组,即@Group ("Building",1);为墙实体类型建立组并命为2 组,即@Group ("Wall",2),依此类推。其次,为每一种实体类型的对应属性建立变量,如建立楼房高度height、基层高度groundFloor、墙厚度WallW 等。最后,根据CityGML 标准LOD0-LOD3 四层建立对应的CGA 规则,通过extrude、split、comp 等方法将各实体的属性信息等表示出来。
具体步骤为(仅列出LOD3):
输入。包含所有实体的CityGML 标准OWL 文件。
输出。CityGML LOD3 三维模型。
Step1:建立建筑组、墙组、窗户组、门组。
@Group (“Building”,1)
@Handle (shape=Building)
@Group (“Wall”,2)
@Group (“Window”,3)
@Group (“Door”,4)
Step2:定义建筑高度、楼房高度、基层高度、层高度、墙厚度。
attr height
attr groundFloorH.
attr FloorH
attr WallW
attr doorH
attr doorW
Step3:拉伸并分割建筑。
Lot—extrude (height)Building
Building—comp (f) {front: front| back: back| left: left| right:right| top: Roof| bottom: ground}
Step4:为建筑的每一个面添加颜色属性。
front—color (r,g,b)
back—color (r,g,b)
left—color (r,g,b)
right—color (r,g,b)
Roof—color (r,g,b)
Step5:建立屋顶实体。Roof—roofHip (rH,0)。
Step6:建立窗户实体。Window—offset(d) wwin-dow。
wwindow—comp (f) {inside: win-dowinside | border:extrude (2) windowborder}
windowinside—color (r,g,b)
Step6:建立门实体。Door—offset (d) ddoor。
ddoor—comp (f) {inside: doorinside | border: extrude(2)doorborder}
doorinside—color (r,g,b)
最终得到CityGML LOD0-LOD3 每一层对应的CGA 规则语言,即可实现自动建模,得到CityGML 标准的模型。
本文实验数据的获取是采用Revit 建立一个IFC 标准的三维建筑模型并导出其.ifc 格式文件。该模型有一个楼层,包括墙、平板、窗户、门、家具等建筑构件,如图2所示。
图2 IFC 标准的三维模型
本文实现IFC 标准模型自动转换为LOD0-LOD4 的CityGML 标准模型,试验在IfcOpenShell 开源代码和OwlReady2 开源代码的基础上进行。IfcOpenShell 可实现IFC 文件的解析,OwlReady2 可实现本体文件构建并进行SWRL 规则推理等。首先,根据本文提出的方法,设计并实现算法,通过解析IFC 标准模型得到数据信息,根据所得数据信息建立IFC 标准的本体文件,再建立LOD0-LOD4 五层SWRL 规则,实现IFC 实体和属性到CityGML 实体和属性的转换,最后通过CGA 规则语言和所获得的CityGML 标准实体和属性建立CityGML 标准的三维建筑模型。实验环境为:
(1)Microsoft Windows 10 操作系统。
(2)Pycharm(使用Python 语言开发)。
(3)IfcOpenshell 开源库。
(4)OwlReady2 开源库。
(5)Revit(建立IFC 标准的三维模型、IFC 模型可视化软件)。
(6)CityEngine(使用CGA 规则语言自动建模)。
(7)ArcGIS(CityGML 模型可视化软件)。
首先,利用Revit 建立IFC 标准的三维建筑模型,并导出ifc 格式的文件。其次,利用本文提出的方法结合IfcOpenShell 和OwlReady2 进行编码,开发生成IFC 格式向OWL 格式转换的可执行程序,点击该可执行程序打开转换页面,如图3所示。选择IFC 文件的路径,并选择要解析的实体类型,点击“export”即可预览解析的结果,点击“convert”即可获取OWL 格式的文件。
图3 IFC2OWL 系统.exe
根据所建立的LOD0-LOD4 五层SWRL 规则,利用转换而来的OWL 文件可得到CityGML LOD0-4 五层的数据信息,再用CGA 规则语言表示出每一层的数据信息,最后即可得到CityGML 标准的模型,如图4、图5、图6、图7所示。
图4 LOD0 CityGML 标准模型
图5 LOD1 CityGML 标准模型
图6 LOD2 CityGML 标准模型
图7 LOD3 CityGML 标准模型
本文提出了基于SWRL 规则的BIM 和GIS 建筑本体融合方法,研究了从BIM 的IFC 标准到GIS 的CityGML 标准LOD0-LOD4 五层的转换方法,设计了LOD0-LOD4 五层SWRL 规则和CGA 规则。该方法基于本体通过SWRL 规则实现映射和推理,在语义和几何方面实现了IFC 标准到CityGML LOD0-LOD4 五层的转换,又使用CGA 规则语言表示实体类型和属性信息。该方法不仅解决了数据丢失问题,还实现了高效建模。
后续的研究将集中于以下两个方面:(1)考虑在新型智慧城市建设的背景下,实现现有的数据模型与大数据、云计算等信息的集成,不断进行数据类型和数据结构的拓展与优化。(2)优化建筑模型,完成多层次转换,使转换结果的准确度更高。