张啸雷,王冬
(1.天津市公安局经济技术开发区分局,天津 300457; 2.天津市测绘院,天津 300381)
从 20世纪 80年代末以来,由于二维地理信息系统将实际的三维事物采用二维的方式表示,具有很大的局限性,大量的多维空间信息无法得到利用,这就需要研究三维地理信息系统,于是三维地理信息系统成为GIS领域中的一个研究热点。而三维地理信息系统的实现必须首先解决场景可视化问题,其中房屋作为场景中重要的组成部分,它的可视化建模技术的发展和研究一直很引人关注。
使用常用的三维可视化开发工具,如Direct3D、Java3D、VRML和OpenGL等进行三维GIS的实现时,都需要从底层编写代码,工作量巨大,而且通常功能上不能满足实际需要。ESRI公司基于COM技术构建的ArcEngine是一套强大的GIS二次开发组件库,使用户可以根据需要对原有的系统软件功能进行功能扩展,其中的扩展模块ArcScene模块完全可以实现三维GIS的开发。用其进行二次开发,一方面可简化代码的编写;另一方面它的代码执行速度快,占用内存小,所以越来越得到三维地理信息系统应用开发者的青睐 。
ArcGIS 3D分析模块是ArcEngine组件的一部分,它内含3D对象模型、3D几何模型以及3D Viewer对象,其核心应用是ArcScene。同时它支持具有Z值的几种3D几何要素,点(Point)、线(Line)、面(Polygon)和多面片(MultiPatch)。其中多面片是由三角条带(Triangle Strip)、三角扇(Triangle Fan)和环(Ring)组成,整个面片是由二维平面图形向 Z方向拉伸而形成。因此可以方便地将原有的ArcGIS地理信息数据增加三维Z值数据然后在ArcScene中实现三维GIS的功能。
图1 ArcScene 3D对象模型
图1中的SceneGraph对象主要用来处理3D可视化,如:实现3D图形绘制方法、管理不同Viewer中的渲染、为方便快速绘制而管理内部的缓存、为交互操作优化性能等;Viewer对象主要实现影像的导出和快照等;Camera对象则定义了每个Viewer的视角方向和位置。
通常,要实现三维GIS,都要从数据准备开始进行。将三维GIS需要表现的数据分为两类:分别是三维地形数据和三维管线数据。
在系统的实现过程中,如果将全部的二维地理信息数据都实现三维转换,不仅需要很长的转换时间,而且三维地理信息浏览的过程中由于数据量和运算量巨大,导致系统运行速度缓慢。因此在三维 GIS的实现时采用了较实用的方法,先在传统GIS系统中进行地理信息数据操作,然后对目标区域进行选择生成三维地理信息数据,进而实现三维GIS功能。
如图2是三维GIS的实现过程:
图2 三维GIS的实现过程
通常,三维地形的实现主要采用模拟的形式来实现,比如房屋建筑数据通过系统的楼层等属性来虚拟出房屋的大概高度,植被数据通过生成三维符号,然后用三维符号来表示。
(1)三维房屋的实现
ArcScene中提供了面片(MultiPatch)、三角条带(TriangleStrip)对象建模。由此可以利用这些对象来构建房屋模型。其中一个最简单的三维房屋模型是一个火柴盒式的六面体,在利用ArcScene建立三维房屋模型时,建筑物的各个面是由不规则三角形组成,即构成墙体的多面片(MultiPatch)是由三角条带(TriangleStrip)组成的。建立的房屋模型是由底面、几个墙体侧面和房顶组成。
具体实现步骤是:根据选择的二维地面数据图层中的房屋数据,取得这些房屋的楼层数属性,根据楼层假设一个单层楼层的高度值,然后用楼层数乘以单层楼高,即获得该房屋的高程(Z值),如:一个5层的房屋,假定一层为 3 m,最后系统将算得的 15m存入三维数据的Z值;接下来将该房屋的二维面(Polygon)图形作为建筑物的底面,根据 Z方向的拉伸值将各个边拉伸,拉伸后形成的面为墙体,最后为建筑物创建一个平的房顶;为了使建筑模型更有真实感,可以将拍摄的纹理贴在建筑物的表面。
(2)三维植被的实现
ArcScene本身提供丰富的符号库支持,而且还可以在ArcScene中导入利用3DMax等三维建模工具建立的三维模型,利用这一特性,可以将各种二维地理信息数据用三维符号表示。植被,水系等具有类别性质的地理信息数据就可以用代表性强的三维模型和符号来表示。
三维植被的实现步骤比较简单,根据植被的点或者面的特性,分别配置不同的三维符号,如:在行树这类数据中,可以根据数据的属性,分别为不同种类的行树配置不同的符号,属性是杨树的可以配置一类符号,属性是松树的可以再配置一类符号。例如:用图 3来表示杨树,用图 4来表示松树。
图3 杨树3D符号
图4 松树 3D符号
三维地形数据的实现结果如图 5所示。
图5 三维地形的实现
三维管线的生成是一个复杂的工作,由于管线的埋设方式分为两类:一类为直接埋设,例如污水管线;另一类为管沟埋设,例如电信管线。因此,在选择管线三维显示方式时,应先判断管线的埋设方式。对于直埋方式的管线,由于要求不高,所以可用圆柱体代替,在ArcScene中直接选择相应的线型圆柱符号即可。而对于管沟埋设的方式管线,如在系统中的电信管线,由于采用的是方管,在ArcScene中没有直接的符号可以用,因此需要自己生成。
三维管线的实现主要是通过向二维管线数据中添加三位高程值Z值来实现的。
(1)直埋式管线的实现
在系统中为直埋式管线设定了线型圆柱符号,但是在系统中还需要将管径这一属性进行视觉表达,因此用分类符号渲染的方法对管线进行不同粗细的渲染。如下是实现管线分类渲染的方法:
首先定义分类渲染接口,然后设定每种分类线型符号,如管径,颜色等值,最后利用分类渲染接口,将这些不同类的管线进行分类渲染。三维显示效果如图 6所示。
图6 三维管线图
(2)电信管线的实现
由于电信管线的线型采用方管,在ArcScene中没有直接的符号可以利用,需要进行动态生成。
首先,可以得到管线的三维坐标,比如:直线(X1, Y1,Z1)-(X2,Y2,Z2)。
然后,将该三维管线的三维坐标作方管的地中心线,按照方形的对角线方向分别平移,一条线的两个坐标,经过平移后得到 4条新线,这 4条新线分别是方管的4条边,例如新生成的 4条边的坐标为:(设方管的半径为:r)
第1条:(X1+r/2,Y1,Z1+r/2)-(X2+r/2,Y2,Z2+r/2)
第2条:(X1+r/2,Y1,Z1-r/2)-(X2+r/2,Y2,Z2-r/2)
第3条:(X1-r/2,Y1,Z1+r/2)-(X2-r/2,Y2,Z2+r/2)
第4条:(X1-r/2,Y1,Z1-r/2)-(X2-r/2,Y2,Z2-r/2)
最后由平移的坐标分别生成方管的 4个面,在系统中的视觉看到的方管其实就是4个方管的三维面组成的。
经计算生成的方管显示效果如图 7所示,绿色管为电信管线。
图7 三维管线图电信管线
在实际的项目实现过程中,通过二维GIS选定目标区域,然后进行三维渲染,利用上面介绍的方法很好解决了由于大范围显示三维场景而导致的系统速度缓慢的问题。利用ArcScene已有的功能快速实现三维场景的建造,对于ArcScene没有的功能,可以采用其他的方法来实现,上面介绍的电信管线的实现仅仅是一个简单的示例。总之,实现一套完整的三维GIS是一项很庞大的工程,需要更多的努力,采用更新的技术来最终实现真正的三维系统。
[1] 李清泉,严勇,杨必胜等.地下管线的三维可视化研究[J].武汉大学学报(信息科学版),2003(03)
[2] 郑淑荣,杨国东.信息系统中三维管线的显示问题探讨[J].现代测绘,2003(6)
[3] 朱庆.三维动态交互式可视化模型[J].武汉测绘科技大学学报,1998,23(2):124~127
[4] 肖乐斌,钟耳顺,刘纪远等.三维 GIS的基本问题探讨[J].中国图像图形学报,2001(09)