三维模型

目前随着计算机技术的飞速发展和计算机图形学理论的日趋完善,GIS作为一门新兴的边缘学科也日趋成熟,许多商品化的GIS软件功能日趋完善。但是,绝大多数的商品化GIS软件包还只是在二维平面的基础上模拟并处理现实世界上所遇到的现象和问题,而一旦涉及到处理三维问题时,往往感到力不从心,GIS处理的与地球有关的数据,即通常所说的空间数据,从本质上说是三维连续分布的。从事关于地质、地球物理、气象、水文、采矿、地下水、灾害、污染等方面的自然现象是三维的,当这些领域的科学家试图以二维系统来描述它们时,就不能够精确地反映、分析或显示有关信息。三维GIS的要求与二维GIS相似,但在数据采集、系统维护和界面设计等方面比二维GIS要复杂得多。

三维GIS的功能

目前,三维GIS所研究的内容以及实现的功能主要包括:

  1. 数据编码:是采集三维数据和对其进行有效性检查的工具,有效性检查将随着数据的自然属性、表示方法和精度水平的不同而不同。

  2. 数据的组织和重构:这包括对三维数据的拓扑描述以及一种表示法到另一种表示法的转换(如从矢量的边界表示转换为栅格的八叉树表示)。

  3. 变换:既能对所有物体或某一类物体,又能对某个物体进行平移、旋转、剪裁、比例缩放等变换。另外还可以将一个物体分解成几个以及将几个物体组合成一个。

  4. 查询:此功能依赖于单个物体的内在性质(如位置、形状、组成)和不同物体间的关系(如连接、相交、形状相似或构成相似)。

  5. 逻辑运算:通过与、或、非及异或运算符对物体进行组合运算。

  6. 计算:计算物体的体积、表面积、中心、物体之间的距离及交角等。

  7. 分析:如计算某一类地物的分布趋势,或其它指标,以及进行模型的比较。

  8. 建立模型

  9. 视觉变换 :在用户选择的任何视点,以用户确定的视角、比例因子、符号来表示所有地物或某些指定物体。

  10. 系统维护 :包括数据的自动备份、安全性措施、以及网络工作管理。

三维数据结构

三维数据结构同二维一样,也存在栅格和矢量两种形式。栅格结构使用空间索引系统,它包括将地理实体的三维空间分成细小的单元,称之为体元或体元素。存储这种数据的最简单形式是采用三维行程编码,它是二维行程编码在三维空间的扩充。这种编码方法可能需要大量的存储空间,更为复杂的技术是八叉树,它是二维的四叉树的延伸。三维矢量数据结构表示有多种方法,其中运用最普遍的是具有拓扑关系的三维边界表示法和八叉树表示法。

八叉树三维数据结构

用八叉树来表示三维形体,既可以看成是四叉树方法在三维空间的推广,也可以是用三维体素列阵表示形体方法的一种改进。八叉树的逻辑结构如下:假设要表示的形体V可以放在一个充分大的正方体C内,C的边长为2的n次方,形体VC,它的八叉树可以用以下的递归方法来定义:八叉树的每个节点与C的一个子立方体对应,树根与C本身相对应,如果V=C,那么V的八叉树仅有树根,如果V不等于C,则C等分为八个子立方体,每个子立方体与树根的一个子节点相对应。只要某个子立方体不是完全空白或完全为V所占据,就要被八等分,从而对应的节点也就有了八个子节点。这样的递归判断、分割一直要进行到结点所对应的立方体或是完全空白,或者是完全为V占据,或是其大小已是预先定义的体素大小,并且对它与V之交作一定的“舍入”,使体素或认为是空白的,或认为是V占据的。

如此所生成的八叉树上的节点可分为三类:

  1. 灰节点 ,对应的立方体部分地为V所占据;

  2. 白节点 ,所对应的立方体中无V的内容;

  3. 黑节点,所对应的立方体全为V所占据。

后两类又称为叶结点。由于八叉树的结构与四叉树的结构是非常相似的,所以八叉树的存储结构方式可以完全沿用四叉树的有关方法。根据不同的存储方式,八叉树也可以分别称为常规的、线形的、一对八的八叉树等等。

规则的八叉树

八叉树的存储结构是用一个有九个字段的记录来表示树中的每个结点,其中一个字段用来描述该结点的特性,其余的八段用来作为存放指向其八个子结点的指针。这是最普通使用的表示树形数据的存储结构方式。规则八叉树缺陷较多,最大的问题是指针占用了大量的空间。因此,这种方式虽然十分自然,容易掌握,但在存储空间的使用率方面不很理想。

线形八叉树

线形八叉树注重考虑如何提高空间利用率,用某一预先确定的次序遍历八叉树,将八叉树转换成一贯线形表,表的每个元素与一个结点相对应。线形八叉树不仅节省存储空间,对某些运算也较为方便。但是为此付出的代价是丧失了一定的灵活性,如图3-18和图3-19所示。

../../_images/img_110.png

体元形式的三维数据

../../_images/img_27.png

图3-18的线性八叉树编码

一对八式的八叉树

一个非叶结点有八个子节点,为了确定起见,将它们分别标记为0,1,2,3,4,5,6,7。从上面的介绍可以看到,如果一个记录与一个结点相对应,那么在这个记录中描述的是这个结点的八个子结点的特征值。而指针给出的则是该八个子结点所对应记录的存放处,而且还隐含地假设了这些子结点记录存放的次序。也就是说,即使某个记录是不必要的,那么相应的存储位置也必须空闲在那里,以保证不会错误地存取到其它同辈结点的记录。这样当然会有一定的浪费,除非它是完全的八叉树,即所有的叶结点均在同一层次出现,而在该层次之上的所有层中的结点均为非结点。为了克服这种缺陷,一是增加计算量,即在存取相应结点记录之前,首先检查它的父结点记录,看一下之前有几个叶结点,从而可以知道应该如何存取所需结点记录。这种方法的存储需求无疑是最小的,但是要增加计算量;另一个是在记录中增加一定的信息,使计算工作适当减少或者更方便。例如在原记录中增加三个字节,一分为八,每个子结点对应三位,代表它的子结点在指针指向区域中的偏移。因此,要找到它的子结点的记录位置,只要固定地把指针指向的位置加上这个偏移值(0-7)乘上记录所占的字节数,就是所要的记录位置,因而一个结点的描述记录为:

偏移

指针

SWB

SWT

NWB

NWT

SEB

SET

NEB

NET

用这种方式所得到的八叉树和以前相同,只是每个记录前多了三个字节。

三维数据的显示

三维显示通常采用截面图、等距平面、多层平面和立体块状图等多种表现形式,大多数三维显示技术局限于CRT屏幕和绘图纸的二维表现形式,人们可以观察到地理现象的三维形状,但不能将它们作为离散的实体进行分析,如立体不能被测量、拉伸、改变形状或组合。借助三维显示技术,通过离散的高程点形成等高线图、截面图、多层平面和透视图,可以把这些最初都是人工完成的工作,用各种计算机程序迅速高效地完成。图3-20给出了一种三维数据的表示方法。

../../_images/img_35.png

通过“围墙”状的剖面表示三维数据