基于LOD技术实现城市地名标注浏览

2017-12-09 14:44李春林魏广群蒋利利粟艺峰
科技视界 2017年23期

李春林+魏广群+蒋利利+粟艺峰

【摘 要】随着数字地球的发展,LOD技术在场景展示中的作用愈加凸显。本文通过对可视化技术的研究,以OSG为基础渲染引擎,通过OSGEarth完成基础平台搭建,构建出虚拟三维可视化系统平台。该平台完成了对基础数据的添加,包括矢量数据,影像数据,数字高程模型数据。然后基于LOD技术实现矢量点标注信息的添加,可以根据视点位置的不同浏览相应视域内的矢量点信息。

【关键词】OSGEarth;LOD;Sqlite数据库

中图分类号: TP311.52 文献标识码: A 文章编号: 2095-2457(2017)23-0001-003

【Abstract】With the development of digital earth,the role of LOD in scene display becomes more and more prominent. In this paper,through the research of visualization technology, based on OSG rendering engine,OSGarth completed the basic platform to build a virtual three-dimensional visualization system platform.The platform completed the basic data to add,including vector data,image data,digital elevation model data.Then based on the LOD technology to achieve the addition of vector point annotation information,you can view the corresponding point of view of the vector point information according to the different point of view.

【Key words】OSGEarth;LOD;Sqlite database

0 引言

二十世紀九十年代后期,“数字地球”开始进入人们的视野。数字地球的核心内容是采用虚拟的三维场景模拟真实的地球,并通过加载影像,地形以及多种模型数据进行现实世界的仿真。在虚拟的三维地球中将所有信息数字化,实现人与数字地球的交互,使人们能够快速获取地球任意位置的有用信息[1]。基于数字地球人们不仅可以对地球有限的资源进行合理利用,还能对环境进行多方面保护,对人们的工作生活提供诸多便利。

1 OSG及OSGEarth简介

1.1 OSG简介

OpenSceneGraph (简称OSG)是一款开源的三维渲染引擎,其核心功能主要分为场景管理和图形渲染两大类[2]。因其强大的图形渲染性能,OSG在虚拟现实,仿真,三维可视化等方面得到较为广泛的应用。它使用C++编写,封装了OpenGL API,因此具有较强的跨平台性,可运行于Windows、UNIX 、Linux等操作系统之上。OSG之所以被程序开发者普遍看好,不仅源于它强大的性能支撑,更源于它的开源性。程序开发者可以修改OSG源代码,实现自己所需要的功能。

OSG将场景渲染抽象出来,提出了场景树和渲染树的概念。场景树,顾名思义即采用树形结构来组织场景中的地物。与传统的四叉树数据结构类似,场景树同样包含一个根节点,不同的是,场景树中节点的子节点不再四分,而是可以包含任意个数的子节点,提高了加载调度效率。渲染树由状态集(StateSet)和渲染叶(RenderLeaf)节点组成。OSG可以同时渲染StateSet相同的RenderLeaf并可以在不同的StateSet之间任意切换。

1.2 OSGEarth简介

OSGEarth是基于OSG三维渲染引擎开发的一款开源地形、模型数据加载渲染的软件开发包(Software Development Kits,简称SDK)。它可以从网络或者本地获取地形数据和影像数据,并实时地进行优化、构建和显示,支持多数据源的加载和管理[3]。OSG Earth使用基于XML格式的配置文件,可以从系统外部读取本地文本文件加载地球数据,开发人员可以手动配置文本文件加载自己所需要的数据,具有较强的灵活性。通过不同的场景图层加载调度用户所添加的数据,便于数据管理。OSG Earth提供数据缓存机制,可以将第一次加载的数据以缓存的形式保存到本地,第二次加载时先读取缓存数据,提高了数据加载的效率。

