当前位置:首页 > 面向对象的三维矢量GIS 数据模型及拓扑关系的建立
http;//www.othermap.com测绘信息网
面向对象的三维矢量GIS数据模型及
拓扑关系的建立
孙 敏① 唐小明② 赵仁亮① (①中南工业大学资环建院 410083) (②中国林业科学院资源信息所 100091)
【摘 要】 本文针对三维GIS拓扑空间关系的复杂性,提出了以表为基本单元的面向对象的数据模型,这种数据模型能表达网状的空间拓扑关系,较直观地反映了三维GIS中复杂的空间拓扑关系。文中还对这种结构的拓扑关系和空间数据库的动态建立作了说明。 http;//www.othermap.com测绘信息网 一、引 言
到目前为止,三维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过渡也较易实现。
http;//www.othermap.com测绘信息网
二、面向对象三维矢量GIS数据结构
按面向对象程序设计的风格,对每一个基本元素定义一个类,拓扑关系包含在类的成员变量及成员函数中。这样程序设计中只针对每个元素,运用其成员变量,编写其成员函数,程序通过调用其成员函数即可实现拓扑关系的自动建立。用Visual C++可写出三维矢量GIS数据模型如下:http;//www.othermap.com测绘信息网
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 //定义结点元素类,由基础点元素派生http;//www.othermap.com测绘信息网 {
LINELIST m-lines;// 定义一个线表用来管理以该点为结点的线元素
??其他成员变量及成员函数。 }; class CBaseLine // 定义基础线元素类 {
POINTLIST m-points;//定义一个表结构用来管理构成线元素的所有点元素。
POINTLIST m-nodPoints;//定义一个表结构用来管理该线元素的结点;
??其他成员变量及成员函数。};
class CnodLine: CBaseLine //定义结线元素类,由基础线类派生 {
POLYLIST m-poly;//定义一个表结构用来管理以该线作为邻边的面元素。http;//www.othermap.com测绘信息网 ??其他成员变量及成员函数。}; class Cpoly ///定义面元素类 {
LINELIST m-lineList;//定义一个表结构用来管理构成该面元素的所有线元素。
LINELIST m-lineList2;//定义一个表结构用来管理该面元素的所
http;//www.othermap.com测绘信息网
有边线元素。http;//www.othermap.com测绘信息网
LINELIST m-nodLineList;//定义一个表结构用来管理该面元素的所有结线。
POINTLIST m-pointList;//定义一个表结构管理用来生成该面元素的所有点元素。
FORMLIST m-forms;//定义一个表结构用来管理以该面元素为邻面的体。
??其他成员变量及成员函数。}; class Cform ///定义体元素类 {
POLYLIST m-polyList;//定义一个表结构用来管理构成该形体的所有面元素。
POLYLIST m-nodPolyList;//定义一个表结构用来管理该形体的所有公用面元素。
TREELIST m-WeightPoint; //定义一个树形结构用来管理不均匀体中的插值点;http;//www.othermap.com测绘信息网 ??其他成员变量及成员函数。};
以上表结构用来保存指针,通过表结构中的这种指针来表达空间拓扑关系。
从上面的定义可以看出,每个基本元素类中包含了构成它的基本元素,也包含了由它构成的更高一级的元素。很显然上面所描述的是一个具有网状关系的数据模型,如图1所示。
图 1
“构成”是指上一级元素由下一级元素组成,“结线”是指多个面以此线为公共交线,“公共面”是指相邻两个体元素以此面作为公用面。“按算法生成”是指在许多情况下,一个曲面由输入的线生成比较困难,而由点如用TEN(四面体格网)进行构造生成一个曲面。“插值”是对不均匀体按已有点进行插值用来表达不均匀体的空间特性,这些点按相邻关系连接组成一个空间树形。http;//www.othermap.com测绘信息网
三、拓扑关系的构造及生成原理
上面所给出的数据结构中,反映出的基本拓扑关系如下: 点线关系(点为线结点,线由点构成);点面关系(面由点通过算法生成,面包含点);线面关系(面由线拟合生成,线为面的结线);面体关系
http;//www.othermap.com测绘信息网
(体由面构成,面为多体公用面)。隐含的关系有:线与线关系(多线共用结点——相交);面与面关系(多面共用结线——相交);体与体关系(多体相邻或包含)。http;//www.othermap.com测绘信息网
这些关系基本上能全面反映已有的空间拓扑关系,由于以点、线、面、体基本对象构建,故适合于面向对象的空间操作与分析。按上面数据模型有如下拓扑关系自动构建过程,(以输入数据为例,基本元素通过指针操作而非普通变量):
到目前为止按矢量的方式,人们输图时是以点为基本元素输入的,因而在建立拓扑关系之前,已有的基本元素只有点,所以拓扑关系的自动建立由点元素开始(在这里仍然沿用图层的概念,同一类元素看作一层,并以层来管理同一类元素)。 1.点的输入
每输入一个点,如属于某个面,按坐标点类处理并在其关系表中加入特征值或编码值,也可以是预先给定的面的编号,如属于某条线则进行线的生成。 2.线的生成
加入一个新点,将此点加入到线的点表中,起点和终点作为结点加入到线的结点表中。http;//www.othermap.com测绘信息网 3.线线关系的建立
每生成一个新线,与已有的所有可能相交的线进行求交计算:交点作为结点加入到有关线的结点表中,新线也加入到有关结点类元素的线表中。
4.面的生成
对于规则的面(如平面)按二维处理。对于不规则的面,由一系列点按一定算法生成(用分块B样条曲面合成法或分块Bezier曲面合成法,也可以用多曲线拟合法(适于直接由二维GIS中已有的等值线构造曲面)),生成后的曲面再进行填充、光照效果等处理后即可用来较真实地反映三维GIS中曲面实体。 5. 线面关系的建立
显然通过面的生成,如果线在一个面内,线面关系已经存在;当一条线不属于某一个面时则要进行线面关系的处理。经过复杂的计算可以确立如相交、相离等关系。对这种复杂关系使用相应的成员函数动态地建立相应的关系表(对已有的拓扑关系进行进一步完善)。 6.面面关系的建立http;//www.othermap.com测绘信息网
确立面面关系,主要是进行面面求交计算,得到新面与结线。在结线的面表中加入有关面元,在面元的结线表中加入有关线,这样进一步确立了线面关系,也得到了面面关系。 7. 体的生成
类似于二维中面的生成,按算法搜索闭合空间即构成一个体元。体元生成后体与面的关系也已经存在。这时可以进行体与体之间的拓扑关系(如包含关系)的生成。这里体的搜索按空体进行,对于实体用填充方法由空体得到。http;//www.othermap.com测绘信息网
四、空间数据库的建立
共分享92篇相关文档