王永君,陳青燕,楊玉嬌,陳學業,孫 劍
1. 南京師范大學江蘇省地理信息資源開發與應用協同創新中心, 江蘇 南京 210023; 2. 南京師范大學虛擬地理環境教育部重點實驗室,江蘇 南京 210023; 3. 南京師范大學地理環境演變國家重點實驗室培育點, 江蘇 南京 210023; 4. 上海樹融數據科技有限公司,上海 200082; 5. 自然資源部城市國土資源監測與仿真重點實驗室, 廣東 深圳 518034
三維城市模型作為數字城市及智慧城市空間框架數據的核心內容[1-3],被廣泛應用于旅游、室內導航、災害逃生、城市規劃、虛擬戰場等領域[4-7]。但目前開放的三維城市模型一般是面向可視化或者具體應用,模型中會存在語義、拓撲和幾何不一致性的問題,如建筑物幾何模型未閉合、建筑墻面為非平面等[8],從而導致三維模型并不能滿足主題查詢、空間數據挖掘以及基于空間關系計算、分析等方面的需求,不利于其在下游領域的深層次應用。對三維空間模型數據的幾何、拓撲和語義的一致性檢測和修復是三維模型空間分析和下游領域深度應用的前提和保證[9-10],其中三維空間模型數據的拓撲一致性是保證模型幾何、拓撲表達的真實性、正確性的重要方面[11-12]。在CAD領域,三維實體通常以邊界表示法(boundary representation,B-rep)表示,并以數據結構強制性要求多面體為流形形體[13-14]。在GIS相關領域,對三維模型的檢測主要根據模型建模需求定義幾何拓撲一致性規則,再以規則檢測模型為主[15-16]。文獻[12]針對3D城市模型的拓撲一致性檢測給出13條規則,從拓撲和數學公理兩個方面驗證規則的完整性、正確性、有效性。但該規則未考慮多面體的孔洞問題,無法檢測CityGML(city geography markup language)模型LOD3中含有門窗的建筑物,模型的拓撲檢測不完整。
本文擬針對CityGML模型數據,提出適合多種LODs數據的語義約束下的拓撲一致性規則,設計相應的檢測算法,并采用公開數據對算法進行試驗與驗證。
CityGML是開放地理空間信息聯盟(open geospatial consortium,OGC)為實現三維城市模型信息共享和可視化而提出的國際標準,基于XML模式實現了虛擬三維城市模型中城市空間對象三維幾何、拓撲、語義信息的存儲和交換[17-18]。作為一種開放、結合室內外場景的數據模型,CityGML被廣泛地應用于三維GIS領域,如室內外一體化導航、無人駕駛、防災減災、路徑分析等[19-20]。CityGML有如下特點:①按照GML3.1.1實現了建筑物、地形、交通、植被、水體、城市設施、土地利用等三維城市專題模塊,其中以建筑物模型的使用最為廣泛與復雜;②CityGML中空間對象的幾何屬性通過幾何-拓撲模型進行表示[21],即更高維度的圖元拓撲由低維原語構建,簡單幾何模型一般有4個維度的基本幾何元素,每一個維度對應一個幾何-拓撲基元,零維(point)、一維(curve)、二維(surface)、三維(solid),即點、線、面、體;③針對同一個地理空間對象,CityGML在模型的語義層面上,對空間對象的屬性或對象之間的關系進行描述,在空間層面上,對空間對象所在的空間位置和范圍等進行描述,因此CityGML的拓撲一體化模型通過對應關系相互聯系空間對象的幾何語義建模和幾何拓撲建模兩個方面[22](圖1);④針對同一空間對象的語義、拓撲與幾何信息,CityGML模型將描述的精細程度分為5個細節層次LOD0—LOD4,針對建筑物、建筑物部件以及建筑物附屬設施由簡到繁的表達(圖2)。

圖1 CityGML語義、幾何與拓撲一致性模型[22]Fig.1 CityGML semantic, geometric and topologic consistency model[22]

