李娟
(山西省測(cè)繪地理信息院 第三測(cè)繪院,山西 太原 030002)
可視性分析是三維地理信息系統(tǒng)(3D GIS)所特有的一種空間分析技術(shù)。隨著GIS由二維向三維擴(kuò)展,可視性分析技術(shù)在GIS中發(fā)揮著越來(lái)越重要的作用,在諸如森林防火瞭望塔和機(jī)場(chǎng)雷達(dá)等選址、路徑規(guī)劃及導(dǎo)航、戰(zhàn)場(chǎng)上火力和火炮的有效打擊范圍、建筑的阻擋分析及日照分析等方面[1-2]都有重要應(yīng)用。
可視性分析的結(jié)果受到許多復(fù)雜因素的影響,如地形、房屋建筑、植被、觀測(cè)點(diǎn)和觀測(cè)目標(biāo)的位置等。傳統(tǒng)的可視性分析算法主要是針對(duì)地形數(shù)據(jù)[3-4],其中通視分析常用算法主要通過(guò)判斷斜率和高程值來(lái)確定可視性,如Janus、Dyntacs、ModSAF、Bresenham算法等[3-7];視域分析算法主要有R2和R3算法、Xdraw算法、雙增量法和參考面法[3-9]。隨著3D GIS的發(fā)展,很多學(xué)者對(duì)三維場(chǎng)景中比較重要的房屋建筑等模型數(shù)據(jù)的可視性分析方法進(jìn)行了研究,如尹長(zhǎng)林等[10]提出了基于投影和高程差值等方法實(shí)現(xiàn)了城市三維場(chǎng)景中地形和建筑模型的可視性分析;周永望等[11]將LOS可視算法和平面視域算法擴(kuò)展到了立體視域計(jì)算中,并利用三維視球法建立了城市可視性衡量的指標(biāo)模型。靳海亮等[12]通過(guò)計(jì)算投影區(qū)和視錐體底面的差集實(shí)現(xiàn)了三維城市的可視域分析。
以上方法沒(méi)有或較少考慮到三維場(chǎng)景中的其他數(shù)據(jù),忽略了這些數(shù)據(jù)的影響會(huì)導(dǎo)致相應(yīng)的三維場(chǎng)景可視性分析結(jié)果出現(xiàn)偏差。本文基于一種改進(jìn)的射線與三角形面求交算法,可以對(duì)三維場(chǎng)景下多種影響因素的數(shù)據(jù)進(jìn)行通盤考慮,有效實(shí)現(xiàn)三維場(chǎng)景下的通視分析、視域分析及可視球等可視性分析,并對(duì)多視點(diǎn)的視域分析結(jié)果的定量化進(jìn)行了探索。
在三維場(chǎng)景中,可以將視線看成一條射線,這樣只需判斷射線在到達(dá)目標(biāo)點(diǎn)之前是否與場(chǎng)景的其他對(duì)象有交點(diǎn),有交點(diǎn)則不可視,反之則可視。射線與三維場(chǎng)景的求交計(jì)算最終可以歸結(jié)為射線與構(gòu)成場(chǎng)景模型的三角形面的求交[13]。實(shí)際分析中,該算法涉及大量多余的射線與三角形面求交,導(dǎo)致不必要的計(jì)算。因此,本文基于軸對(duì)齊包圍盒和投影技術(shù)對(duì)求交算法進(jìn)行改進(jìn),算法通過(guò)剔除多余的三角形面片,篩選出需要進(jìn)行求交的三角形面,盡可能地減少了求交次數(shù)以提高效率。
(1)
將一個(gè)三角形Q用三個(gè)頂點(diǎn)來(lái)表示,即Q{V1,V2,V3},則三角形內(nèi)的任意一點(diǎn)都可以由以下方程式表示:
Q(a,b,c)=aV1+bV2+cV3
(2)
式中,a+b+c=1時(shí),(a,b,c)又稱為三角形Q的重心坐標(biāo),由于a=1-(b+c),因此常用(b,c)來(lái)表示重心坐標(biāo),將公式(1)代入公式(2)中就可以得到射線與三角形Q的交點(diǎn)方程:
(3)
如果0≤b≤1,0≤c≤1并且b+c≤1,那么交點(diǎn)位于三角形內(nèi),否則位于三角形外。射線與三角形面相交示意圖如圖1所示。
圖1 射線與三角形面相交示意圖Fig.1 Schematic diagram of ray intersecting with triangle surface
如果空間線段與三角形面相交,則二者在任意面上的投影有交點(diǎn);反之,如果空間線段在某個(gè)面上的投影與三角形面在此面上的投影沒(méi)有交點(diǎn),則二者不相交。因此,可以通過(guò)判斷構(gòu)成視線的線段與構(gòu)成場(chǎng)景模型的三角形面在水平面(xy面)和垂直面(xz面和yz面)上的投影是否有交點(diǎn),剔除多余的三角形面,提高求交計(jì)算的效率。
為方便計(jì)算,采用包含對(duì)象且平行于坐標(biāo)軸的最小六面體來(lái)代替空間三角形面進(jìn)行投影。該最小六面體稱為軸對(duì)齊包圍盒,即“AABB包圍盒”。其構(gòu)造簡(jiǎn)單,儲(chǔ)存空間小,便于計(jì)算。
篩選三角形面的算法流程圖如圖2所示。
基于AABB包圍盒的投影算法如圖3所示。其中O為視點(diǎn),P為目標(biāo)點(diǎn),ABC為空間三角形。三角形ABC的AABB包圍盒可以用體對(duì)角線的兩個(gè)頂點(diǎn)來(lái)表示,即(xmin,ymin,zmin)和(xmax,ymax,zmax)。其中xmin為三角形ABC各頂點(diǎn)x坐標(biāo)的最小值,即xmin=min{xA,xB,xC};xmax為三角形ABC各頂點(diǎn)x坐標(biāo)的最大值,即xmax=max{xA,xB,xC}。ymin,ymax,zmin,zmax的值同理。
圖2 三角形面的篩選流程Fig.2 Process of screening trianglessurface
圖3 基于AABB包圍盒的投影算法示意圖Fig.3 Schematic diagram of projection algorithm based on AABB bounding box
AABB包圍盒與線段OP在xy面上的投影分別為矩形R1R2R3R4和線段O′P′。其投影是否相交可以通過(guò)線段O′P′的兩個(gè)端點(diǎn)與矩形R1R2R3R4的關(guān)系來(lái)判斷。
線段O′P′兩個(gè)端點(diǎn)的坐標(biāo)分別為(x0,y0)和(xp,yp),矩形R1R2R3R4的端點(diǎn)坐標(biāo)為(xmix,ymax)(xmax,ymax)(xmax,ymix)和(xmin,ymin)。矩形R1R2R3R4可以將平面劃分為9個(gè)區(qū)域,分區(qū)情況如圖4所示,其中矩形R1R2R3R4的四條邊均屬于0區(qū)。
圖4 xy平面的分區(qū)情況示意圖Fig.4 Schematic diagram of partition in xy plane
線段的兩個(gè)端點(diǎn)與矩形的關(guān)系如下:
(1)線段有端點(diǎn)位于0區(qū),此時(shí)線段與矩形相交。
點(diǎn)(x,y)位于0區(qū)需滿足條件xmix≤x≤xmax,ymix≤y≤ymax。
(2)線段所有端點(diǎn)均不在0區(qū)。此時(shí),需要通過(guò)線段O′P′與矩形對(duì)角線R1R3和R4R2是否相交來(lái)判斷。如果不相交,線段完全在矩形外部;反之,線段相交且有一部分在矩形內(nèi)部。
如果兩線段相交,則兩線段必然相互跨立對(duì)方,即一條線段的兩個(gè)點(diǎn)要位于另一條線段的兩邊。線段與矩形對(duì)角線的關(guān)系如圖5所示,其是否相交滿足以下:
(4)
(5)
當(dāng)d1≤0或d2≤0時(shí),線段與矩形相交;反之,不相交。
圖5 線段與矩形對(duì)角線的關(guān)系示意圖Fig.5 Schematic diagram of relationship between line segment and rectangular diagonal
通視分析的基本原理是判斷觀察點(diǎn)到目標(biāo)點(diǎn)的視線之間是否存在物體遮擋,是視域分析的基礎(chǔ),其方法如下:
2.1.1 點(diǎn)與點(diǎn)通視分析
點(diǎn)與點(diǎn)通視分析步驟如下:
(1)在三維場(chǎng)景中取任一點(diǎn)O,根據(jù)觀察點(diǎn)的高度h求出觀察點(diǎn)O′的位置坐標(biāo)。
(2)在三維場(chǎng)景中取目標(biāo)點(diǎn)P,根據(jù)射線與三角形面的求交算法,用以O(shè)′為原點(diǎn)的射線O′P與三維場(chǎng)景進(jìn)行求交計(jì)算。如果求交結(jié)果為空,則點(diǎn)O′與點(diǎn)P間通視,連接線段O′P,并以綠色的線進(jìn)行繪制;如果求交結(jié)果不為空,且滿足O′最近的支點(diǎn)與O′的距離小于視線O′P的長(zhǎng)度,則點(diǎn)O′與點(diǎn)P間有遮擋,取離點(diǎn)O′最近的交點(diǎn)M,連接線段O′P并以綠色的線繪制出來(lái),表示可通視;連接線段MP并以紅色的線繪制出來(lái),表示不通視。
點(diǎn)與點(diǎn)通視分析結(jié)果如圖6所示。
圖6 點(diǎn)與點(diǎn)通視分析Fig.6 Visibility analysis of point to point
2.1.2 點(diǎn)與線通視分析
點(diǎn)與線的通視分析步驟如下:
(1)在三維場(chǎng)景中取任一點(diǎn)O,根據(jù)觀察點(diǎn)的高度h求出觀察點(diǎn)O′的位置坐標(biāo)。
(4)將點(diǎn)O′和R以開(kāi)放式圖形庫(kù)(Open Graphics Library,OpenGL)中GL_TRIANGLE_FAN的連接方式繪制出來(lái),將集合R′以O(shè)penGL中GL_TRIANGLE_STRIP的連接方式繪制出來(lái)。
點(diǎn)與線通視分析結(jié)果如圖7所示。
圖7 點(diǎn)與線通視分析Fig.7 Visibility analysis of point to line
2.1.3 點(diǎn)與面通視
點(diǎn)與面的通視則是研究某一個(gè)區(qū)域內(nèi)的通視情況,是計(jì)算觀察點(diǎn)可視的地形表面幾何的問(wèn)題。
視域分析按照視點(diǎn)的數(shù)目可以分為單視點(diǎn)視域分析和多視點(diǎn)視域分析兩類[3]。單視點(diǎn)視域分析是多視點(diǎn)視域分析的特殊情況,因此以多視點(diǎn)視域分析進(jìn)行說(shuō)明。
視域分析的基本思想是將整個(gè)測(cè)區(qū)范圍盡可能的細(xì)分,以點(diǎn)代面,那么視域分析就可以轉(zhuǎn)化為兩點(diǎn)之間是否可視的問(wèn)題。視域分析的結(jié)果就是視域范圍內(nèi)的所有點(diǎn)與觀測(cè)點(diǎn)通視性的集合。例如,某測(cè)區(qū)范圍內(nèi)有3個(gè)觀測(cè)站分別是觀測(cè)站1(X.8704°N,Y.7411°E)、觀測(cè)站2(X.8732°N,Y.7446°E)和觀測(cè)站3(X.8746°N,Y.7381°E),其中X為某整數(shù)且X∈[0,90),Y為某整數(shù)且Y∈[0,180)。觀測(cè)站的高度分別為8.0、5.0和6.0 m,觀測(cè)站的觀測(cè)半徑分別為480.0、450.0和500.0 m。對(duì)測(cè)區(qū)范圍內(nèi)的3個(gè)觀測(cè)站進(jìn)行多視點(diǎn)視域分析的流程如圖8所示。
3個(gè)觀測(cè)站的多視點(diǎn)視域分析的步驟如下:
(1)根據(jù)觀測(cè)站的觀測(cè)半徑計(jì)算3個(gè)觀測(cè)站所覆蓋的觀測(cè)范圍,并根據(jù)觀測(cè)范圍提取與其有交集的地形瓦片數(shù)據(jù)。
圖8 多視點(diǎn)視域分析的流程Fig.8 Process of viewshed analysis of multi viewpoints
(2)對(duì)瓦片數(shù)據(jù)中的每個(gè)網(wǎng)格按一定的順序進(jìn)行遍歷,按圖9所示剖分方式將每個(gè)網(wǎng)格進(jìn)行三角剖分,該剖分方式可以有效避免拉近或拉遠(yuǎn)場(chǎng)景導(dǎo)致的地形分辨率變化對(duì)視域分析結(jié)果的影響,計(jì)算三角形的包圍球的球心坐標(biāo)O。
圖9 瓦片中單個(gè)網(wǎng)格的剖分方式Fig.9 Subdivision method of a single grid in Tiles
(3)獲取站點(diǎn)觀測(cè)范圍內(nèi)的三角形。即分別將每個(gè)觀測(cè)站到球心O的距離與觀測(cè)半徑進(jìn)行比較,如果大于半徑的值,則認(rèn)為包圍球所包含的三角形在觀測(cè)范圍之外;小于半徑的值,則三角形在觀察范圍之內(nèi)。如果沒(méi)有一個(gè)觀測(cè)站的觀測(cè)范圍包含這個(gè)三角形,則繼續(xù)遍歷其他的三角形按上述方式繼續(xù)判斷是否在觀測(cè)范圍內(nèi)。
(4)對(duì)于在某一觀測(cè)站觀測(cè)范圍內(nèi)的三角形,將以其包圍球球心的坐標(biāo)代替這個(gè)三角形與觀測(cè)站進(jìn)行可視性判斷。如果球心與觀測(cè)站點(diǎn)的連線與場(chǎng)景沒(méi)有交點(diǎn),或離觀測(cè)站最近的交點(diǎn)到球心的距離小于包圍球的半徑的話,則認(rèn)為三角形區(qū)域?qū)τ谠撚^測(cè)站是可視的;否則,不可視。
(5)將三角形與各個(gè)觀測(cè)站進(jìn)行可視性判斷之后,如果只有1個(gè)觀測(cè)站與其通視,則三角形的顏色值為綠色,表示為某一觀測(cè)站所單獨(dú)可視;如果有大于等于2的觀測(cè)站與其通視,則三角形的顏色值為黃色,表示為多個(gè)觀測(cè)站所共同可視;如果沒(méi)有觀測(cè)站與其通視,則三角形的顏色值為紅色,表示沒(méi)有觀測(cè)站能夠觀測(cè)到。
(6)將三角形按照有關(guān)參數(shù)(顏色值、屬于哪個(gè)測(cè)站等)分類存儲(chǔ)起來(lái),并以.txt文檔的形式輸出。
(7)遍歷其他的三角形按(3)中所述方式判斷每個(gè)三角形的可視情況,直到遍歷瓦片的所有三角形。
3個(gè)觀測(cè)站的多視點(diǎn)視域分析的實(shí)現(xiàn)結(jié)果如圖10所示。
對(duì)于上述視域分析的結(jié)果,可以通過(guò)計(jì)算三角形的面積來(lái)求出3個(gè)觀測(cè)站所有可視區(qū)域的面積(圖10中綠色標(biāo)記區(qū)域與黃色標(biāo)記區(qū)域的面積之和)、所有不可視區(qū)域的面積(圖9中紅色標(biāo)記區(qū)域的面積)和公共可視區(qū)域的面積(圖9中黃色標(biāo)記區(qū)域的面積)。對(duì)于每一觀測(cè)站而言,可以求出這個(gè)觀測(cè)站的可視范圍的面積、不可視范圍的面積以及與它有公共可視范圍的觀測(cè)站數(shù)目、觀測(cè)站名稱和公共可視域的面積,實(shí)現(xiàn)了可視域分析結(jié)果的定量統(tǒng)計(jì)。結(jié)果可以.txt文檔的形式輸出。
表1 整個(gè)觀測(cè)區(qū)視域分析結(jié)果(單位:m2)
表2各觀測(cè)站視域分析的定量化結(jié)果(單位:m2)
Table 2Quantitative results of each observation station’s visibility results (unit:m2)
分析結(jié)果觀測(cè)站名稱各測(cè)站可視面積各測(cè)站不可視面積各觀測(cè)站的公共可視情況個(gè)數(shù)觀測(cè)站名稱公共可視面積觀測(cè)站1435 190314 1181觀測(cè)站341 557.3 觀測(cè)站2328 094325 5371觀測(cè)站333 459.8 觀測(cè)站3173 156628 1252觀測(cè)站141 557.3觀測(cè)站233 459.8
綠色為可視區(qū)域、紅色為不可視區(qū)域,黃色為公共可視區(qū)域圖10 多視點(diǎn)視域分析結(jié)果舉例Green: visible area, red: invisible area,yellow: public visible areaFig.10 Viewshed analysis of multi viewpoints
觀測(cè)區(qū)域視域分析的定量化結(jié)果如表1所示,各個(gè)觀測(cè)站視域分析的定量化結(jié)果如表2所示。
可視球是某一視點(diǎn)以一定的可視距離在空間任意方向上通視情況的集合。利用求交算法實(shí)現(xiàn)可視球的基本思路是在水平觀測(cè)方向和垂直觀測(cè)方向上內(nèi)插求交線段,分別在這兩個(gè)方向上進(jìn)行求交計(jì)算。垂直方向上記錄每條線段與場(chǎng)景的第一個(gè)交點(diǎn),并連線形成可視球的經(jīng)線。水平方向上記錄相同垂直觀測(cè)角的每條線段與場(chǎng)景的第一個(gè)交點(diǎn),并連線形成可視球的緯線。若線段與場(chǎng)景無(wú)交點(diǎn),僅在一定整數(shù)觀測(cè)角時(shí)繪制經(jīng)緯線。本文在三維場(chǎng)景中任選取一點(diǎn)作為視點(diǎn),以可視距離為50 m進(jìn)行可視球分析,實(shí)現(xiàn)結(jié)果如圖11所示。
圖11 可視球Fig.11 Viewsphere
本文針對(duì)三維場(chǎng)景中的可視性分析所用到的射線與三角形面求交的算法以及實(shí)現(xiàn)各個(gè)可視性分析的方法進(jìn)行了研究,并基于改進(jìn)算法篩選多余三角形,提高求交效率,實(shí)現(xiàn)了通視分析、視域分析、可視球等分析,為三維場(chǎng)景下的可視性分析提供了可行的方案。同時(shí),研究了多視點(diǎn)視域分析的問(wèn)題,基于分塊求交的思想,細(xì)分測(cè)區(qū),將視域分析轉(zhuǎn)化成兩點(diǎn)之間的通視問(wèn)題,實(shí)現(xiàn)了多視點(diǎn)視域分析的可視化,并對(duì)分析結(jié)果按照整個(gè)觀測(cè)區(qū)域和各觀測(cè)站的可視情況進(jìn)行分類統(tǒng)計(jì)。分析結(jié)果明確了可視面積、不可視面積以及公共可視面積的情況,為森林防火瞭望塔等的選址決策提供了有力的參考。