APP下载

三维GIS符号化表达系统的设计与实现

2016-01-24毕玉玲李成名赵占杰

北京测绘 2016年2期
关键词:符号化漫游列表

毕玉玲 李成名 赵占杰

(1.华北计算技术研究所,北京100083;2.中国测绘科学研究院,北京100830)

1 引言

智慧城市阶段,对三维GIS的快速、高效、低成本构建提出了更严格的要求。三维GIS是指在计算机软硬件及虚拟现实技术的基础上,对三维空间数据进行提取、管理、处理等操作,实现三维GIS数据的可视化和三维空间分析,以便解决复杂的地学规划和决策问题[1]。

然而,目前三维GIS系统大多存在制作周期长、数据量巨大、渲染效率缓慢等缺点,究其原因是因为其采用建模软件制作场景模型,模型本身数据量庞大,影响了系统效率。而三维地理信息的符号化则是解决这一问题的一个有效手段[2]。符号化后的三维数据不仅空间占比小,而且也可以在数据管理和空间分析方面进行标准化和规范化操作,而如何将这些三维符号化数据进行更好的表达,实现三维空间场景的操作及分析,研发三维GIS符号化表达系统,也成为智慧城市阶段三维GIS系统研究的重要方向。

本文就是在上述背景下,基于New Map三维符号化引擎,对三维GIS符号化表达系统的设计及实现,也从另一方面证明了三维符号化表达的可行性和可操作性。

2 系统总体设计

2.1 系统总体架构

系统总体设计采用单机系统,采用C++和C#语言开发,结合组件式GIS思想,将三维符号包含的功能模块集成为一个控件,形成最终GIS应用系统[3]。系统总体架构如图1所示。由下而上分为四层:

多源数据层包含二维矢量数据及纹理数据,其中二维矢量数据可以通过GDAL解析,得到用于自动生成道路、地下管网以及小区建筑的顶点数据和相关属性值;纹理数据用于三维符号参数化生成的纹理贴图。

依赖库提供场景渲染、三维符号参数化、场景漫游、矢量数据解析、栅格数据处理等操作,是三维GIS符号化引擎的基础,基于OSG、GDAL、OpenCV可以实现三维符号库的构建、二三维一体化以及各种常用的空间分析功能。

三维GIS符号化引擎是用于三维符号化表达的引擎平台,可以实现三维符号生成、二维数据符号化为三维符号数据(shp数据自动生成三维模型数据)、三维空间分析(缓冲区、通视性、可视域、距离、面积量算等)等功能。本文采用的是New Map三维符号化引擎。

三维GIS符号化表达系统是基于符号化引擎进行二次开发,搭建的用于符号化表达的系统。通过将引擎的动态库封装成ActiveX控件(osgSymbol Ax.ocx),使用C#语言调用相应的功能接口、编写系统界面,实现三维符号化表达系统。

2.2 三维符号化表达设计

三维符号化表达依据地理要素的形态特征及其空间分布特征,采用参数化及放样技术实现的三维符号库,进行场景的三维符号化表达,以证明符号化的有效性和通用性。三维符号化表达可以用于二三维一体化及场景规划,以实现道路、管线等数据自动生成以及各类空间要素的符号化表达。

2.2.1 二三维一体化

二三维一体化是指基于二维GIS数据自动生成三维模型数据,实现二三维关联显示,从而保证二三维数据在空间上的无缝衔接[4]。该符号化表达系统可以实现道路、管网以及建筑底图的二三维一体化,采用的二维矢量数据包含道路和管网的点图层、线图层数据,以及建筑物地图的多边形图层数据,如图2所示。实现的基本思路为:首先,解析二维矢量数据,读取几何和属性字段的值;其次,根据不同要素的二三维一体化表达方法和规则自动绘制三维模型,如图3所示。

二三维一体化表达方法主要包含两种:线状要素符号化和面状要素符号化。其中道路和地下管网等线状要素的二三维一体化表达的实现流程如下(以道路为例):

1.读取道路线图层中每条路段的记录,得到路段两端的三维空间坐标、起点ID、终点ID、路宽,分别存储到顶点列表、起点ID列表、终点ID列表及路宽列表中;

2.读取道路点图层中顶点的点号(即ID),存储到ID列表中;

3.根据道路线图层得到的起始点ID号进行道路ID标记,得到所有含有3个以上链接的ID号,同时将其按照长度(break Len)及路宽将三叉以上的叉路口打断,如图4所示,同时开始记录新的路段列表;

4.根据得到的路段列表依次绘制道路并进行纹理贴图,如图5-6(a)所示,同时根据起点ID列表、终点ID列表及点号ID列表得到道路交叉点的连接顺序,确定对应道路交叉口的形状和空间姿态,进行纹理坐标计算及贴图,如图5(b)所示,组合效果如图5(c)所示;

面状地理要素的二三维一体化表达,可以基于二维矢量图层实现操作区域内所有面状要素的自动生成。本次试验通过读取建筑物底图的高程属性,经过高程拉伸实现建筑物轮廓线为基础的三维建筑模型[5]。生成模型过程中可以根据要素类型,自定义需要符号的内容。