圖2 CityGML 5個細節層次[16]Fig.2 The five LODs of CityGML[16]
CityGML建筑物模型的一致性規則主要有幾何拓撲和幾何語義兩個方面。其幾何要素的空間屬性通過GML3的幾何-拓撲模型進行表示,GML3的幾何模型在ISO19107標準上構建。因此根據ISO19107等通用的國際標準提取建筑物模型的幾何檢測規則,可以在保證建筑物幾何有效性的同時,減少不同模型之間數據模型集成的沖突。CityGML的語義屬性代表對象在現實空間中的具體意義,因此可根據不同語義對象在現實空間的屬性,定義針對建筑物的拓撲規則。
1.2.1 拓撲規則提取
通過分析ISO19107/OGC/GML3[10,16,23-24]等標準中幾何圖元點、線、面、體的定義,根據幾何維度不同,分層次對幾何模型定義相應拓撲規則。其中,參照CityGML OGC標準,surface不考慮曲面,而是由平面片構成,以polygon表示;curve被強制定義為折線,以line string進行表示;solid定義為用封閉表面shell圍起來的邊界,體有內外邊界,即內外shell之分。具體規則定義如下。
(1) 環規則
規則1:linear ring至少由3點組成,當只有3點時,第1點和最后一點坐標不可相同,記為CL-NumPoints&CL-Close。
規則2:除了首末點,linear ring上其他點的坐標值不同,記為CL-DupPoint。
規則3:linear ring上點不能重復,記為CL-DupRing。
規則4:linear ring具有非自相交性,記為CL-SelfInt。如圖3(a)的solid因為面上內外環相交而無效。
(2) 面規則
規則5:polygon上所有點需在同一個平面上,但允許有一定的平面允許容差,記為CP-Plan-Dist&CP-Plan-Dist-TRI。
規則6:同一個面上內外環方向相反,外環方向為右手系逆時針方向,記為CP-Clockwise。
規則7:polygon上的內外環拓撲關系為外環包含內環,記為CP-InROutside。
規則8:面上內環之間不能相交或重疊,記為CP-NoCrossing。
規則9:面內部必須連通可達,記為CP-Connected,如圖3(b)上表面,一個內環因將一個平面分成兩部分而無效。
(3) 體規則
規則10:solid至少由4個有效且位于不同平面上的面組成,記為CS-NUMFaces。
規則11:solid上的每一條邊被兩個面,且僅被兩個面所共享,為流形形體。記為CS-Non ManifoldEdge&CS-NonManifoldVer。如圖3(c),一條公共邊被3個面所共享而無效。
規則12:構成solid的各個面不相交,記為CS-SelfInt。
規則13:構成solid上的每個面都有方向,且面的法向量必須都指向solid外部,記為CS-Face-Orient&CS-Face-Out。
規則14:solid必須有連通性,記為CS-Connected。如圖3(c),solid兩部分不可達。
規則15:內shell必須在外shell內部,且shells之間不能相交重疊,只能相切于點、線,記為CS-Inshell-Outside。如圖3(d),solid因內部shell之間的交叉而無效。

圖3 4個不符合檢測規則的無效solidFig.3 Four invalid solids which break the validation rules
1.2.2 語義屬性規則提取
基于幾何語義一致性原則,CityGML中的面元素、體元素都有對應的語義屬性信息,可從語義屬性中分析提取空間實體的拓撲一致性規則,包括空間隱喻規則與非空間隱喻規則。空間隱喻規則如幾何對象間的方向約束、拓撲關系約束或者距離約束。如在LOD2、LOD3中語義為wall surface的空間對象相對應的幾何表達為polygon,wall surface的語義屬性會對該polygon幾何元素有法向量方向約束,即可提取相應規則;非空間隱喻規則如門窗與墻體的is-part-of的關系。
(1) 語義屬性對空間對象的方向約束需考慮CityGML多層次的特點,模型中不同的LOD層次所含語義對象信息不同,則有不同的方向約束規則。具體見表1。

