程綿綿,李少梅,朱新銘,程見(jiàn)橋
(1.信息工程大學(xué) 地理空間信息學(xué)院,河南 鄭州450001;2.北京理工大學(xué) 信息與電子學(xué)院,北京100081)
矢量數(shù)據(jù)是表示空間對(duì)象信息的一種重要數(shù)據(jù)結(jié)構(gòu),是進(jìn)行各種深入研究工作的重要信息資源[1]。規(guī)則格網(wǎng)DEM能夠描述地形的高程信息,采用地形格網(wǎng)可以模擬地球表面的起伏。矢量數(shù)據(jù)與三維地形的無(wú)縫融合是恢復(fù)空間對(duì)象真實(shí)面貌的重要手段[2]。隨著三維地理信息系統(tǒng)、三維制圖及虛擬現(xiàn)實(shí)技術(shù)的發(fā)展,矢量數(shù)據(jù)與三維地形的無(wú)縫疊加及符號(hào)化成為研究的熱點(diǎn)與難點(diǎn)問(wèn)題。在三維地理信息系統(tǒng)方面,三維地形無(wú)縫疊加矢量數(shù)據(jù)主要是為了在三維空間中進(jìn)行空間分析和量算;在三維制圖方面,主要是將三維地形及矢量基礎(chǔ)地理信息以更直觀的方式統(tǒng)一呈現(xiàn),制作三維地圖;在虛擬現(xiàn)實(shí)方面,主要是綜合利用DEM數(shù)據(jù)及矢量基礎(chǔ)地理信息數(shù)據(jù)構(gòu)建虛擬地理環(huán)境。面向制圖的矢量數(shù)據(jù)與三維地形無(wú)縫疊加強(qiáng)調(diào)的是矢量數(shù)據(jù)在三維地形表面的疊加及符號(hào)化效果,以更直觀有效的方式傳遞地圖信息,而不是疊加及顯示的實(shí)時(shí)性。
現(xiàn)階段,矢量數(shù)據(jù)與三維地形的無(wú)縫疊加主要有3種方法:幾何法[3]、紋理法[4]及陰影 體算法[5],這3種方法各有不同的特點(diǎn)及適用領(lǐng)域。從三維制圖的角度來(lái)講,為了使制圖過(guò)程更加靈活,需要從DEM數(shù)據(jù)及矢量數(shù)據(jù)出發(fā),分別實(shí)現(xiàn)DEM數(shù)據(jù)三維可視化及矢量數(shù)據(jù)符號(hào)化,其思想相當(dāng)于將傳統(tǒng)二維制圖平面變成三維地形表面,將矢量數(shù)據(jù)“放到”地形表面后實(shí)現(xiàn)其符號(hào)化[6]?,F(xiàn)有的幾何法能實(shí)現(xiàn)矢量數(shù)據(jù)與三維地形的無(wú)縫疊加,但沒(méi)有考慮后續(xù)的矢量數(shù)據(jù)符號(hào)化過(guò)程,使得矢量數(shù)據(jù)的顯示過(guò)于簡(jiǎn)單,從而導(dǎo)致地圖要素信息傳遞受限[7]。本文以線狀矢量要素為例,提出了一種基于幾何法的線狀矢量數(shù)據(jù)與規(guī)則格網(wǎng)DEM無(wú)縫疊加的方案,并在此基礎(chǔ)上通過(guò)紋理映射的方式實(shí)現(xiàn)線狀要素的符號(hào)化。
矢量數(shù)據(jù)是通過(guò)坐標(biāo)值來(lái)精確地表示點(diǎn)、線、面等地理實(shí)體,線要素矢量數(shù)據(jù)通常用來(lái)表示道路、河流等線狀基礎(chǔ)地理信息;規(guī)則格網(wǎng)DEM數(shù)據(jù)可以通過(guò)構(gòu)建地形三角網(wǎng)的方式實(shí)現(xiàn)地形三維可視化。幾何法是根據(jù)矢量數(shù)據(jù)與地形三角網(wǎng)的交點(diǎn)進(jìn)行插值計(jì)算,實(shí)現(xiàn)矢量數(shù)據(jù)與三維地形的無(wú)縫疊加。為了讓矢量數(shù)據(jù)顯示時(shí)具有一定的寬度,常常將矢量數(shù)據(jù)擴(kuò)展一定的寬度后再執(zhí)行疊加算法。這種方式比較靈活,可以根據(jù)實(shí)際需要決定如何擴(kuò)展矢量數(shù)據(jù)以及擴(kuò)展后如何與地形三角網(wǎng)進(jìn)行交點(diǎn)計(jì)算。本文提出的算法分以下幾步進(jìn)行:
對(duì)于矢量數(shù)據(jù)的一個(gè)結(jié)點(diǎn)P(x,y),計(jì)算其在三維地形表面對(duì)應(yīng)的點(diǎn)P′(x,y,z),步驟如下:
1)根據(jù)P點(diǎn)坐標(biāo)判斷其落在哪個(gè)格網(wǎng)當(dāng)中,假設(shè)為正方形ABCD,如圖1所示,進(jìn)而根據(jù)P點(diǎn)與AC直線的關(guān)系,判斷P點(diǎn)在格網(wǎng)的哪個(gè)三角形中。
圖1 點(diǎn)與地形三角網(wǎng)在平面上的投影
2)假設(shè)P點(diǎn)落在三角形ABC中,由于點(diǎn)A,B,C為DEM格網(wǎng)點(diǎn),其三維坐標(biāo)皆為已知,根據(jù)空間共面條件方程,可以求出P點(diǎn)的z坐標(biāo),求解方程如下:
計(jì)算得到矢量數(shù)據(jù)在DEM三角網(wǎng)上對(duì)應(yīng)的新結(jié)點(diǎn)后,假設(shè)僅僅連接這些新結(jié)點(diǎn),當(dāng)這些結(jié)點(diǎn)不在三角網(wǎng)中同一個(gè)三角形中時(shí),就會(huì)出現(xiàn)穿透或架空在三角網(wǎng)中的情形。為了讓矢量數(shù)據(jù)緊貼地形表面,必須計(jì)算矢量數(shù)據(jù)與地形三角網(wǎng)的交點(diǎn),讓矢量數(shù)據(jù)緊貼著地形三角網(wǎng)中的每個(gè)三角形,并將這些交點(diǎn)增加到矢量數(shù)據(jù)結(jié)點(diǎn)當(dāng)中,步驟如下:
1.2.1 計(jì)算矢量數(shù)據(jù)與DEM格網(wǎng)交點(diǎn)平面坐標(biāo)
根據(jù)矢量數(shù)據(jù)相鄰兩個(gè)結(jié)點(diǎn)坐標(biāo)計(jì)算其所在的直線方程,并根據(jù)兩結(jié)點(diǎn)坐標(biāo)值計(jì)算該線段跨越的橫向和縱向的格網(wǎng)數(shù),分別將橫向格網(wǎng)的y值與縱向格網(wǎng)的x值代入直線方程,即可算出所有與格網(wǎng)交點(diǎn)的x,y坐標(biāo)。
1.2.2 計(jì)算矢量數(shù)據(jù)與DEM格網(wǎng)交點(diǎn)高程值
矢量數(shù)據(jù)與格網(wǎng)的交點(diǎn)是空間任意一點(diǎn)的特例,因此可以按照1.1中所述方法進(jìn)行計(jì)算。另外,由于矢量數(shù)據(jù)與DEM格網(wǎng)交點(diǎn)都在DEM格網(wǎng)上,計(jì)算交點(diǎn)的高程值只需在相鄰DEM頂點(diǎn)上根據(jù)x坐標(biāo)(交點(diǎn)在橫向格網(wǎng)上)或y坐標(biāo)(交點(diǎn)在縱向格網(wǎng)上)線性插值計(jì)算,這樣計(jì)算公式更簡(jiǎn)單,此處不再贅述。
按照現(xiàn)有的幾何法接下來(lái)應(yīng)該計(jì)算矢量數(shù)據(jù)與地形三角網(wǎng)中跨越的三角形斜邊的交點(diǎn),但是因?yàn)楹芏鄷r(shí)候矢量數(shù)據(jù)與格網(wǎng)的交點(diǎn)和與斜邊的交點(diǎn)很近,如圖2所示,為了避免給矢量數(shù)據(jù)增加過(guò)多的結(jié)點(diǎn)使矢量數(shù)據(jù)過(guò)于破碎,本文把線狀矢量要素對(duì)地形的改造作用考慮進(jìn)去,方法如1.3所述。
圖2 矢量數(shù)據(jù)與格網(wǎng)的交點(diǎn)
按照上述方法疊加的矢量數(shù)據(jù)在數(shù)學(xué)意義上是沒(méi)有寬度的直線,若在符號(hào)化時(shí)給矢量數(shù)據(jù)配置一定寬度的符號(hào),由于矢量數(shù)據(jù)所在的地形表面一般不是水平面,這時(shí)會(huì)出現(xiàn)符號(hào)一半嵌入一半架空在地形上的情況。另外由于計(jì)算的矢量數(shù)據(jù)緊貼地形表面,在繪制過(guò)程中還會(huì)出現(xiàn)Z緩存混淆現(xiàn)象。
本文給出的解決方案是在構(gòu)建地形三角網(wǎng)時(shí)就考慮到矢量數(shù)據(jù)符號(hào)的寬度,假設(shè)符號(hào)的寬度為w,矢量數(shù)據(jù)某結(jié)點(diǎn)處相鄰線段的夾角為θ,如圖3所示,則結(jié)點(diǎn)處符號(hào)的寬度為w/cos(θ/2)。因此,在矢量數(shù)據(jù)與地形格網(wǎng)交點(diǎn)處向所在直線垂直的方向水平擴(kuò)展w/2距離增加頂點(diǎn),在矢量數(shù)據(jù)結(jié)點(diǎn)處向角平分線方向水平擴(kuò)展w/2cos(θ/2)增加頂點(diǎn),以這些頂點(diǎn)構(gòu)成的封閉條帶為約束條件,約束地形三角網(wǎng)的構(gòu)建。為了減少計(jì)算量,當(dāng)線段斜率絕對(duì)值小于1時(shí)只取與縱向格網(wǎng)的交點(diǎn)(圖4中AB段),大于1時(shí)只取與橫向格網(wǎng)的交點(diǎn)(圖4中BC段),這樣能保證在小于一個(gè)格網(wǎng)的范圍內(nèi)在三維地形表面增加了新結(jié)點(diǎn),不會(huì)影響矢量數(shù)據(jù)與三維地形的融合效果,且避免使矢量數(shù)據(jù)過(guò)于破碎。構(gòu)建的約束條件及地形格網(wǎng)在平面上的投影如圖4所示。
圖3 結(jié)點(diǎn)處寬度計(jì)算
圖4 構(gòu)建的約束條件及地形格網(wǎng)在平面上的投影
這種方法可以使線狀矢量要素比較均勻地疊加到三維地形上,且考慮到了矢量數(shù)據(jù)對(duì)三維地形的改造作用,比較符合實(shí)際情況。至此,線狀矢量要素已擴(kuò)展成為一定寬度的條帶嵌入在三維地形中,在條帶范圍內(nèi)配置一定的符號(hào),就可以實(shí)現(xiàn)線狀要素在三維地形表面的符號(hào)化。
基于三維地形的符號(hào)化是指在地形表面疊加矢量數(shù)據(jù)后,給矢量數(shù)據(jù)配置符號(hào)。線要素常用的符號(hào)化方法有縱向配置圖元法、橫向配置圖元法和函數(shù)法,其中橫向配置圖元法可用于絕大多數(shù)線狀符號(hào)的繪制,其思想是將線狀符號(hào)橫向分解為最簡(jiǎn)單的重復(fù)單元,繪制時(shí)只用重復(fù)配置此單元。
由于要實(shí)現(xiàn)矢量數(shù)據(jù)與三維地形的無(wú)縫疊加,本文中的矢量數(shù)據(jù)已擴(kuò)展成為一定寬度的條帶,此時(shí)實(shí)現(xiàn)矢量數(shù)據(jù)的符號(hào)化可以沿著中軸線按照橫向配置圖元法給矢量數(shù)據(jù)配置與條帶寬度一致的符號(hào),這種方式類似于傳統(tǒng)的在二維平面上的矢量數(shù)據(jù)符號(hào)化,會(huì)涉及到矢量數(shù)據(jù)轉(zhuǎn)折點(diǎn)、交叉點(diǎn)處的關(guān)系處理等問(wèn)題,難度較大。本文采用一種新的符號(hào)化方式,即在條帶范圍內(nèi)重復(fù)配置符號(hào)圖元,一個(gè)簡(jiǎn)單而有效的方式是使用紋理映射,使用紋理映射的好處是矢量數(shù)據(jù)轉(zhuǎn)折點(diǎn)處的處理非常簡(jiǎn)單。這里的紋理是一個(gè)數(shù)組的概念,紋理可以是一個(gè)顏色數(shù)組,也可以是一張圖片。將符號(hào)圖元制作成紋理單元,在條帶范圍內(nèi)重復(fù)貼此紋理單元,可以實(shí)現(xiàn)在三維地形表面的線狀矢量要素符號(hào)化。
現(xiàn)階段使用的紋理類型較多,如一維紋理、二維紋理、三維紋理、立方圖紋理等。這些紋理類型有不同的應(yīng)用范圍,本文對(duì)不同的線狀符號(hào)選擇二維紋理和一維紋理進(jìn)行符號(hào)化。
2.1.1 二維紋理符號(hào)
這是應(yīng)用最為廣泛的一種紋理類型,它負(fù)責(zé)將二維矩形圖像映射到三維物體之上。這種紋理基本可以實(shí)現(xiàn)所有的線狀要素的符號(hào)化,紋理圖元的制作可以通過(guò)PhotoShop、Ill ustrator等圖形軟件進(jìn)行,要注意的是二維紋理高度和寬度通常為2n像素,如圖5所示。
圖5 符號(hào)紋理單元
2.1.2 一維紋理符號(hào)
如果將二維紋理的高度設(shè)置為1,則可視為一種只在一個(gè)方向上變化的一維紋理,這種方式只適合于沿著矢量數(shù)據(jù)方向不發(fā)生變化的符號(hào),圖5中的高速公路和普通公路紋理單元可以用一維紋理表示。雖然一維紋理實(shí)現(xiàn)的功能完全可以用二維紋理實(shí)現(xiàn),但是一維紋理內(nèi)存開(kāi)銷較小,用一維數(shù)組即可描述一個(gè)一維紋理,方法是依次將顏色值存入一維數(shù)組。
在應(yīng)用程序中實(shí)現(xiàn)紋理貼圖通常需要以下4步:
1)創(chuàng)建紋理對(duì)象,并指定為一種紋理類型;
2)確定紋理如何應(yīng)用到每個(gè)像素上;
3)啟用紋理貼圖功能;
4)繪制場(chǎng)景,提供紋理坐標(biāo)和幾何圖形坐標(biāo)。
其中最關(guān)鍵的是最后一步,即計(jì)算幾何體每個(gè)頂點(diǎn)對(duì)應(yīng)的紋理坐標(biāo)。紋理坐標(biāo)決定了紋理圖像中哪個(gè)紋理單元將分配給某個(gè)特定頂點(diǎn)。在三維渲染引擎中,可以通過(guò)遍歷幾何體頂點(diǎn)計(jì)算適當(dāng)?shù)募y理坐標(biāo),也可以不用顯示地分配紋理坐標(biāo),而是通過(guò)頂點(diǎn)坐標(biāo)函數(shù),由渲染引擎自動(dòng)計(jì)算紋理坐標(biāo)。
以某塊區(qū)域規(guī)則格網(wǎng)DEM數(shù)據(jù)為例,在該區(qū)域內(nèi)模擬3段不同類型的矢量數(shù)據(jù),采用本文所述方法,利用Visual C++2010和OSG開(kāi)源庫(kù)編程。其中OSG是一個(gè)基于工業(yè)圖形標(biāo)準(zhǔn)Open GL的高層次圖形開(kāi)發(fā)API接口[8],在實(shí)驗(yàn)中主要用來(lái)進(jìn)行地形三維建模和實(shí)現(xiàn)紋理映射功能,其本身并不能實(shí)現(xiàn)矢量數(shù)據(jù)與三維地形的無(wú)縫疊加。矢量數(shù)據(jù)擴(kuò)展一定寬度后疊加到規(guī)則格網(wǎng)DEM的地形三角網(wǎng)如圖6所示;用分層設(shè)色方式實(shí)現(xiàn)地形三維可視化、分別用二維紋理實(shí)現(xiàn)鐵路和高速公路符號(hào)化以及用一維紋理實(shí)現(xiàn)普通公路符號(hào)化的效果如圖7所示。
圖6 矢量數(shù)據(jù)擴(kuò)展一定寬度后嵌入在地形三角網(wǎng)中
圖7 矢量數(shù)據(jù)在三維地形表面的符號(hào)化效果
本文提出了一種在規(guī)則格網(wǎng)DEM表面無(wú)縫疊加線狀矢量要素并實(shí)現(xiàn)矢量要素符號(hào)化的方法,通過(guò)實(shí)驗(yàn),證明此方法行之有效。該方法可以對(duì)三維地形及矢量要素分別以不同的方式可視化,如對(duì)三維地形可以以不同的方式渲染,對(duì)矢量要素可以根據(jù)需要配置不同的符號(hào),兩者互不影響。這種方式在三維制圖及構(gòu)建三維虛擬地理環(huán)境方面具有一定的參考價(jià)值。由于本文以紋理映射的方式實(shí)現(xiàn)線狀矢量要素的符號(hào)化,在顯示效果及細(xì)節(jié)上還有所欠缺,下一步將研究新的符號(hào)化方法。
[1] SCHNEIDER M,KLEIN R.Efficient and accurate rending of vector data on virtual landscapes[J].Jour nal of WSCG,2007,15(1-3):59-65.
[2] 王嬌嬌.矢量數(shù)據(jù)三維可視化研究進(jìn)展[J].廣東農(nóng)業(yè)科學(xué),2013(8):183-188.
[3] AGRA WAL A,RADHAKRISHNA M,JOSHI R.Geo metr y based mapping and rendering of vector data over LOD photo-textured 3D terrain models.Proceedings of WSCG[C].Plzen:Czech Republic,2006.
[4] BRUNETON E,NEYRET F.Real-ti me rendering and editing of vector-based terrains [J].Eurographics,2008,27(2):311-320.
[5] 劉昭華,楊靖宇,戴晨光.基于模板陰影體算法的矢量數(shù)據(jù)在三維場(chǎng)景中的繪制[J].測(cè)繪工程,2009,18(1):38-41.
[6] 王祥峰,裴亮,丁波.基于ERDAS的數(shù)字校園三維可視化[J].測(cè)繪工程,2014,23(4):58-61.
[7] 曹雪峰,萬(wàn)剛,李鋒,等.三維地形環(huán)境中矢量地圖實(shí)時(shí)符號(hào)化顯示技術(shù)[J].系統(tǒng)仿 真學(xué)報(bào),2013,25(S1):253-257.
[8] 王銳,錢學(xué)雷.OpenScene Graph三維渲染引擎設(shè)計(jì)與實(shí)踐[M].北京:清華大學(xué)出版社,2009.