2.2.2 场景规划

场景规划可以用于三维场景的自定义规划,通过点击相应的符号即可在场景中指定位置绘制三维符号,同时可以对每个符号进行矩阵变换,从而实现三维符号的缩放、选择和平移操作。

点符号模块包含了常用的点状地理要素的三维符号实现,通过单击鼠标既可以选择符号种类,通过键盘事件实现符号的矩阵操作,可以根据自己需要在任何位置添加三维符号,效果如图6所示。

线符号模块包含了常用线状地理要素的三维符号实现,通过点击鼠标可以实现线状地理要素的三维实时绘制,效果如图7所示。

面符号库模块包含面状地理要素的三维符号实现,通过点击鼠标绘制面状符号,实现要素和纹理填充,效果如图8所示。

采用三维符号搭建的场景渲染快速,效果突出。三维点状和线状符号可以通过矩阵变换和参数设置具备灵活性;面状符号根据要素和纹理填充,实现了符号姿态的随机性和动态水面的三维符号化表达。

3 场景操作及分析应用

3.1 场景编辑

场景编辑模块包括场景操作和工具两部分,如图10,其中场景操作用于实现窗口的平移、场景缩放及节点的删除,工具组用于实现漫游路径的交互绘制及节点的选择。

场景操作组中平移操作,通过视点的左右和上下来实现窗口的平移;放大操作,通过视点的拉近来实现窗口向前移动;缩小操作,通过拉远视点来实现窗口向后移动;删除操作,将当前处于选择状态的节点从父节点中移除。

3.2 场景漫游

场景漫游模块包含常用的漫游模式:经典模式(如轨迹球、步行、驾驶、飞行模式)及用户自定义模式(如设置路径模式及节点跟随模式),如图11所示。其中经典模式通过对OSG自带的漫游器的封装、继承实现,自定义模式通过对话框参数设置来实现自定义的场景漫游。

经典模式中轨迹球模式调用osgGA::Trackball Manipulator类实现,通过鼠标操作实现场景漫游;步行模式继承自osgGA::Camera-Manipulator,通过点击键盘和鼠标实现场景漫游;驾驶模式调用osgGA::Drive Manipulator类实现,通过鼠标实现位于地表的漫游;飞行模式调用osgGA::Flight Manipulator类实现,通过鼠标移动实现场景旋转和移动。

3.3 空间分析

空间分析模块包含缓冲区分析、天际线分析、属性查询、空间量算及可视分析,同时可以根据专题应用,自主添加专题分析模块,如图12所示。三维GIS符号化系统的空间分析模块是该系统区别于三维地图的关键模块,通过符号化的地理要素可以进行空间分析,从而证明三维符号是“活”的模型,具有编辑和分析的灵活性。

缓冲区分析可实现圆形缓冲区分析,根据鼠标左键点击两点,用来确定分析的圆心和分析半径,同时使用着色器将圆内的所有顶点颜色指定为红色,如图13所示。

天际线分析用于实现当前视点及角度的可见区域分析,调用OpenCV的Canny边缘检测算子,同时使用Shader控制检测初始面,将场景中所有要素的边缘实时绘制在屏幕上,如图14所示。

可视分析包含通视性分析和可视域分析两部分,通视性分析通过鼠标点击确定视线的起点(VStart)和终点(VEnd),运用碰撞检测获取首个交点(VPoint),分别采用绿色和红色绘制VStart-VPoint及VPoint-VEnd两条线段,其中绿色代表可视部分,红色代表不可视部分,如图15所示。可视域分析通过对话框进行参数输入,是指视点位置、视角大小、视线方向及长度,其基本思路是:首先,将场景的深度渲染到纹理(RTT);其次在着色器中计算每个顶点的深度,同时读取深度纹理图对应的深度值,进行比较,如果计算的深度值大于深度图的深度值,则当前顶点不可见,着色为红色,反之则可见,着色为绿色,如图16所示。

4 结束语

基于New Map三维引擎三维GIS符号化表达系统,实现了以三维符号为基础的二三维一体化、场景快速搭建及场景操作和空间分析功能。

系统开发采用C#语言,运用COM组件编程,因此,系统具有可扩展性,能够根据用户需求添加专题地学分析库,例如针对三维地下管网管理系统的地下管网分析库。引擎控件支持二次开发,能够应用于单机和网络中,完成特定功能,实现按需服务和符号共享,同时可以灵活添加其他的功能接口。

本文的相关研究及试验仅建立了单机版的符号化系统,还没有实现网络环境的调用,下一步将开展三维GIS符号化表达服务相关研究,方便网络客户端的调用,实现三维符号的共享使用。

猜你喜欢

符号化漫游列表
小学数学教学中渗透“符号化”思想的实践研究
学习运用列表法
扩列吧
霹雳漫游堂
霹雳漫游堂
关于一阶逻辑命题符号化的思考
现代流行服饰文化视阈下的符号化消费
合拍片《风筝》的跨文化传播
列表画树状图各有所长
2011年《小说月刊》转载列表