表1 不同語義屬性對語義對象的方向約束規則
(2) 語義屬性對空間對象間的拓撲關系約束。該約束考慮不同語義對象間的拓撲關系,根據CityGML的數據特點,將其支持的三維拓撲關系分為相等(equal)、相離(disjoint)、相交(intersects)、相切(touch)、包含(contains)5種,且根據分層的幾何結構規則,僅考慮相同幾何基元間的拓撲關系。在LOD1和LOD2中,建筑物的幾何信息是單個幾何體或者復合面, 針對該語義對象考察點與點、線與線、面與面間的拓撲關系;在LOD3中,門窗與墻以面表示,需要考慮門、窗等語義要素在幾何上的拓撲關系,wall surface上的點與window/door上的點應在同一平面上,且門窗與墻面內環相切,墻面幾何的內環間不能相離、相交或重疊等;在LOD4中建筑物為復合體,包括墻、門窗、室內房間、樓梯等幾何體,室內幾何對象之間不能相交,且被包含于整個建筑物外圍,整個建筑物外圍包括 roof surface、wall surface和ground surface。部分空間對象的拓撲關系約束形式化表達見表2。

表2 語義屬性約束下的拓撲關系表達
(3) 語義屬性對空間對象的距離約束。根據GB50352—2019《民用建筑設計統一標準》及GB 50096—2011《住宅設計規范》中對常見室內對象的設計規定,可分析提取針對空間對象層高、凈高等距離關系的約束規則[25-26](表3)。

表3 不同語義對象的距離約束規則示例
(4) 非空間隱喻對空間對象的約束。一些語義關系,如is-part-of等只能在語義層面提取[27],如每個room必定與一個door關聯并與其相切,3樓的stair way必須高于2樓的stair way等常識性規則,則需對stair way所在樓層、floor所在樓層信息,門窗與房間is-part-of的關聯關系等非空間隱喻提取拓撲一致性檢測規則,具體示例見表4。

