三維矢量GIS數據模型的建立
一、引 言
到目前為止,三維GIS一直處于理論研究階段,雖然有三維GIS系統問世,但其功能遠遠不能滿足人們分析問題的需要,原因主要是三維GIS理論不成熟,其拓撲關系模型一直沒有解決,另外三維基礎上的數據量十分大,很難建立一個有效的,易于編程實現的三維模型。采用什么樣的數據模型對GIS空間拓撲關系的建立以及空間分析與操作至關重要。隨著在許多行業諸如煤炭、地質、石油、礦山、城市地下管網、城市空間規劃等對三維GIS的需求日益迫切,三維GIS數據模型理論近來受到許多學者的關注,在八叉樹與三維邊界表示法基礎上提出了如基于八叉樹與TIN的混合結構[1]、八叉樹與TEN的混合結構[2]、面向對象的矢量與柵格一體化結構[3]以及其他結構[4],盡管這些結構在理論上有很大的進展,但實現較困難,也難以與已有的二維GIS兼容。基于八叉樹結構的缺點在于指針占用存貯空間大,重編碼費時長且精度低,不宜于表示線面對象。而三維GIS中的矢量與柵格一體化在目前實現有相當的困難,且目前所提出的模型的可行性有待檢驗。三維GIS要比二維GIS復雜得多,如果GIS中拓撲空間基本元素分為點、線、面,那么在二維空間的GIS中,GIS的主要元素點、線、面同處于一個平面上,點的第三維坐標(高程)作為一個屬性值輸入,且一個面的描述只用其周邊即可確定。而在三維GIS中,面元素不再只是平面,而可能是極不規則的空間曲面。描述一個面元素不能再只用其邊線。面的生成與描述要用較復雜的方法,如用TIN、TEN或分塊Bezier曲面、分塊B樣條曲面合成的方法(后兩種算法適合于大面積較規則的曲面)。因而一個能直觀、全面、清晰地表達三維GIS中復雜的拓撲關系,并能簡捷地完成三維GIS空間數據分析和操作的數據模型成了人們研究探討的核心。這里筆者針對三維GIS拓撲空間的復雜性,提出一種面向對象的三維GIS空間矢量網狀數據模型,它以鏈表作為基本結構,把點、線、面、體看作是三維GIS的基本元素,以每個元素為對象設計數據結構。這種結構由面向對象的二維GIS發展而來,符合人們處理GIS基本元素對象的習慣,能較直觀自然地表達三維GIS中各個對象間的拓撲關系,由面向對象的二維GIS系統向面向對象的三維GIS過渡也較易實現。
二、面向對象三維矢量GIS數據結構
按面向對象程序設計的風格,對每一個基本元素定義一個類,拓撲關系包含在類的成員變量及成員函數中。這樣程序設計中只針對每個元素,運用其成員變量,編寫其成員函數,程序通過調用其成員函數即可實現拓撲關系的自動建立。用Visual C++可寫出三維矢量GIS數據模型如下:
class CBasePoint //定義A基礎點元素類
{
struct point{ float x;//X坐標 浮點型32位
float y;//Y坐標 浮點型32位
float z;//Z坐標 浮點型32位
}point-element;//定義點類的坐標結構
……其他成員變量及成員函數。 };
class CorPoint:CBasePoint //定義坐標點元素類,由基礎點元素派生
{
Cpoly m-poly;//定義一個面元素變量標識該點的歸屬,用來在輸入點后生成面
……其他成員變量及成員函數。 };
class CnodPoint:CBasePoint //定義結點元素類,由基礎點元素派生
{
LINELIST m-lines;// 定義一個線表用來管理以該點為結點的線元素
……其他成員變量及成員函數。 };
class CBaseLine // 定義基礎線元素類
{
POINTLIST m-points;//定義一個表結構用來管理構成線元素的所有點元素。
POINTLIST m-nodPoints;//定義一個表結構用來管理該線元素的結點;
……其他成員變量及成員函數。};
class CnodLine: CBaseLine //定義結線元素類,由基礎線類派生
{
POLYLIST m-poly;//定義一個表結構用來管理以該線作為鄰邊的面元素。
……其他成員變量及成員函數。};
class Cpoly ///定義面元素類
{
LINELIST m-lineList;//定義一個表結構用來管理構成該面元素的所有線元素。
LINELIST m-lineList2;//定義一個表結構用來管理該面元素的所有邊線元素。
LINELIST m-nodLineList;//定義一個表結構用來管理該面元素的所有結線。
POINTLIST m-pointList;//定義一個表結構管理用來生成該面元素的所有點元素。
FORMLIST m-forms;//定義一個表結構用來管理以該面元素為鄰面的體。
……其他成員變量及成員函數。};
class Cform ///定義體元素類
{
POLYLIST m-polyList;//定義一個表結構用來管理構成該形體的所有面元素。
POLYLIST m-nodPolyList;//定義一個表結構用來管理該形體的所有公用面元素。
TREELIST m-WeightPoint; //定義一個樹形結構用來管理不均勻體中的插值點;
……其他成員變量及成員函數。};
以上表結構用來保存指針,通過表結構中的這種指針來表達空間拓撲關系。
從上面的定義可以看出,每個基本元素類中包含了構成它的基本元素,也包含了由它構成的更高一級的元素。很顯然上面所描述的是一個具有網狀關系的數據模型。
“構成”是指上一級元素由下一級元素組成,“結線”是指多個面以此線為公共交線,“公共面”是指相鄰兩個體元素以此面作為公用面。“按算法生成”是指在許多情況下,一個曲面由輸入的線生成比較困難,而由點如用TEN(四面體格網)進行構造生成一個曲面。“插值”是對不均勻體按已有點進行插值用來表達不均勻體的空間特性,這些點按相鄰關系連接組成一個空間樹形。
三、拓撲關系的構造及生成原理
上面所給出的數據結構中,反映出的基本拓撲關系如下:
點線關系(點為線結點,線由點構成);點面關系(面由點通過算法生成,面包含點);線面關系(面由線擬合生成,線為面的結線);面體關系(體由面構成,面為多體公用面)。隱含的關系有:線與線關系(多線共用結點——相交);面與面關系(多面共用結線——相交);體與體關系(多體相鄰或包含)。
這些關系基本上能全面反映已有的空間拓撲關系,由于以點、線、面、體基本對象構建,故適合于面向對象的空間操作與分析。按上面數據模型有如下拓撲關系自動構建過程,(以輸入數據為例,基本元素通過指針操作而非普通變量):
到目前為止按矢量的方式,人們輸圖時是以點為基本元素輸入的,因而在建立拓撲關系之前,已有的基本元素只有點,所以拓撲關系的自動建立由點元素開始(在這里仍然沿用圖層的概念,同一類元素看作一層,并以層來管理同一類元素)。
1.點的輸入
每輸入一個點,如屬于某個面,按坐標點類處理并在其關系表中加入特征值或編碼值,也可以是預先給定的面的編號,如屬于某條線則進行線的生成。
2.線的生成
加入一個新點,將此點加入到線的點表中,起點和終點作為結點加入到線的結點表中。
3.線線關系的建立
每生成一個新線,與已有的所有可能相交的線進行求交計算:交點作為結點加入到有關線的結點表中,新線也加入到有關結點類元素的線表中。
4.面的生成
對于規則的面(如平面)按二維處理。對于不規則的面,由一系列點按一定算法生成(用分塊B樣條曲面合成法或分塊Bezier曲面合成法,也可以用多曲線擬合法(適于直接由二維GIS中已有的等值線構造曲面)),生成后的曲面再進行填充、光照效果等處理后即可用來較真實地反映三維GIS中曲面實體。
5. 線面關系的建立
顯然通過面的生成,如果線在一個面內,線面關系已經存在;當一條線不屬于某一個面時則要進行線面關系的處理。經過復雜的計算可以確立如相交、相離等關系。對這種復雜關系使用相應的成員函數動態地建立相應的關系表(對已有的拓撲關系進行進一步完善)。
6.面面關系的建立
確立面面關系,主要是進行面面求交計算,得到新面與結線。在結線的面表中加入有關面元,在面元的結線表中加入有關線,這樣進一步確立了線面關系,也得到了面面關系。
7. 體的生成
類似于二維中面的生成,按算法搜索閉合空間即構成一個體元。體元生成后體與面的關系也已經存在。這時可以進行體與體之間的拓撲關系(如包含關系)的生成。這里體的搜索按空體進行,對于實體用填充方法由空體得到。
四、空間數據庫的建立
上面給出的結構似乎存在大量數據冗余,但實際上數據的存貯幾乎不存在冗余。這是由圖2所給出的存貯過程決定的(以一個體元的存貯過程為例說明)。
很明顯,這里建立的是一個網絡數據庫,一般網絡數據庫模型是用連接指令或指針來確定數據間的顯式連接關系的,因而數據間關系復雜時指針部分會占大量存貯空間。這是網狀數據庫的最大缺點。在本結構中在數據量不大時將32位指針以16位整數編號代替,可得到改善。事實上在關系數據庫中,關系表中都要建立記錄號,許多時候還要人為地加以編號,同樣占用大量的存貯空間,另外關系表本身難以表達完整的拓撲空間關系。在進行空間查詢時,在網狀數據庫中可以不進行操作運算,其存貯結構可以使查找從任一元素節點開始,存在唯一路徑,并以另一元素節點結束。
圖3為調查某林地地下水測得的含水層位置圖,由三個體元構成。按本文提出模型有表1、表2所示的存貯關系(限于篇幅不列出線元素及點元素)。
五、結束語
本文提出的數據模型可以清楚地描述三維GIS復雜的空間拓撲關系,該模型不再對三維GIS中的元素進行維數劃分,而以其類型劃分。在拓撲關系建立中均勻實體看作空體處理,不均勻實體看作是空體的填充,并以一個點樹來表達其不均勻性,這一點沿用二維GIS中多邊形填充的思想。這樣在以此數據模型構建的系統中GIS的基本元素就有點、線、面、體四種,數據的空間操作與分析以這些基本元素為單元進行,易于編程實現,且能較好地與已有面向對象的二維GIS兼容。在空間數據的存貯中也以這些基本元素為對象進行存貯,避免了數據的大量冗余。構建的網絡數據庫結構,很直觀地保存了空間拓撲關系,便于查詢與空間分析等操作。另外以面向對象的模型構建的系統本身具有良好的可持續發展性
聲明①:文章部分內容來源互聯網,如有侵權請聯系刪除,郵箱 cehui8@qq.com
聲明②:中測網登載此文出于傳遞更多信息之目的,并不意味著贊同其觀點或證實其描述,文章內容僅供參考。
加群提示:我們創建了全國32個省份的地方測繪群,旨在打造本地測繪同行交流圈,有需要請聯系管理員測小量(微信 cexiaoliang)進群,一人最多只能進入一個省份群,中介人員勿擾