胡瑛婷,王銘浩,石玉
(山東師范大學(xué) 信息科學(xué)與工程學(xué)院,山東 濟(jì)南 250358)
隨著信息技術(shù)的高速發(fā)展,如何使前沿科學(xué)技術(shù)推動(dòng)現(xiàn)代城市的優(yōu)化發(fā)展,這是向無(wú)數(shù)學(xué)者和業(yè)內(nèi)人士提出的一個(gè)熱點(diǎn)問(wèn)題,而智慧城市的建設(shè)是解決此類問(wèn)題的主要方法。實(shí)現(xiàn)數(shù)字城市向智慧城市過(guò)渡升級(jí)的一個(gè)重要表現(xiàn)便是城市管理的精細(xì)化。為了達(dá)成這一目標(biāo),首先需要實(shí)現(xiàn)建筑信息模型(Building Information Modeling, BIM)和地理信息系統(tǒng)(Geographic In-formation System, GIS)的融合。BIM 是以建筑物的三維化為依托,以建筑物的全生命周期為線索,將建筑生產(chǎn)各個(gè)環(huán)節(jié)所需的信息進(jìn)行統(tǒng)一整合,形成建筑信息集。建筑構(gòu)件的三維可視化和建筑各個(gè)階段協(xié)調(diào)性工作是BIM 的重要特征。BIM 具有豐富的設(shè)計(jì)細(xì)節(jié),精度較高,包含幾何、物理、規(guī)則等豐富的空間信息和語(yǔ)義信息,在應(yīng)用于建筑三維建模時(shí)可提供有關(guān)建筑物的大量信息,包括幾何信息、物理信息、規(guī)則信息等建筑空間信息。而GIS具有能提供完整的地理空間信息,并能進(jìn)行空間分析的三維模型的優(yōu)點(diǎn)。但令人遺憾的是,若我們僅利用BIM 便會(huì)缺少地理坐標(biāo)上的數(shù)據(jù)信息,而僅利用GIS 的話又無(wú)法得到建筑物室內(nèi)構(gòu)件的組成信息。通過(guò)BIM 和GIS 的融合即可結(jié)合二者各自的數(shù)據(jù)信息,將BIM 領(lǐng)域中的精確模型數(shù)據(jù)信息和GIS 領(lǐng)域中的空間信息系統(tǒng)數(shù)據(jù)信息相結(jié)合,以實(shí)現(xiàn)信息的相互補(bǔ)充,這樣做拓寬了數(shù)據(jù)的表示范圍,增加了數(shù)據(jù)的深度,最終實(shí)現(xiàn)從建筑物外部走到建筑物內(nèi)部的目標(biāo)。
BIM 技術(shù)的快速發(fā)展為三維城市模型的建立提供了更為詳細(xì)的數(shù)據(jù)信息和更加強(qiáng)大的數(shù)據(jù)支持,同時(shí)也實(shí)現(xiàn)了城市管理效率的提高,不僅是當(dāng)下城市三維建模研究的重點(diǎn),同時(shí)也是智慧城市等研究領(lǐng)域的技術(shù)支撐。
在學(xué)術(shù)界,BIM 與GIS 的融合是當(dāng)前相關(guān)專業(yè)研究的前沿方向,許多學(xué)者和組織都就此展開了深入的探討和研究。褚靖豫等人將BIM 和GIS 的融合應(yīng)用于地鐵運(yùn)維系統(tǒng),有助于建設(shè)智慧地鐵運(yùn)維系統(tǒng)。程才等人分析了GIS 和BIM 兩種技術(shù)融合帶來(lái)的好處,研究了優(yōu)化GIS 和BIM 數(shù)據(jù)集相互轉(zhuǎn)換的方法。吳明堂等人設(shè)計(jì)了基于BIM 與GIS 融合的地質(zhì)災(zāi)害治理系統(tǒng),實(shí)現(xiàn)了對(duì)不同地區(qū)劃分地質(zhì)災(zāi)害等級(jí)并提出相應(yīng)的治理措施。Wyszomirski Michal等人提出了使用可穿戴設(shè)備和物聯(lián)網(wǎng)數(shù)據(jù)實(shí)現(xiàn)BIM 和GIS 融合。而在工業(yè)界的研究中,目前已有部分工業(yè)商用軟件成功實(shí)現(xiàn)了IFC 模型與多層LOD 級(jí)別CityGML 模型之間的雙向轉(zhuǎn)換。IFCExplorer 現(xiàn)已可以導(dǎo)入IFC 標(biāo)準(zhǔn)的模型和CityGML 標(biāo)準(zhǔn)的模型,但對(duì)于模型轉(zhuǎn)換的研究依然停留在從IFC 標(biāo)準(zhǔn)模型向低層次CityGML 標(biāo)準(zhǔn)模型的轉(zhuǎn)換上;BIMServer 可實(shí)現(xiàn)對(duì)IFC 標(biāo)準(zhǔn)模型的管理以及導(dǎo)出CityGML、KML 等格式的文件,但卻存在導(dǎo)出的CityGML 標(biāo)準(zhǔn)模型精度低的問(wèn)題。
為了從真正意義上實(shí)現(xiàn)BIM 和GIS 兩大技術(shù)領(lǐng)域中數(shù)據(jù)層面的融合,將其載體IFC 標(biāo)準(zhǔn)與CityGML 標(biāo)準(zhǔn)數(shù)據(jù)格式轉(zhuǎn)換分為以下幾類:(1)設(shè)計(jì)框架。陳光等人提出了一個(gè)框架,通過(guò)軌道交通BIM 和三維GIS 數(shù)據(jù)交換方法實(shí)現(xiàn)幾何和語(yǔ)義信息的轉(zhuǎn)換,進(jìn)一步定義一體化三維空間數(shù)據(jù)模型,實(shí)現(xiàn)軌道交通及周邊空間數(shù)據(jù)的統(tǒng)一管理和無(wú)縫表達(dá)。(2)設(shè)計(jì)中間模型。Kang 等人提出將BIM 和GIS 的模型數(shù)據(jù)轉(zhuǎn)換為適當(dāng)?shù)母袷?,利用ETL 概念實(shí)現(xiàn)BIM 與GIS的數(shù)據(jù)集成。
目前尚未實(shí)現(xiàn)IFC 標(biāo)準(zhǔn)和CityGML 標(biāo)準(zhǔn)的完整映射和數(shù)據(jù)補(bǔ)充的原因?yàn)椋海?)語(yǔ)義信息不對(duì)等。(2)不具備完整的映射規(guī)則。(3)在對(duì)語(yǔ)義對(duì)象進(jìn)行定義時(shí),IFC 標(biāo)準(zhǔn)和CityGML 標(biāo)準(zhǔn)的側(cè)重點(diǎn)不同。
本文提出的方法是基于本體通過(guò)SWRL 規(guī)則來(lái)實(shí)現(xiàn)映射和推理。從IFC 和CityGML 自身文件的結(jié)構(gòu)定義出發(fā),其實(shí)體類別和實(shí)體屬性信息表達(dá)不同。例如,IFC 用IfcWallStandardCase 表示墻, 而CityGML 則采用WallSurface 和InteriorWallSurface 來(lái)表示墻面,因此需要先建立從IFC 標(biāo)準(zhǔn)到CityGML 標(biāo)準(zhǔn)實(shí)體類型的映射規(guī)則。其次是IFC 標(biāo)準(zhǔn)和CityGML 標(biāo)準(zhǔn)所對(duì)應(yīng)的實(shí)體屬性信息詳細(xì)程度和表達(dá)不同,因此需要先將其轉(zhuǎn)換為本體用OWL 格式進(jìn)行存儲(chǔ),再建立LOD0-LOD4 五層映射規(guī)則實(shí)現(xiàn)自動(dòng)轉(zhuǎn)換。詳細(xì)步驟如1 圖所示,圖1描述了從IFC 標(biāo)準(zhǔn)的建筑模型轉(zhuǎn)換為CityGML LOD0-LOD4 標(biāo)準(zhǔn)模型的過(guò)程。
圖1 轉(zhuǎn)換過(guò)程圖
1.2.1 解析IFC 格式建筑模型實(shí)體類別
本文利用IfcOpenShell 解析IFC 標(biāo)準(zhǔn)的建筑文件,其主要思路是解析XML 文件,重點(diǎn)解析IFC 模型各個(gè)構(gòu)件的幾何坐標(biāo),IfcOpenshell 定義了專門的數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)從IFC 模型中解析出的實(shí)體類別和實(shí)體屬性信息。我們最終可以解析出21 個(gè)實(shí)體類別、36 114 個(gè)IFC 屬性。
所提取的IFC 標(biāo)準(zhǔn)建筑實(shí)體包括21 個(gè)類別,分別是IfcBeam、IfcBuildingElementProxy、IfcChimney、IfcColumn、IfcCovering、IfcCurtainWall、IfcDoor、IfcFooting、IfcMember、IfcPile、IfcPlate、IfcRailing、IfcRamp、IfcRampFlight、IfcRoof、IfcShadingDevice、IfcSlab、IfcStair、IfcStairFlight、IfcWall、IfcWindow。通過(guò)判斷IFC 標(biāo)準(zhǔn)建筑模型中某一實(shí)體的類別來(lái)提取實(shí)體。
1.2.2 解析IFC 格式建筑模型實(shí)體屬性
根據(jù)IFC 標(biāo)準(zhǔn)和CityGML 標(biāo)準(zhǔn)文檔,本研究選取了二者兼具的IFC 標(biāo)準(zhǔn)的屬性(或是名稱表達(dá)不一樣而實(shí)際意義一樣的IFC 標(biāo)準(zhǔn)的屬性)。GlobalId 表示該實(shí)體的唯一標(biāo)識(shí),ObjectPlacement.RelativePlacement.Location 表示該實(shí)體的坐標(biāo)位置,SweptArea 表示該實(shí)體的占地面積,RelatingMaterial 表示該實(shí)體的組成材料,Transparency 表示該實(shí)體的透明度,SurfaceColour.Red、SurfaceColour.Blue、SurfaceColour.Green、DiffuseColour 表示該實(shí)體的漫射顏色,Outer 表示該實(shí)體的邊緣輪廓信息。
1.2.3 以O(shè)WL 本體建模語(yǔ)言形式存儲(chǔ)實(shí)體和屬性
在本研究中,利用OWL 本體建模語(yǔ)言能夠很好地定義概念,可以從簡(jiǎn)單概念構(gòu)造出復(fù)雜概念,允許使用推理機(jī)等,將解析出的IFC 標(biāo)準(zhǔn)建筑模型信息用OWL 本體建模語(yǔ)言來(lái)表示及存儲(chǔ)。
首先建立實(shí)體類,將每一個(gè)實(shí)體類型分別以類的形式存儲(chǔ)在OWL 文件中。其次建立屬性類,并將實(shí)體類與屬性類建立關(guān)聯(lián),最后把它們存儲(chǔ)到IFC 標(biāo)準(zhǔn)的本體文件中。其中,類globalId、類type、類StyleName、類StyleSide 是數(shù)據(jù)屬性,其屬性值為字符串格式;類StyleDiffuseColour、類StyleSurfaceColour_blue、 類StyleSurfaceColour_green、類StyleSurfaceColour_red、類StyleTransparency 是數(shù)據(jù)屬性,其屬性值為浮點(diǎn)型;類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。最終將實(shí)體類別及屬性信息OWL以本體建模語(yǔ)言的形式存儲(chǔ)。
通過(guò)語(yǔ)義匹配和幾何轉(zhuǎn)換,將IFC 標(biāo)準(zhǔn)下的實(shí)體和屬性信息轉(zhuǎn)換為CityGML 標(biāo)準(zhǔn)下的實(shí)體和屬性信息。其中,CityGML共有五個(gè)細(xì)節(jié)層次表達(dá),下文介紹轉(zhuǎn)換的具體規(guī)則。
(1)IFC—CityGML LOD0。IfcSlab 對(duì)應(yīng)CityGML 實(shí)體,F(xiàn)loorsurface、OuterFloorsurface 在此LOD 層獲取Slab 的長(zhǎng)和寬(即該模型的占地面積),此時(shí)該建筑物為二維。
(2)IFC—CityGML LOD1。在LOD0 層的基礎(chǔ)上,IFC 實(shí)體IfcSpace 對(duì)應(yīng)CityGML 實(shí)體Room,IFC 實(shí)體IfcRoof 對(duì)應(yīng)CityGML 實(shí)體RoofSurface。獲取IfcRoof 實(shí)體及其高度的數(shù)據(jù)信息,與LOD0 的占地面積相結(jié)合即可將該建筑拉伸為三維實(shí)體。
(3)IFC—CityGML LOD2。在LOD1 層的基礎(chǔ)上,IFC 實(shí)體IfcWall 對(duì)應(yīng)CityGML 實(shí)體WallSurface,IFC 實(shí)體IfcCovering 對(duì)應(yīng)CityGML 實(shí)體OuterCeilingsurface。獲取墻和屋頂實(shí)體的詳細(xì)信息,通過(guò)獲取屋頂?shù)倪吘夵c(diǎn)可更加詳細(xì)地勾勒出屋頂?shù)男螤睢?/p>
(4)IFC—CityGML LOD3。在LOD2 層的基礎(chǔ)上,IFC 實(shí)體IfcWindow 對(duì)應(yīng)CityGML 實(shí)體Window,IFC 實(shí)體IfcDoor 對(duì)應(yīng)CityGML 實(shí)體Door,IFC 實(shí)體IfcBeam、IfcColumn、IfcStair、IfcRailing 對(duì) 應(yīng)CityGML 實(shí) 體BuildingInstallation。獲取門、窗口、梁等實(shí)體的信息,該層將建筑物刻畫得更加細(xì)致,但始終都是對(duì)建筑物外表面的描述。
(5)IFC—CityGML LOD4。在LOD3 層的基礎(chǔ)上(該層添加了室內(nèi)的實(shí)體信息),實(shí)現(xiàn)了從室外轉(zhuǎn)向室內(nèi)。
根據(jù)第四層CityGML 標(biāo)準(zhǔn),實(shí)體信息的映射關(guān)系如表1所示。
表1 IFC 實(shí)體與CityGML 實(shí)體映射關(guān)系
從IFC 到CityGML 的屬性信息映射需要通過(guò)規(guī)則轉(zhuǎn)換來(lái)實(shí)現(xiàn),屬性信息分為關(guān)系屬性和數(shù)據(jù)屬性。
2.2.1 IFC 關(guān)系屬性映射到CityGML 屬性規(guī)則
IFC 關(guān)系屬性表示實(shí)體與實(shí)體之間的關(guān)系,將其轉(zhuǎn)換到CityGML 標(biāo)準(zhǔn)是為了確定實(shí)體與實(shí)體之間相鄰或包含的關(guān)系,便于建筑的創(chuàng)建。關(guān)系屬性主要有ContainedInStructure、hasAssociations、hasCoverings、hasOpenings、hasContext 五種,具體轉(zhuǎn)換規(guī)則為:
(1)規(guī)則1:ContainedInStructure。查看當(dāng)前IFC 實(shí)體包含在哪一個(gè)IFC 實(shí)體內(nèi):如果有包含實(shí)體,遍歷所有實(shí)體的GlobalID,找到包含實(shí)體的GlobalID;若找到包含實(shí)體的GlobalID,則將當(dāng)前實(shí)體與包含實(shí)體建立關(guān)聯(lián)屬性ContainedInStructure。
(2)規(guī)則2:hasAssociations。查看與當(dāng)前IFC 實(shí)體有關(guān)聯(lián)的實(shí)體,如果有關(guān)聯(lián)實(shí)體,則遍歷IFC 所有實(shí)體的GlobalID,找到與覆蓋物實(shí)體GlobalID 相同的實(shí)體;如果找到關(guān)聯(lián)實(shí)體,則將當(dāng)前實(shí)體與該實(shí)體建立關(guān)聯(lián)hasAssociations。
(3)規(guī)則3:hasCoverings。查看當(dāng)前IFC 實(shí)體是否包含覆蓋物,如果有覆蓋物,則遍歷IFC 所有實(shí)體的GlobalID,找到與覆蓋物實(shí)體GlobalID 相同的實(shí)體;如果找到覆蓋物,則將當(dāng)前實(shí)體與context 建立關(guān)聯(lián)hasCoverings;如果沒(méi)找到覆蓋物,則建立一個(gè)對(duì)象context_1,與IfcWall 建立關(guān)聯(lián)hasCoverings。
(4)規(guī)則4:hasOpenings。查看當(dāng)前IFC 實(shí)體是否包含窗戶,如果有窗戶,則遍歷IFC 所有實(shí)體的GlobalID,找到與窗戶實(shí)體GlobalID 相同的實(shí)體;如果找到窗戶,則將當(dāng)前實(shí)體與opening 建立關(guān)聯(lián)hasOpenings。
(5)規(guī)則5:hasContext。查看當(dāng)前IFC 實(shí)體是否有文字貼紙,如果有文字貼紙,則遍歷IFC 所有實(shí)體的GlobalID,找到與該實(shí)體GlobalID 相同的實(shí)體;如果找到文字貼紙,則將該實(shí)體與context 建立關(guān)聯(lián)hasContext;如果沒(méi)有找到文字貼紙,則建立一個(gè)對(duì)象context_1,與IfcWall 建立關(guān)聯(lián)hasContext。
2.2.2 IFC 數(shù)據(jù)屬性映射到CityGML 屬性規(guī)則
IFC 數(shù)據(jù)屬性映射到CityGML 的數(shù)據(jù)屬性分三類實(shí)體:實(shí)體IfcCovering、實(shí)體IfcBuildingElementProxy 以及其他實(shí)體,均需要經(jīng)過(guò)六步。
其中,其他實(shí)體的數(shù)據(jù)屬性映射流程為:
(1)將IFC 標(biāo)準(zhǔn)的實(shí)體解析出八個(gè)離散的頂點(diǎn)。
(2)獲取該實(shí)體的GlobalID。
(3)針對(duì)不同實(shí)體,建立空間面的方式不同:
1)IfcWall。 把點(diǎn)、、、連接,組成interiorWallSurface,id 為GlobalID_1;把點(diǎn)、、、連接,組成WallSurface,id 為GlobalID_2。
2)IfcSlab。 把點(diǎn)、、、連接,組成Floorsurface,id 為GlobalID_1;把點(diǎn)、、、連接,組成OuterFloorsurface,id 為GlobalID_2。
3)IfcBeam。通過(guò)連接頂點(diǎn)建立多個(gè)面片實(shí)體,并依次將其id 設(shè)置為GlobalID_1,2,3....
4)IfcFurniture。連接每一個(gè)outer 里的頂點(diǎn)建立一個(gè)面片對(duì)象,多個(gè)outer 屬性就有多個(gè)面片對(duì)象,并依次將其id設(shè)置為GlobalID_,2,3....
5)IfcSpace。連接邊緣頂點(diǎn)建立一個(gè)對(duì)象,并將其id設(shè)置為GlobalID_1。
6)IfcWindow、IfcDoor。把點(diǎn)、、、分別與點(diǎn)、、、合并,組成二維的Window,id 為GlobalID_1。
(4)把面的頂點(diǎn)坐標(biāo)放在<gml:posList srsDi-mension=“3”></gml:posList>。
(5)根據(jù)向量矩陣將所獲取點(diǎn)的坐標(biāo)轉(zhuǎn)化為CityGML中的世界坐標(biāo)。其中,是指矩陣在Y 軸的延伸方向,是指矩陣在Z 軸的延伸方向,向量矩陣是指,公式為:
(6)將IfcSurfaceStyleRendering 類中的屬性與CityGML 中相應(yīng)的屬性做對(duì)應(yīng)。映射表如表2所示。
表2 IFC 關(guān)系屬性映射到CityGML 數(shù)據(jù)屬性
GlobalID gml:id LongName名稱Outer外圍邊緣點(diǎn)坐標(biāo)OuterCurve ObjectPlacement gml:posList
實(shí)體IfcCovering 的數(shù)據(jù)屬性映射流程為: 通過(guò)Outer 屬性解析出IFC 標(biāo)準(zhǔn)IfcCovering 的邊緣頂點(diǎn);獲取該IfcCovering 的GlobalID;將邊緣頂點(diǎn)連接,組成:面Ceilingsurface,id 為GlobalID_1, 面OuterCeilingsurface,id 為GlobalID_2;把面的點(diǎn)坐標(biāo)放在<gml:posList srsDimension=”3”></gml:posList>;根據(jù)向量矩陣將所獲取點(diǎn)的坐標(biāo)轉(zhuǎn)化為CityGML 中的世界坐標(biāo);將IfcSurfaceStyleRendering類中的屬性與CityGML 中相應(yīng)的屬性做對(duì)應(yīng)。
實(shí)體IfcBuildingElementProxy 的數(shù)據(jù)屬性映射流程為:通過(guò)ObjectPlacement 屬性找出IFC 標(biāo)準(zhǔn)實(shí)體的坐標(biāo)點(diǎn);獲取該實(shí)體的GlobalID;通過(guò)objectType 屬性獲取其高度或?qū)挾?;通過(guò)坐標(biāo)點(diǎn)和高度將該實(shí)體拉伸,將其id 設(shè)置為GlobalID;把原點(diǎn)坐標(biāo)和拉伸后的坐標(biāo)放在<gml:posList srsDimension=”3”></gml:posList>;根據(jù)向量矩陣將所獲取頂點(diǎn)的坐標(biāo)轉(zhuǎn)化為CityGML 中的世界坐標(biāo)。
最后,使用Python 中的Owlready2 接口,將實(shí)體類別和實(shí)體屬性以三元組的形式存儲(chǔ)到CityGML2.0 標(biāo)準(zhǔn)的OWL文件中。
基于所存儲(chǔ)的實(shí)體類別和實(shí)體屬性,采用SWRL 規(guī)則將LOD0-LOD4 對(duì)應(yīng)的數(shù)據(jù)信息推理出來(lái),實(shí)現(xiàn)從IFC 格式到CityGML 格式LOD0-LOD4 的轉(zhuǎn)換。
對(duì)于LOD0 層次SWRL 規(guī)則的建立,具體過(guò)程為先找到所有的墻和地板實(shí)體,并把墻和地板的、值分別表示出來(lái);再比較各實(shí)體的、,找出值最大的點(diǎn)和值最小的點(diǎn),以及值最大的點(diǎn)和值最小的點(diǎn)共四個(gè)頂點(diǎn)。對(duì)于LOD1 層次SWRL 規(guī)則的建立,具體過(guò)程為在LOD0 的基礎(chǔ)上,通過(guò)比較Z 軸方向數(shù)值的大小來(lái)尋找屋頂實(shí)體,并把屋頂在Z 軸方向的值作為該建筑的最高點(diǎn)。對(duì)于LOD2 層次SWRL 規(guī)則的建立,具體過(guò)程為在LOD1 的基礎(chǔ)上,把LOD2 內(nèi)沒(méi)有開口的實(shí)體及其屬性轉(zhuǎn)換為CityGML 標(biāo)準(zhǔn)本體的實(shí)體和屬性的表示方法。對(duì)于LOD3 層次SWRL 規(guī)則的建立,具體過(guò)程為在LOD2 的基礎(chǔ)上,加上開口的實(shí)體(如門、窗等)。對(duì)于LOD1 層次SWRL 規(guī)則的建立,具體過(guò)程為在LOD3 的基礎(chǔ)上,不只看該建筑物外面的實(shí)體和屬性,還需要從室外走進(jìn)室內(nèi),將室內(nèi)家具、里墻等室內(nèi)結(jié)構(gòu)遍歷出來(lái),并將其轉(zhuǎn)換為CityGML 標(biāo)準(zhǔn)本體的實(shí)體和屬性表達(dá)。
使用SWRL 規(guī)則把部分屬性轉(zhuǎn)化為CityGML 標(biāo)準(zhǔn)屬性的具體步驟為:
Step1:建立變量,分別為wall_Type、wallSurface、wall_DiffuseColour、wall_Transparency、wall_Id。
Step2:遍歷集合LOD2_E_attri 中的所有實(shí)體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。
根據(jù)SWRL 規(guī)則可獲取CityGML 標(biāo)準(zhǔn)的OWL 本體文件,進(jìn)而獲取CityGML 模型的實(shí)體及屬性信息。根據(jù)自定義程序規(guī)則將所獲取的信息轉(zhuǎn)換為CGA 語(yǔ)言,以此實(shí)現(xiàn)自動(dòng)建模。
首先,遍歷CityGML 標(biāo)準(zhǔn)owl 本體文件中的實(shí)體類型,并為每一個(gè)實(shí)體類型建立組,如為整個(gè)建筑建立組并命名為1 組,即@Group ("Building",1);為墻實(shí)體類型建立組并命為2 組,即@Group ("Wall",2),依此類推。其次,為每一種實(shí)體類型的對(duì)應(yīng)屬性建立變量,如建立樓房高度height、基層高度groundFloor、墻厚度WallW 等。最后,根據(jù)CityGML 標(biāo)準(zhǔn)LOD0-LOD3 四層建立對(duì)應(yīng)的CGA 規(guī)則,通過(guò)extrude、split、comp 等方法將各實(shí)體的屬性信息等表示出來(lái)。
具體步驟為(僅列出LOD3):
輸入。包含所有實(shí)體的CityGML 標(biāo)準(zhǔn)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:為建筑的每一個(gè)面添加顏色屬性。
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:建立屋頂實(shí)體。Roof—roofHip (rH,0)。
Step6:建立窗戶實(shí)體。Window—offset(d) wwin-dow。
wwindow—comp (f) {inside: win-dowinside | border:extrude (2) windowborder}
windowinside—color (r,g,b)
Step6:建立門實(shí)體。Door—offset (d) ddoor。
ddoor—comp (f) {inside: doorinside | border: extrude(2)doorborder}
doorinside—color (r,g,b)
最終得到CityGML LOD0-LOD3 每一層對(duì)應(yīng)的CGA 規(guī)則語(yǔ)言,即可實(shí)現(xiàn)自動(dòng)建模,得到CityGML 標(biāo)準(zhǔn)的模型。
本文實(shí)驗(yàn)數(shù)據(jù)的獲取是采用Revit 建立一個(gè)IFC 標(biāo)準(zhǔn)的三維建筑模型并導(dǎo)出其.ifc 格式文件。該模型有一個(gè)樓層,包括墻、平板、窗戶、門、家具等建筑構(gòu)件,如圖2所示。
圖2 IFC 標(biāo)準(zhǔn)的三維模型
本文實(shí)現(xiàn)IFC 標(biāo)準(zhǔn)模型自動(dòng)轉(zhuǎn)換為L(zhǎng)OD0-LOD4 的CityGML 標(biāo)準(zhǔn)模型,試驗(yàn)在IfcOpenShell 開源代碼和OwlReady2 開源代碼的基礎(chǔ)上進(jìn)行。IfcOpenShell 可實(shí)現(xiàn)IFC 文件的解析,OwlReady2 可實(shí)現(xiàn)本體文件構(gòu)建并進(jìn)行SWRL 規(guī)則推理等。首先,根據(jù)本文提出的方法,設(shè)計(jì)并實(shí)現(xiàn)算法,通過(guò)解析IFC 標(biāo)準(zhǔn)模型得到數(shù)據(jù)信息,根據(jù)所得數(shù)據(jù)信息建立IFC 標(biāo)準(zhǔn)的本體文件,再建立LOD0-LOD4 五層SWRL 規(guī)則,實(shí)現(xiàn)IFC 實(shí)體和屬性到CityGML 實(shí)體和屬性的轉(zhuǎn)換,最后通過(guò)CGA 規(guī)則語(yǔ)言和所獲得的CityGML 標(biāo)準(zhǔn)實(shí)體和屬性建立CityGML 標(biāo)準(zhǔn)的三維建筑模型。實(shí)驗(yàn)環(huán)境為:
(1)Microsoft Windows 10 操作系統(tǒng)。
(2)Pycharm(使用Python 語(yǔ)言開發(fā))。
(3)IfcOpenshell 開源庫(kù)。
(4)OwlReady2 開源庫(kù)。
(5)Revit(建立IFC 標(biāo)準(zhǔn)的三維模型、IFC 模型可視化軟件)。
(6)CityEngine(使用CGA 規(guī)則語(yǔ)言自動(dòng)建模)。
(7)ArcGIS(CityGML 模型可視化軟件)。
首先,利用Revit 建立IFC 標(biāo)準(zhǔn)的三維建筑模型,并導(dǎo)出ifc 格式的文件。其次,利用本文提出的方法結(jié)合IfcOpenShell 和OwlReady2 進(jìn)行編碼,開發(fā)生成IFC 格式向OWL 格式轉(zhuǎn)換的可執(zhí)行程序,點(diǎn)擊該可執(zhí)行程序打開轉(zhuǎn)換頁(yè)面,如圖3所示。選擇IFC 文件的路徑,并選擇要解析的實(shí)體類型,點(diǎn)擊“export”即可預(yù)覽解析的結(jié)果,點(diǎn)擊“convert”即可獲取OWL 格式的文件。
圖3 IFC2OWL 系統(tǒng).exe
根據(jù)所建立的LOD0-LOD4 五層SWRL 規(guī)則,利用轉(zhuǎn)換而來(lái)的OWL 文件可得到CityGML LOD0-4 五層的數(shù)據(jù)信息,再用CGA 規(guī)則語(yǔ)言表示出每一層的數(shù)據(jù)信息,最后即可得到CityGML 標(biāo)準(zhǔn)的模型,如圖4、圖5、圖6、圖7所示。
圖4 LOD0 CityGML 標(biāo)準(zhǔn)模型
圖5 LOD1 CityGML 標(biāo)準(zhǔn)模型
圖6 LOD2 CityGML 標(biāo)準(zhǔn)模型
圖7 LOD3 CityGML 標(biāo)準(zhǔn)模型
本文提出了基于SWRL 規(guī)則的BIM 和GIS 建筑本體融合方法,研究了從BIM 的IFC 標(biāo)準(zhǔn)到GIS 的CityGML 標(biāo)準(zhǔn)LOD0-LOD4 五層的轉(zhuǎn)換方法,設(shè)計(jì)了LOD0-LOD4 五層SWRL 規(guī)則和CGA 規(guī)則。該方法基于本體通過(guò)SWRL 規(guī)則實(shí)現(xiàn)映射和推理,在語(yǔ)義和幾何方面實(shí)現(xiàn)了IFC 標(biāo)準(zhǔn)到CityGML LOD0-LOD4 五層的轉(zhuǎn)換,又使用CGA 規(guī)則語(yǔ)言表示實(shí)體類型和屬性信息。該方法不僅解決了數(shù)據(jù)丟失問(wèn)題,還實(shí)現(xiàn)了高效建模。
后續(xù)的研究將集中于以下兩個(gè)方面:(1)考慮在新型智慧城市建設(shè)的背景下,實(shí)現(xiàn)現(xiàn)有的數(shù)據(jù)模型與大數(shù)據(jù)、云計(jì)算等信息的集成,不斷進(jìn)行數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)的拓展與優(yōu)化。(2)優(yōu)化建筑模型,完成多層次轉(zhuǎn)換,使轉(zhuǎn)換結(jié)果的準(zhǔn)確度更高。