表4 語義對象間的非空間隱喻規則示例
本文以產生式表示法表示規則集,一個產生式對應一個規則,并采用點、線、面、體、多體等不同幾何維度的分層檢測算法進行拓撲一致性檢測。高維度的拓撲檢測建立在低維度的幾何一致性基礎上。
上述規則,最終可轉換為諸如平面擬合、距離判斷等約束條件,采用最小二乘法、三維布爾運算等算法,進行判斷與求解。由于涉及的檢測算法較多,考慮到平面檢測在模型檢測中比較典型,本文僅以此為代表進行介紹。
2.1.1 投影降維檢測
三維空間數據相較二維空間數據復雜,由直線的幾何投影特性可知:三維平面向不垂直于該面的另一個二維面進行投影,投影面上各點的順序關系不會發生改變,即投影點之間的拓撲關系與相對應空間點之間的拓撲關系一致。因此在拓撲一致性檢測的過程中,三維面的自相交檢測可通過降維投影到相應的二維平面,通過二維面的自相交檢測判斷空間面是否相交。但由于投影有積聚性和收縮性,若向垂直于該面的平面進行投影,則所有點會積聚為一條線,投影后各點之間的距離也會發生改變。為了避免投影的積聚性和減少投影收縮可能引起的判斷誤差,根據空間三維面的單位法向量判定投影方向,選擇沿法向量的3個方向軸的最大矢量軸進行投影,若法向量為(0,0,1),則沿Z軸向xy平面投影。因此點、線、面幾何元素的自相交、面上內外環等拓撲一致性通過投影降維進行檢測。
2.1.2 拓撲一致性檢測算法
針對三維平面的檢測規則共有5條,面元素的幾何一致性檢測建立在該面所有環都具有拓撲一致性的基礎上,并考慮幾何結構和語義對象兩種規則約束。針對規則(5),通過同一面上所有空間點到擬合面的距離可檢測構成該面的點是否在給定的精度閾值范圍內共面,采用最小二乘法生成擬合面[28];針對規則(6)、(7)、(8),先將三維面投影降維到二維面,然后對投影面做環方向檢測、包含檢測以及內環相交檢測;針對規則(9),可首先將三維面進行三角剖分,通過判斷剖分后三角形之間的連通關系,檢測面內部的連通性。本文提出另外一種方法,由于面的內部連通性主要由內環與外環、內環之間的關系決定,當其關系滿足以下的約束時,面的內部是連通的(各個條件為遞進關系,即從上到下,滿足條件即可終止判斷):
(1) 面有且只有一個外環,無內環。
(2) 面有一個內環,且內環與外環沒有公共頂點。
(3) 面有一個內環,內環與外環之間只有一個公共頂點。
(4) 面有多于一個內環,每個內環都與外環沒有公共頂點。
(5) 每個內環與外環之間最多只有一個公共頂點,且內環之間沒有公共頂點。
(6) 內環之間最多只有一個公共頂點,且兩個相鄰內環之間只能通過該公共頂點進行連通。
當CityGML細節層次模型為LOD3及以上,需要檢測solid中多個shells的拓撲關系或者多個solids間的拓撲關系,在CGAL庫中以Nef-Polyhedral表示對象,對對象進行布爾運算,求其交集、并集、差集,以volume數判斷shell之間的空間關系。
不同LOD層級的建筑物適應不同的一致性規則。LOD1是以規則長方體表示建筑物的沒有屋頂結構的塊狀模型,因而在LOD1的檢測中,只考慮簡單體的拓撲規則,不考慮幾何面的語義屬性、面上內外環的拓撲關系或者幾何體中內外shell的拓撲關系等;LOD2中可以確切地表示建筑物屋頂的形狀及外觀,是一個帶有屋頂結構的簡化模型,所有幾何面均擁有語義屬性信息,因此在這個層級的幾何模型中,在LOD1拓撲檢測的基礎上,增加語義屬性對幾何結構約束的規則檢測;LOD3的建筑模型在LOD2的基礎上,增加了墻面、門窗、屋頂形狀等詳細的幾何外觀信息以及對“開口”的描述,在LOD3建筑模型的拓撲一致性檢測過程中,以LOD2的拓撲檢測為基礎,增加語義屬性中復合面間拓撲關系的規則檢測,以檢測墻面與窗或者窗與窗之間的幾何拓撲關系;LOD4在LOD3的基礎上加入了三維空間對象的內部結構信息,如房間、樓梯、家具等,這里不考慮家具等室內設施,因而在LOD3拓撲檢測的基礎上,增加了內外shell及體與體之間的拓撲一致性檢測。由此可見,多層次的語義規則更有助于CityGML模型不同細節層次幾何模型的拓撲一致性檢測需求。
在同一個CityGML模型中,前文中描述的規則之間具有依賴關系。按照幾何要素進行劃分。環要素的檢測優先于其他所有規則進行檢測,其后依次是面要素規則檢測,外殼要素規則檢測,體要素規則檢測,多體要素規則檢測;后一個環節的檢測依賴于前一個環節規則檢測結果,在前一個檢測正確或者經過修復后正確之后,后面環節的檢測方能開始。
此外,在各個幾何要素層的檢測過程中,各個子規則也需要遵循一定的依賴性。下面以面檢測為例進行說明。
面檢測子規則具體見表5。在保證其前序環規則檢測正確后,ID為203的多邊形平面性檢測是面要素幾何一致性檢測的前提,ID為201、202、205、206、207的規則之間相互獨立,依賴于ID為203、208的規則。其他子規則之間的檢測依賴關系見表6。

表5 面要素子規則
表6 面要素子規則檢測的依賴性說明
Tab.6 Dependency of sub-rule detection of polygon
elements

檢測規則ID201202203204205206207208201√√202√√203204√√√√√√√205√√206√√207√√208√209√210√
CityGML的幾何模型未顯示存儲solid中的拓撲關系,對solid的每個面采用單獨存儲的方法。因此在一個正方形中,同一個點將被存儲3次,則可能會出現3個坐標表示同一個點。當點數值很大時,在計算機的浮點計算下會導致solid出現未閉合的不一致性,因此需考慮一定的舍入誤差。ISO19107及GML中要求CityGML幾何模型中表面必須為平面,OGC在OGC CityGML QIE中對幾何模型平面性引入平面容差和角度容差[16]。
一條拓撲一致性規則對應一個類型的拓撲問題。當建筑物模型的拓撲不一致類型較多且數據缺失嚴重時,較難修復全部類型的錯誤。這里以常見的平面幾何要素、方向一致性、閉合性、重復性等拓撲一致性問題的修復為例進行說明。
平面幾何的特性與幾何實體的語義屬性互相聯系,針對平面幾何要素的修復,需以語義屬性規則進行輔助。以下對常見的地面(ground surface)、墻面(wall surface)及屋頂(roof surface)分別進行說明。
地面的法向量垂直向下,計算該幾何面所有點所在最小二乘擬合面,面上所有點到擬合面的對應投影點構成平面Z,設平面Pxy平行于xy水平面并經過平面中最低點,求得Z平面上所有點到該平面的投影點,則對應投影點坐標構成的面即是修復后的幾何面,如圖4(a)所示;墻面應與地面共享一條邊,以邊與法向量構建平面Pyz,原幾何面上所有點至該平面的投影點構成的面即為修復面,如圖4(b)所示;屋頂主要分為平屋頂與三角屋頂,平面屋頂修復與地面修復方法類似,如圖4(c)所示;三角屋頂需計算該屋頂所有點所在最小二乘擬合面,所有點沿Z軸至擬合面的投影點構成的面即為屋頂的修復面,如圖4(d)所示。