OSGEarth加载数据源的方式是通过加载不同的数据源驱动来完成的。比如,通过调用GDAL驱动加载影像和DEM数据;调用TMS服务,加载基于 TMS 协议的瓦片数据;调用ArcGIS驱动器,加载显示ArcGIS Server所发布的数据。此外,OSGEarth具有较强的扩展性,用户可以基于OSGEarth编写自己的数据源驱动加载相应的数据,比如编写WMTS驱动,加载天地图服务数据。

2 Sqlite数据库

SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个较小的C库中。它是D.RichardHipp建立的公有领域项目。以嵌入式作为其设计目标,现在已经有很多不同的嵌入式软件产品,占用资源很少,在嵌入式设备中,大概只占用几百kb的内存即可。它对主流的操作系统,比如Linux、Unix、Windows等,都能够很好的支持。同时还能够和Tcl、Java、PHP、C#等很多程序语言相结合。而且和MySQL、PostgreSQL这两款世界领先的开源软件相对比来看,它的处理速度明显较快。endprint

3 LOD算法

在大部分的GIS项目中,加载海量的地形数据,模型数据等是必不可少的。但是受电脑性能和内存的限制,对于海量数据,无法一次性加入内存。即便实现了加载海量数据,在场景浏览时也会出现卡顿现象。层次细节技术(Level of Detail,简称LOD)对于加快模型显示速度,及降低场景复杂度非常有效[4]。在场景中的各个不同部分或一个整体场景中获得一组由具有不同细节的描述方法而得到的一组模型,用于在场景绘制时以供选择使用,即层次细节模型。对于同一事物,由于受到人眼的视觉特征的影响,位于远近不同位置的物体,目视所能够看到的物体的细节程度是完全不一样的。根据人眼视觉差异的这一特点,对于场景中同一物体,LOD技术便会依据详细程度的不同创建一组几何模型。在场景渲染的过程当中,根据物体所在的位置选择相应详细程度的模型载入场景。即当视点距离物体较近时载入在视口内的较精细的模型部分,反之,当视点距离物体较远时载入在视口内的较粗糙的模型部分。在快速绘制复杂3D场景、模拟飞行器、VR、3D 动画和交互可视化等领域,LOD模型技术得到广泛且深入的应用。

在三维场景中由网格生成的细节层次模型 LOD,理论上一般分为靜态和动态这两类层次细节模型。静态层次细节模型将模型网格结构的构建和绘制两个板块分开,在模型的预处理阶段划分模型数据,并为各个模型块构建相对应的不同细节层次的模型存储在计算机的外部存储空间供渲染时使用。根据视点的位置信息和视角方向,在模型绘制阶段进行细节层次的调度。而动态细节层次模型依据视点的坐标以及其他信息,在绘制阶段实时生成细节层次相异的模型网格,保证了不同层次结构模型之间的连续性,也叫做连续的层次细节模型。

3.1 静态层次细节模型

LOD技术发展初期,静态层次细节模型被广泛应用[5]。在应用程序运行之前,以一定步骤的化简方式,从最初的高精度模型开始,逐步生成一系列越来越粗糙的模型,并在外部存储设备当中保存下来。在应用程序运行过程当中,程序根据屏幕视点与场景中模型的距离,动态判断选择一个合适的细节精细程度的模型,然后加载到场景当中以用于显示。由于所加载的模型都是预先生成到本地的,所以加载速度较快保证了渲染的流畅性。但是有利便会有弊,随之而来的便是静态层次细节模型的两个较大缺点,一是,静态LOD需要存储多个独立的简化模型,数量庞大的地形模型数据的存储对计算机硬件标准的要求很高。二是,原始模型是按不同级别生成的简模,不同级别的模型在场景当中切换时可能会出现跳动的现象,即浏览模型时不平滑。

3.2 动态层次细节模型

