胡瑛婷,王銘浩,石玉
(山東師范大學 信息科學與工程學院,山東 濟南 250358)
隨著信息技術的高速發(fā)展,如何使前沿科學技術推動現代城市的優(yōu)化發(fā)展,這是向無數學者和業(yè)內人士提出的一個熱點問題,而智慧城市的建設是解決此類問題的主要方法。實現數字城市向智慧城市過渡升級的一個重要表現便是城市管理的精細化。為了達成這一目標,首先需要實現建筑信息模型(Building Information Modeling, BIM)和地理信息系統(tǒng)(Geographic In-formation System, GIS)的融合。BIM 是以建筑物的三維化為依托,以建筑物的全生命周期為線索,將建筑生產各個環(huán)節(jié)所需的信息進行統(tǒng)一整合,形成建筑信息集。建筑構件的三維可視化和建筑各個階段協(xié)調性工作是BIM 的重要特征。BIM 具有豐富的設計細節(jié),精度較高,包含幾何、物理、規(guī)則等豐富的空間信息和語義信息,在應用于建筑三維建模時可提供有關建筑物的大量信息,包括幾何信息、物理信息、規(guī)則信息等建筑空間信息。而GIS具有能提供完整的地理空間信息,并能進行空間分析的三維模型的優(yōu)點。但令人遺憾的是,若我們僅利用BIM 便會缺少地理坐標上的數據信息,而僅利用GIS 的話又無法得到建筑物室內構件的組成信息。通過BIM 和GIS 的融合即可結合二者各自的數據信息,將BIM 領域中的精確模型數據信息和GIS 領域中的空間信息系統(tǒng)數據信息相結合,以實現信息的相互補充,這樣做拓寬了數據的表示范圍,增加了數據的深度,最終實現從建筑物外部走到建筑物內部的目標。
BIM 技術的快速發(fā)展為三維城市模型的建立提供了更為詳細的數據信息和更加強大的數據支持,同時也實現了城市管理效率的提高,不僅是當下城市三維建模研究的重點,同時也是智慧城市等研究領域的技術支撐。
在學術界,BIM 與GIS 的融合是當前相關專業(yè)研究的前沿方向,許多學者和組織都就此展開了深入的探討和研究。褚靖豫等人將BIM 和GIS 的融合應用于地鐵運維系統(tǒng),有助于建設智慧地鐵運維系統(tǒng)。程才等人分析了GIS 和BIM 兩種技術融合帶來的好處,研究了優(yōu)化GIS 和BIM 數據集相互轉換的方法。吳明堂等人設計了基于BIM 與GIS 融合的地質災害治理系統(tǒng),實現了對不同地區(qū)劃分地質災害等級并提出相應的治理措施。Wyszomirski Michal等人提出了使用可穿戴設備和物聯(lián)網數據實現BIM 和GIS 融合。而在工業(yè)界的研究中,目前已有部分工業(yè)商用軟件成功實現了IFC 模型與多層LOD 級別CityGML 模型之間的雙向轉換。IFCExplorer 現已可以導入IFC 標準的模型和CityGML 標準的模型,但對于模型轉換的研究依然停留在從IFC 標準模型向低層次CityGML 標準模型的轉換上;BIMServer 可實現對IFC 標準模型的管理以及導出CityGML、KML 等格式的文件,但卻存在導出的CityGML 標準模型精度低的問題。
為了從真正意義上實現BIM 和GIS 兩大技術領域中數據層面的融合,將其載體IFC 標準與CityGML 標準數據格式轉換分為以下幾類:(1)設計框架。陳光等人提出了一個框架,通過軌道交通BIM 和三維GIS 數據交換方法實現幾何和語義信息的轉換,進一步定義一體化三維空間數據模型,實現軌道交通及周邊空間數據的統(tǒng)一管理和無縫表達。(2)設計中間模型。Kang 等人提出將BIM 和GIS 的模型數據轉換為適當的格式,利用ETL 概念實現BIM 與GIS的數據集成。
目前尚未實現IFC 標準和CityGML 標準的完整映射和數據補充的原因為:(1)語義信息不對等。(2)不具備完整的映射規(guī)則。(3)在對語義對象進行定義時,IFC 標準和CityGML 標準的側重點不同。
本文提出的方法是基于本體通過SWRL 規(guī)則來實現映射和推理。從IFC 和CityGML 自身文件的結構定義出發(fā),其實體類別和實體屬性信息表達不同。例如,IFC 用IfcWallStandardCase 表示墻, 而CityGML 則采用WallSurface 和InteriorWallSurface 來表示墻面,因此需要先建立從IFC 標準到CityGML 標準實體類型的映射規(guī)則。其次是IFC 標準和CityGML 標準所對應的實體屬性信息詳細程度和表達不同,因此需要先將其轉換為本體用OWL 格式進行存儲,再建立LOD0-LOD4 五層映射規(guī)則實現自動轉換。詳細步驟如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 文件中。其次建立屬性類,并將實體類與屬性類建立關聯(lián),最后把它們存儲到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共有五個細節(jié)層次表達,下文介紹轉換的具體規(guī)則。
(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 的屬性信息映射需要通過規(guī)則轉換來實現,屬性信息分為關系屬性和數據屬性。
2.2.1 IFC 關系屬性映射到CityGML 屬性規(guī)則
IFC 關系屬性表示實體與實體之間的關系,將其轉換到CityGML 標準是為了確定實體與實體之間相鄰或包含的關系,便于建筑的創(chuàng)建。關系屬性主要有ContainedInStructure、hasAssociations、hasCoverings、hasOpenings、hasContext 五種,具體轉換規(guī)則為:
(1)規(guī)則1:ContainedInStructure。查看當前IFC 實體包含在哪一個IFC 實體內:如果有包含實體,遍歷所有實體的GlobalID,找到包含實體的GlobalID;若找到包含實體的GlobalID,則將當前實體與包含實體建立關聯(lián)屬性ContainedInStructure。
(2)規(guī)則2:hasAssociations。查看與當前IFC 實體有關聯(lián)的實體,如果有關聯(lián)實體,則遍歷IFC 所有實體的GlobalID,找到與覆蓋物實體GlobalID 相同的實體;如果找到關聯(lián)實體,則將當前實體與該實體建立關聯(lián)hasAssociations。
(3)規(guī)則3:hasCoverings。查看當前IFC 實體是否包含覆蓋物,如果有覆蓋物,則遍歷IFC 所有實體的GlobalID,找到與覆蓋物實體GlobalID 相同的實體;如果找到覆蓋物,則將當前實體與context 建立關聯(lián)hasCoverings;如果沒找到覆蓋物,則建立一個對象context_1,與IfcWall 建立關聯(lián)hasCoverings。
(4)規(guī)則4:hasOpenings。查看當前IFC 實體是否包含窗戶,如果有窗戶,則遍歷IFC 所有實體的GlobalID,找到與窗戶實體GlobalID 相同的實體;如果找到窗戶,則將當前實體與opening 建立關聯(lián)hasOpenings。
(5)規(guī)則5:hasContext。查看當前IFC 實體是否有文字貼紙,如果有文字貼紙,則遍歷IFC 所有實體的GlobalID,找到與該實體GlobalID 相同的實體;如果找到文字貼紙,則將該實體與context 建立關聯(lián)hasContext;如果沒有找到文字貼紙,則建立一個對象context_1,與IfcWall 建立關聯(lián)hasContext。
2.2.2 IFC 數據屬性映射到CityGML 屬性規(guī)則
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 規(guī)則將LOD0-LOD4 對應的數據信息推理出來,實現從IFC 格式到CityGML 格式LOD0-LOD4 的轉換。
對于LOD0 層次SWRL 規(guī)則的建立,具體過程為先找到所有的墻和地板實體,并把墻和地板的、值分別表示出來;再比較各實體的、,找出值最大的點和值最小的點,以及值最大的點和值最小的點共四個頂點。對于LOD1 層次SWRL 規(guī)則的建立,具體過程為在LOD0 的基礎上,通過比較Z 軸方向數值的大小來尋找屋頂實體,并把屋頂在Z 軸方向的值作為該建筑的最高點。對于LOD2 層次SWRL 規(guī)則的建立,具體過程為在LOD1 的基礎上,把LOD2 內沒有開口的實體及其屬性轉換為CityGML 標準本體的實體和屬性的表示方法。對于LOD3 層次SWRL 規(guī)則的建立,具體過程為在LOD2 的基礎上,加上開口的實體(如門、窗等)。對于LOD1 層次SWRL 規(guī)則的建立,具體過程為在LOD3 的基礎上,不只看該建筑物外面的實體和屬性,還需要從室外走進室內,將室內家具、里墻等室內結構遍歷出來,并將其轉換為CityGML 標準本體的實體和屬性表達。
使用SWRL 規(guī)則把部分屬性轉化為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 規(guī)則可獲取CityGML 標準的OWL 本體文件,進而獲取CityGML 模型的實體及屬性信息。根據自定義程序規(guī)則將所獲取的信息轉換為CGA 語言,以此實現自動建模。
首先,遍歷CityGML 標準owl 本體文件中的實體類型,并為每一個實體類型建立組,如為整個建筑建立組并命名為1 組,即@Group ("Building",1);為墻實體類型建立組并命為2 組,即@Group ("Wall",2),依此類推。其次,為每一種實體類型的對應屬性建立變量,如建立樓房高度height、基層高度groundFloor、墻厚度WallW 等。最后,根據CityGML 標準LOD0-LOD3 四層建立對應的CGA 規(guī)則,通過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 規(guī)則語言,即可實現自動建模,得到CityGML 標準的模型。
本文實驗數據的獲取是采用Revit 建立一個IFC 標準的三維建筑模型并導出其.ifc 格式文件。該模型有一個樓層,包括墻、平板、窗戶、門、家具等建筑構件,如圖2所示。
圖2 IFC 標準的三維模型
本文實現IFC 標準模型自動轉換為LOD0-LOD4 的CityGML 標準模型,試驗在IfcOpenShell 開源代碼和OwlReady2 開源代碼的基礎上進行。IfcOpenShell 可實現IFC 文件的解析,OwlReady2 可實現本體文件構建并進行SWRL 規(guī)則推理等。首先,根據本文提出的方法,設計并實現算法,通過解析IFC 標準模型得到數據信息,根據所得數據信息建立IFC 標準的本體文件,再建立LOD0-LOD4 五層SWRL 規(guī)則,實現IFC 實體和屬性到CityGML 實體和屬性的轉換,最后通過CGA 規(guī)則語言和所獲得的CityGML 標準實體和屬性建立CityGML 標準的三維建筑模型。實驗環(huán)境為:
(1)Microsoft Windows 10 操作系統(tǒng)。
(2)Pycharm(使用Python 語言開發(fā))。
(3)IfcOpenshell 開源庫。
(4)OwlReady2 開源庫。
(5)Revit(建立IFC 標準的三維模型、IFC 模型可視化軟件)。
(6)CityEngine(使用CGA 規(guī)則語言自動建模)。
(7)ArcGIS(CityGML 模型可視化軟件)。
首先,利用Revit 建立IFC 標準的三維建筑模型,并導出ifc 格式的文件。其次,利用本文提出的方法結合IfcOpenShell 和OwlReady2 進行編碼,開發(fā)生成IFC 格式向OWL 格式轉換的可執(zhí)行程序,點擊該可執(zhí)行程序打開轉換頁面,如圖3所示。選擇IFC 文件的路徑,并選擇要解析的實體類型,點擊“export”即可預覽解析的結果,點擊“convert”即可獲取OWL 格式的文件。
圖3 IFC2OWL 系統(tǒng).exe
根據所建立的LOD0-LOD4 五層SWRL 規(guī)則,利用轉換而來的OWL 文件可得到CityGML LOD0-4 五層的數據信息,再用CGA 規(guī)則語言表示出每一層的數據信息,最后即可得到CityGML 標準的模型,如圖4、圖5、圖6、圖7所示。
圖4 LOD0 CityGML 標準模型
圖5 LOD1 CityGML 標準模型
圖6 LOD2 CityGML 標準模型
圖7 LOD3 CityGML 標準模型
本文提出了基于SWRL 規(guī)則的BIM 和GIS 建筑本體融合方法,研究了從BIM 的IFC 標準到GIS 的CityGML 標準LOD0-LOD4 五層的轉換方法,設計了LOD0-LOD4 五層SWRL 規(guī)則和CGA 規(guī)則。該方法基于本體通過SWRL 規(guī)則實現映射和推理,在語義和幾何方面實現了IFC 標準到CityGML LOD0-LOD4 五層的轉換,又使用CGA 規(guī)則語言表示實體類型和屬性信息。該方法不僅解決了數據丟失問題,還實現了高效建模。
后續(xù)的研究將集中于以下兩個方面:(1)考慮在新型智慧城市建設的背景下,實現現有的數據模型與大數據、云計算等信息的集成,不斷進行數據類型和數據結構的拓展與優(yōu)化。(2)優(yōu)化建筑模型,完成多層次轉換,使轉換結果的準確度更高。