圖4 平面幾何體的修復Fig.4 Fixing errors in plane geometry
在各個等級規則中,都有對方向性的檢測。以solid為例,其外shell法向應指向體外,而內shell方向應指向體的內部。該錯誤可通過遍歷每個面,根據該面的正確朝向,對順序不一致的邊界點索引進行反轉,從而修復方向不一致問題。在其他的檢測等級中,也可依次處理方向不一致問題。
閉合性修復分為環與體的情況。環的首末點必須相同,以保證環的閉合性,可通過復制第一點坐標并加入到點序列末尾,對環的閉合性進行修復。
多面體以半邊數據結構表示,即幾何模型中每條邊均存在僅被兩個面所共享的特征,如圖5所示,有向邊〈V5,V6〉存在于面D中,有向邊〈V6,V5〉存在于面C中,則邊V5V6僅被C、D兩個面共享。針對數據結構表示的特性,可通過存儲的半邊信息以修復未閉合問題。如圖5所示,邊V1V2僅存在于面A中,有向邊〈V1,V2〉存在于面A中,則〈V2,V1〉是缺失面B的一邊,同理可得有向邊〈V1,V4〉、〈V4,V3〉、〈V3,V2〉,即缺失面B由邊〈V1,V4〉、〈V4,V3〉、〈V3,V2〉、〈V2,V1〉組成。對于LOD2/LOD3的閉合修復,可通過面B的法向量方向賦予語義信息。若單位法向量向上為屋頂,向下為地面;若法向量為水平方向則需判斷面B為墻面還是門窗。有向邊〈V1,V2〉在面A中,若其為面A外環中的邊,則邊〈V2,V1〉為面B的外環,標識B為墻面;否則為門或者窗。對于LOD4的體閉合修復,則為該Solid語義屬性,其中針對未閉合面修復的算法如下:

圖5 建筑物體未閉合Fig.5 Solid geometry is not closed
begin
多面體_polyhedron;
if (_polyhedron->is_closed() == false)
while (_polyhedron->size_of_border_edges()>0)
Halfedge_handle he=++(_polyhedron->border_halfedges_begin());
he->vertex()->point().x()
he->vertex()->point().y()
he->vertex()->point().z()∥get the point in the missing polygon
_polyhedron->fill_hole(he);
_polyhedron->normalize_border();
end if
end
以環的重復性修復為例,在環一致性規則中,同一個環的點只允許首末點相同,其他點不允許重復。根據點重復類型不同,修復分為兩種情況,一種情況如圖6(a)所示,R=(V0,V1,V2,V3,V3,V0),其中點V3在點序列中出現連續重復;另一種情況如圖6(b)中的R=(V0,V1,V4,V3,V2,V4,V0),點V4在序列中不是連續重復。針對(a)圖中的重復性,可將重復的第2個點直接刪除;針對(b)圖中的不一致問題,可將該環分為R=(V0,V1,V4,V0)及R=(V4,V2,V3,V4)兩個環,因此多邊形被分割成多個多邊形。針對環重復、面重復或者shell等不一致問題,則可直接進行刪除。