Lindstorm 提出的视点相关的动态层次细节模型,对于提高层次细节模型的应用范围具有重大意义。模型数据存储使用特定的数据结构,并且不生成可显示的细节模型,此为动态LOD模型和静态细节层次模型的一大区别。在应用程序运行阶段,让不同精细程度的层次细节模型匹配不同位置视点,实现自动实时构建。通过动态 LOD 建立的模型数据冗余小,并且更符合人类的视觉感官特性,也就是所观察到的不同精细程度的模型是连续变化的,避免了画面跳跃感和几何数据的不一致。但是不同分辨率的模型需要在绘制阶段实时计算生成和更新,消耗了额外的时间,并且算法也相对复杂,导致了可视化的速度下降。如何选择适当的优化算法,使得画面效果和绘制速度之间达到一个平衡点,是很多研究者努力的方向。

层次表示法、渐近网格表示法这两类算法,是目前动态LOD模型的主要生成算法。

层次表示法是指依据模型的精细程度,将精细模型均匀地化简为几个特征较为明显的简模,并一次性的存储到内存当中。在计算机的逐帧场景渲染过程中,从存储简化模型的内存中得到一个所需的细节精度稍高的模型,依据重要程度把内存里的的三角形面模型逐个删除,直到达到所需的细节层次。这种动态化简方法,其实质也即一种静态化简法。在预处理的关键帧模型生成阶段,所有的计算都在此时进行,以至实时化简的计算量极大降低,实现了动态化简的功能[6]。

在众多的模型实时化简技术中,能够被大范围使用的是来自于Microsoft公司的Hoppe提出的渐进网格(PM)算法,基于点的剖分操作与边的折叠操作是其内在的核心思想。由于缺乏必要的数据结构,原来的PM算法,对一个整体场景包含的不同精细程度的细节层次模型无法提供有效的支持。随着对传统PM算法的改进以及相关技术的进步,在实时地形的生成上,获得人们大量认可度的关于视点的渐进网格(VDPM)算法,得到了广泛应用。

渐进网格算法首先使用边折叠的模型化简方法,以一个全局能量函数作为依据,从原始模型开始逐步简化,生成一系列不同精细程度的模型,最终得到一个最低精细程度的模型。在精细化场景模型时,将其过程反转,作为简化过程的逆操作并记录下来。最终的PM的数据结构里仅保存化简得到的最简单的、程度最低的场景模型以及生成的一系列有序的逆操作。任意所需精细程度的简化模型都可以利用点的剖分操作获得。

通过对静态LOD算法和动态LOD算法的比较,决定采用动态LOD算法用于虚拟场景构建过程中城市地名标注的加载调度。

4 关键技术实现

在SQLite数据库中创建省区注记表及市区注记表,用来存储相关名称和经纬度坐标,表结构设计如下

表1 省区注记表

表2 市区注记表

然后在Google地球上提取中国各省市的经纬度坐标并分别存在省区数据表和市区数据表当中。

5 效果展示

基于LOD实现的全国省市行政区划名称显示如图3、图4所示,当镜头距离较远时,只显示全国部分省级行政区划的名称,且省级行政区划图标在屏幕上基本不会重叠。当镜头距离较近是显示市级行政区划图标。

6 总结

本文基于LOD技术实现了城市地名标注的添加。使在场景浏览时避免加载冗余数据,提高加载渲染效率。对于城市地名标注,只在Google地球上提取了我国省级行政中心以及各省各个市中心的地理坐标,未提取县级和乡/镇级的地理坐标。当用户进行场景漫游时,无法浏览到低级别的行政区划。

【参考文献】

[1]董波.数字矿山三维地质建模及可视化研究[D].中国地质大学(北京),2013.

[2]张昊.基于OSG的道路三维实时交互式可视化技术研究[D].中南大学,2010.

[3]王新宇.OpenSceneGraphEarth平台下KML语言机制的分析和改进[D].西安电子科技大学,2014.

[4]李长春,何荣,王宝山.LOD在大范围复杂场景简化中的应用[J].河南理工大学学报(自然科学版),2007(02):181-186.

[5]闫军,陈震,危水根.基于LOD算法的大规模地形实时渲染技术优化[J].电子元器件应用,2010(06):86-88.

[6]杨崇源,张继贤,林宗坚.虚拟地形场景绘制中的实时LOD算法[J].测绘学报,2001,(02):133-139.endprint