圖6 環上點的兩種重復性情況Fig.6 Two repetitive cases of points on the ring
本文研究以CityGML建筑物模型的LOD2數據、LOD3數據及LOD4數據為例,進行試驗驗證分析。其中LOD2含32個建筑物,LOD3含400個建筑物,數據來源于OGC官網,LOD4建筑物含10個語義對象,由某棟IFC建筑物模型經過數據轉換得到的CityGML LOD4數據。統一設置舍入誤差為1 mm,平面容差分別為0.01 m,平面角度容差1°。檢測系統界面如圖7所示。

圖7 幾何檢測試驗系統界面Fig.7 System interface of geometric validation
針對CityGML LOD2試驗數據的幾何一致性檢測結果統計如圖8所示。該模型數據在幾何一致性檢測中存在環自相交、非平面、非流形邊、方向不一致、數據不完整導致幾何模型未閉合的不一致問題。如圖8(a)所示,該數據中不一致性問題占比達到一半以上;圖8(b)中給出了不一致問題的類型,其中非平面的幾何錯誤(對應203號面要素規則)相比其他不一致性問題為多。

圖8 LOD2建筑物幾何一致性檢測試驗結果Fig.8 Results of geometric consistency validation on LOD2 model of building
圖9給出了某些建筑物中出現的非流形問題(圖6(a))及方向不一致問題(圖6(b))共存的情況。其中紅色表示roof surface,灰色表示wall surface,藍色表示ground surface。

圖9 LOD2數據中多種幾何不一致共存的情況Fig.9 Multiple geometric inconsistency coexist in LOD2 models
針對CityGML LOD3試驗數據的幾何一致性檢測結果統計如圖10。該模型數據在幾何一致性檢測中存在環自相交、環與環相交、非平面、門窗與墻面拓撲關系錯誤,導致幾何模型中內環在外環外部或者門與墻面相交的內外環拓撲關系錯誤、模型數據不完整導致幾何模型未閉合及模型方向不一致等問題。如圖10(a)所示,該數據中不一致性問題占比約33%;圖10(b)中給出了不一致問題的類型,其中非平面的幾何錯誤(對應203號面要素規則)同樣最為突出。圖11給出了某些建筑物中因門窗與墻面相離或者相交從而導致數據存在環與環相交的幾何不一致問題,如圖11(a)、(b),其中紅色表示roof surface,灰色表示wall surface,土黃色表示窗,棕色表示門。

圖10 LOD3建筑物幾何一致性檢測試驗結果Fig.10 Results of geometric consistency validation on LOD3 models of building

圖11 LOD3數據幾何不一致可視化Fig.11 Visualizing results of inconsistency of LOD3 models
CityGML LOD4細節層次的建筑物數據中,語義對象以solid表示,有room、living room、hall way、window、door、floor surface、ground surface、wall surface、roof surface、stair way。該LOD4的建筑物數據存在非流形、方向不一致、room不存在與door的關聯關系導致該room不與其他室內空間連通、幾何體未閉合及語義對象間的拓撲關系錯誤等幾何不一致等問題。其中低等級的幾何錯誤較少,但方向不一致性錯誤較多。living room、roof surface、ground surface都出現了該錯誤,如room與door 的is-part-of的錯誤(圖12(a))、樓板與樓梯的拓撲關系錯誤(圖12(b))。

圖12 LOD4幾何不一致可視化Fig.12 Visualizing results of inconsistency of LOD4 models
本文以CityGML建筑物模型中常見的建筑物為研究對象,根據國際與國內的相關標準,從建筑物幾何結構特征和語義屬性信息中抽取對建筑物幾何結構、拓撲關系、方向關系、距離關系具有約束影響及可轉化為約束條件的非空間隱喻的語義信息了構建了建筑物的拓撲一致性規則集。考慮到不同LOD層次和不同語義屬性的幾何對象,結合拓撲一致性規則對單個語義對象的點、線、面、體等幾何要素及多個語義對象間的空間關系,進行模型空間數據拓撲一致性的分層檢測,提出了系統的不一致性檢測方法,檢測同一空間現象/空間實體在表達時存在的拓撲不一致問題,并進行了典型修復算法研究。試驗結果表明所提出的規則和算法可檢測出存在幾何不一致的建筑物模型空間數據,可為后期修復提供有力支持,確保數據集的拓撲一致性,提高空間數據質量,提升三維數據在集成中的互操作性。