“地图是人类文化的杰作,它融科学、艺术于一体,作为描述、研究人类生存环境的一种信息载体是人类生产与生活中不可缺少的一种工具。”这是陈述彭院士为《中国地图学年鉴》作序的开场语。Taylor也曾指出“当涉及应用人脑来识别空间联系中的模式与相互关系时,地图学的认知方法是唯一的过程”。地图存在于我们生活的方方面面,应用广泛且己经产生了巨大的社会效应和经济效益,其重要性不言而喻。地图是地图可视化的结果,地图可视化作为现代地图学的核心一直是三维GIS的研究热点。地图可视化将电子设备的视觉传输能力和人类的视觉思维能力协同起来,将复杂多样的空间信息转化为图形图像并进行交互处理,为人们直观地观察地理现象及分析和探索地理规律提供了有力的工具。随着计算机技术和图形硬件的发展,利用计算机技术来辅助制作电子地图逐渐成为主流趋势。上世纪80年代科学计算可视化己被提出并迅速发展,其理论和方法对空间信息的表达和分析产生了重要影响。国际地图制图协会于1995年成立了一个地图可视化委员会,并与计算机图形学会开始了“Carto-Project”,研究项目,该项目使图形学技术有效地应用在地理学及地图学领域,为空间信息可视化提供了良好的技术支撑。
随着云计算、物联网、基于位置的服务等技术的飞速发展,使得数据的种类和存储规模以前所未有的速度增长。数据的规模化效应给地图可视化带来了极大的挑战,传统地图可视化方式上的变革正在酝酿和发生。21世纪以来随着社会经济文化的进步,大众对于地图的需求也日益提高,人们不再满足于二维地图的抽象表达。随着虚拟现实、增强现实等计算机图形学技术的飞速发展,数字地球、虚拟地理环境、虚拟地理场景相继被提出,可视化逐步由二维图形的抽象表达发展至三维空间的逼真展示。在解决大规模空间数据实时绘制的问题上,国内外学者进行了广泛而深入的研究,主要集中在空间索引优化、LOD、可见域裁剪和渲染方法优化等多个方面。其中,LOD方法改变了“图形质量越精细越好”的片面观点,在保证绘制效果的基础上有效地控制复杂场景的数据简化,在实时图形绘制、交互式可视化和虚拟现实等领域有着广泛的应用。在GIS领域,采用LOD进行大规模地理场景的实时渲染己经成为最普遍的解决方案。然而,现有的多数矢量地图动态LOD绘制方法在原始数据结构上进行简化,再剖分为图形API支持的基础图元类型,海量且实时的剖分计算和速率敏感的显存IO过程导致了其渲染效率低下;矢量地图静态LOD绘制方法则受限于有限的存储空间和极长的预处理时间。而且,现有的矢量地图LOD绘制方法多是针对二维场景下矢量地图的渲染,没有考虑到投影方式对地图简化的影响,不适用于二三维一体化渲染。
传统的软件地图渲染方法依靠中央处理器的性能进行可视化渲染,其有限的计算能力导致地图渲染效率低下,难以满足大数据时代下海量空间信息快速呈现的要求。自NVIDIA公司创造性地推出GPU以来,其高效的浮点运算能力和数倍于CPU的显存带宽使得以往由CPU负责处理的几何变换、光照计算、图形及纹理计算等复杂计算全部转移至GPU上进行。随着图形处理器性能的大幅度提高和可编程特性的发展,计算机处理图形的速度和质量得到了极大提升,图形流水线的某些处理阶段和算法从CPU向GPU转移以加速图形的渲染,充分开发GPU资源,已成为近年来计算机图形学领域的研究热点。同样,在GIS领域利用GPU加速地图渲染己经成为地图可视化的发展趋势,GPU性能的提升和可编程特性的发展为提高地图的渲染效率和渲染质量提供了新的技术手段。充分利用GPU的性能,结合LOD技术进行大规模数据的实时渲染已经成为矢量地图优化渲染的重要方向。
矢量地图渲染方法的优化是现代地图学一个重要的研究方向。人们对于矢量数据渲染需求是源源不断的,空间数据的海量性和地理场景的复杂性使得单纯依靠图形硬件的计算能力远远不能满足数据实时性渲染的需求,所以研究矢量地图的加速渲染技术是十分必要的。本文的研究意义主要体现在以下两个方面:
(1)提高矢量地图LOD绘制方法绘制效率
针对现有透视投影下矢量地图动态LOD渲染方法存在的问题,设计一种视投影下矢量地图动态LOD渲染方法用以提高矢量地图LOD绘制方法的绘制效率,同时为三维场景下的矢量地图的渲染提供一种新的解决方案。
(2)为非瓦片式的地图服务提供新的技术途径
现有栅格瓦片技术无法更改地图的样式,矢量瓦片可以更改样式但绘制效率相对栅格瓦片效率降低。瓦片式地图受限于计算机存储空间的大小和极长的切片时间,层级之间具有跳跃感且没有考虑投影方式的影响。本文方法考虑到投影方式的影响并对矢量几何要素进行实时简化,为非瓦片式地图服务提供了新的技术途径,为大规模数据可视化提供了新的思路。
在地图学与GIS领域,点符号、线符号、面符号是矢量地图的三种基础表达方式。因点几何要素不存在自身简化,因此本文主要研究线,面几何要素的动态LOD绘制方法。矢量地图LOD绘制涉及三个主要的可视化操作:简化,剖分与渲染。其中,针对LOD绘制中简化的操作,国内外学者已经进行了广泛而深入的研究。模型简化的实质是一个信息压缩的问题,即从组成模型的有序集合里选择一个子集,在规定的精度范围内,此子集从内容上可以尽可能的反映原集合,而在数据量上尽可能的减少。常见的简化机制包括顶点聚类、增量式删除、采样和自适应细分等方法,基本的简化算法都是通过这四种机制的结合或者变形进行实现的。针对本文的研究,以下将从线几何要素的LOD绘制方法和面几何要素的LOD绘制方法两方面进行介绍。
1. 线几何要素LOD绘制方法
线几何要素的LOD绘制一般通过简化算法或LOD模型获取简化结果,再对简化结果进行渲染。线几何要素的简化算法一般采用增量式删除法或采样法。这些算法从几何特征的角度出发进行简化,它们都能较好的保留几何要素的图形特征和空间分布特征。针对线几何要素的简化,国内外学者展开了不同的研究。以下,本文从Douglas-Peucker算法, Li-Openshaw算法、渐进式算法及这些算法的改进和线LOD模型分别进行介绍。
(1) Douglas-Peucker算法及其改进
Douglas-Peucker算法是一种增量式删除的折线简化算法,算法的基本思路是将曲线的首尾点相连,计算其余点至首尾点连线的垂直距离的最大值,若最大距离小于设定阈值即误差度量则舍去两端点之间的所有节点;若最大距离不小于设定阈值则保留此节点,以首尾点与此节点相连生成两个新的线段,对其重复上述的操作,直至线段上只有两个节点为止。Douglas-Peucker算法采用从整体到局部的思维方式,是最具代表性的空间图形综合方法,可以有效地对折线进行简化并保留其几何特征,但此算法简化过程中要素的拓扑关系发生变化可能会导致要素产生自相交。之后,Peucker和Douglas通过检测凹坑、峰值、脊、沟壑和断裂将Douglas-Peucker算法用效的应用在地形的简化上。针对简化的效率问题,Hershberger和Snoeyink提出了一种基于路径凸包的方法加速了Douglas-Peucker算法的效率,并分析了其最坏时候的运行情况。针对如何避免自相交的问题,Guibas证明了Douglas-Peucker算法中如何避免自相交是一个非确定多项式问题,针对NP-hard问题的求解一般采用穷举法或采用确定性算法,采用穷举法可以很容易得到结果但耗时极长,但确定性算法极难被找到。Saalfelds设计了一种检测拓扑一致性的简单规则,通过添加简单测试进行自相交判断解决了简化的折线自身及与相邻要素潜在的拓扑冲突问题,但检测效率不高。基于逐点前进法提出了一种改进的DP算法,极大地提高了算法的效率。不同于Saalfelds采用的凸包测试,Wu详细分析自相交与折线星形区域的关系,通过分解折线为化星形子集并进行判断来避免要素的自相交,提高了自相交判断的效率。针对三维要素简化的问题,基于二维Douglas-Peucker算法提出了三维Douglas-Peueker算法,良好的解决了三维离散点的综合问题。
(2) Li-Openshaw算法及其改进
Li-Openshaw算法是一种采样式的折线简化算法,Li-Openshaw算法基于自然现实实现,算法的基本思想是通过圆在原始曲线上滑动对曲线进行重采样,控制圆的大小获取不同尺度下的简化效果,可以有效的进行线要素的多尺度的简化,但没有考虑曲线上局部极大值点或圆与曲线的多个节点相交导致的异常情况。基于重心算法对Li-Openshaw算法进行改进,这种方法在实现和简捷性方面都取得了较好的效果,曲线光滑程度较为理想。改进Li-Openshaw算法,通过局部极大值点识别弯曲并对弯曲进行细分用以简化,同时依据构造曲线节点顺序判断相交的多个节点中初次出现的节点从而避免异常,解决了Li-Openshaw算法中失真和异常。在Li-Openshaw算法的基础上,使用Nyquist-shannon采样理论采用六边形的剖分对线要素进行采样以简化操作,此方法保持了要素更多的形态特征,适用于制图线的简化但预处理时间较长。结合Douglas-Peucker算法和Li-Openshaw算法提出一种顾及空间关系的线简化方法,通过对建立的全局简化方法的使用有效地降低了曲线的复杂度,且顾及了线要素整体的空间关系。
(3)渐进式简化算法
渐进式简化算法是一种增量式删除的简化方法,从局部到整体进行简化,如可以通过使用距离控制、角度控制或者面积控制依次对几何要素的顶点、边进行简化操作,最终完成整个要素的简化。Visvalingam。和Whyatt使用面积作为度量因子对节点剔除,提出了一种线要素的点剔除简化方法,可以有效地保留线要素的几何形态特征并进行简化。通过线结构中的极值点、拐点、凸点和单调区间建立线要素的分层结构,提出了一种从局部到整体的渐进方法可以有效进行线要素的简化,同时考虑了空间拓扑关系避免了要素的自相交。通过剥皮算法,将线要素以二叉树进行组织依据弯曲程度实现对线要素的高效简化。通过节点偏移量,以单调链求交的方式对线要素进行简化实现了线要素的有效简化。
(4)线要素LOD模型
针对线要素的LOD模型研究,国内外学者己经提出了多种LOD数据结构如:Strip-Tree、Multi-Scale Line Tree、Arc-Tree和Binary Line Generalisation Tree(BLG-Tree)等。Strip-Tree和Arc-Tree解决了任意曲线存储的问题却不适用于简单多段线的存储。针对多段线的有效存储问题,提出了Multi-ScaleLine Tree,它是一个多向树并引入了离散数量的细节层次,树中的节点可以有任意数量的子项,实现了多段线的静态LOD存储。基于Douglas和Peucker)的线性推广算法的BLG-Tree是一个可变比例的线数据结构,BLG-Tree可以依据阈值动态的获取简化后的线数据,解决了可变比例尺的存储与动态检索问题。但Strip-Tree, Arc-Tree, Multi-Scale Line Tree和B LG-Tree都是针对单个要素的存储,不能用于多个对象的空间组织(索引,聚类),因此只能解决简化和存储的部分问题。为避免数据存储冗余而设计的第一批多尺度矢量数据结构之一是反应性(BinarySpace Partitioning, BSP)树,它支持空间组织和多层次细节展示但它一个静态的LOD结构。Van Oosterom提出的反应树是第一个支持地图对象的空间组织以及多个尺度存储的动态矢量数据结构。反应树(The Reactive-Tree)是R树扩展,反应树可以有效的表达对象的重要性级别,重要性程度高的对象在树结构中相应存储得更高,这使得重要性高的对象更易于访问,而且反应树且支持对象的插入与删除。
分析可知,现有线要素LOD绘制方法着重于对几何要素数据的简化而没有虑绘制操作。几何要素的简化主要采用增量式删除或重采样的方式进行,增量式删除在原始数据结构进行简化,重采样则会产生新的顶点数据。针对矢量地图中线几何要素渲染的需求,线几何要素必须被剖分成图形API支持的基础图元,再赋以颜色或者纹理完成线几何要素的绘制。依据现有的方法,绘制过程中大量的剖分计算导致现有方法在促进矢量地图的LOD绘制上显得有心无力。
2. 面几何要素LOD绘制方法
面几何要素(多边形)的LOD绘制实现的直接解决方案是将多边形边界划分为多个段,然后使用线的简化算法对多边形进行简化,最终进行绘制操作。针对多边形几何模型LOD绘制过程中的简化操作,国内外学者己经进行了诸多研究,主要有增量式删除法和采样法。以下,本文分别进行对上述方法进行详细的介绍与分析。
(1)增量式删除
增量式删除方法即每次根据用户指定的简化准则在原始模型上选择一个点进行删除,对相关区域进行重新组织。这个简化准则可能仅判断顶点能否删除也可能对模型质量的影响给出一个量化的值(误差度量),通过误差度量完成对节点剔除、边折叠或半边折叠。
针对节点剔除的处理,一般使用上文中描述的线简化算法如DP算法或渐进式简化算法。提出了一种经典网格简化算法,首先通过将顶点的分类确定顶点是否可以进行删除,再依据阈值对顶点进行删除最终重新三角化,但算法的简化质量不高。Cohen提出了简化信封算法,通过建立信封表面来控制模型顶点的删除,简化质量较好但空间开销巨大,需要对简化的表面进行重新三角化。针对非平面数据,采用顶点删除的方法一般难以保证物体表面的光滑,简化后的结果表面较为粗糙。
边折叠方法则是通过边的移除操作和相关顶点的合并操作完成,会产生新的顶点,其中以渐进网格方法作为代表。渐进网格方法通过引入边折叠策略使渐进格网能够高效地为任意的三角形网格动态创建连续分辨率数据状态,极大地提高了渲染效率。Qlism算法则采用二次误差度量(Quadric Error Metrics, QEM)表示顶点到平面几何的距离平方和进行度量误差,算法在渲染速度与简化质量之间达到了极大的平衡,可以实现空洞的闭合和物体的合并。
半边折叠方法不同于边折叠方法,半边折叠方法通过顶点位置移动和边移除完成,不产生新的顶点,存储和运算相对边折叠方法较低。详细分析了顶点移除方法、边折叠方法和半边折叠方法的区别,验证了半边折叠方法的优越性。基于半边折叠方法提出了一种网格简化的通用框架,用以支持研究人员定义不同的简化准则进行简化操作,在简化质量和简化效率上都取得了较好的效果。提出一种实时的渐进网格生成算法,使用堆排序算法将边折叠的计算成本排序成二叉树并定义了只考虑局部信息的简化操作,算法速度得到了很大提升。依据顶点在邻域的尖锐程度判断原始节点的重要性提出一种保持特征的格网简化算法,算法实现简单且简化效率较高。
分析可知,节点剔除方法需要对简化后的模型进行三角化操作,效率较低;边折叠和半边折叠方法则着重于高度详细的几何模型,适用于如地形数据等特定的GIS数据结构却没有考虑到矢量数据的简化,导致这些方法在促进矢量地图LOD绘制的能力上显得不足。
(2)采样法
采样法即通过抽取点或生成新的顶点模拟初始模型,试图通过拟合模型来近似表达原始模型,采样法主要研究如何将采样点合理的分布在表面上以保留原始模型的更多特征。使用规则格网划分模型,判断格网内顶点的重要程度,通过选取重要程度较高的点代表栅格中的顶点从而完成模型的简化,但其简化质量不高。通过聚类的方式对将顶点的集合采用聚类后的顶点进行代替,该算法运算速度快,简化效率有所提高。提出基于混合矢量的光栅的方法同时考虑了制图简化和渲染。该方法采用GPU缓存来有效地创建Voronoi图,以通过像素颜色检查来辅助多边形边界的简化。由于Voronoi图和像素颜色检查可以通过硬件进行加速,这种方法对于简化多边形边界非常有效,但此方法没有考虑多边形填充不适用于矢量地图的渲染且没有处理自相交的问题。使用帧缓存技术改进了混合矢量的光栅方法,实现了大规模矢量数据的快速简化,同时使用模板缓存剔除了Voronoi图因自相交而重叠的区域,解决了原有方法存在的自相交问题。
(3)面要素LOD模型
面要素的LOD模型国内外学者己经进行了诸多研究。基于DP算法提出了一种称为二叉线性综合树((BLG-Tree)的数据结构,它递归地将线划分为多段线并将多段线组织成二叉树用于拓扑保持,可以高效地获取多个尺度的面要素简化结果。基于R树结构提出反应树的存储结构,实现动态LOD区域划分。GAP-Tree GAP-Tree是一种广义区域划分方法,它通过分层组织区域的手段对面要素进行划分完成了多尺度下面要素的构建。此外,针对数据存储的冗余和碎片化,国内外学者提出了若干对GAP-Tree的改进如tGap-Tree和流畅tGap-Tree,流畅tGap-Tree可以用以支持三维数据的快速浏览。另外,由于图形简化过程中可能发生拓扑错误和变形,国内外学者提出了诸多拓扑和形状保持的方法。如使用Delaunay三角网检测拓扑错误或者使用分层拓扑数据结构来维持LOD结果之间的拓扑一致性。利用三角形的连接关系提出了一种利用Deaunay三角网的简化算法,实现了要素简化过程中的拓扑关系保持。
(4)梯形格网方法
然而为了满足矢量地图多样式渲染的需求,依据当前用于矢量地图LOD绘制的流程,面要素必须组织成可绘制的图元,例如三角形或梯形用以渲染。在这个过程中,对于矢量图形的剖分和显存IO消耗了大量的时间,时间与其数据量呈正比。应用LOD模型或节点剔除法可以有效的简化多边形,但仍需要进行剖分操作,大量的剖分计算导致绘制效率低下;边折叠和半边折叠方法则不适用于矢量地图的渲染。
针对现有LOD绘制方法存在的问题,考虑到梯形上下底边存在平行关系、顶点位置明确、易于判断空间关系、支持图元的关系运算和关系传递、且可以拆分成三角形进行高效渲染等特性,借鉴半边折叠算法提出了一种支持矢量面几何要素渲染的梯形格网渲染方法设计了一种既支持简化又可直接用于渲染的梯形格网结构(下图(a))并提出了一种针对2D地图面几何要素的梯形格网简化算法(下图(b))将面几何要素简化与剖分的过程统一。梯形格网方法部分解决了传统矢量地图LOD渲染方法中因重复剖分而导致的效率低下问题,极大的提高了面状几何要素矢量渲染效率。但此方法仅适用CPU环境下二维地图面几何要素的渲染,没有考虑到投影方式对简化影响,其节点权重采用DP算法在初始化时确定,节点容差不会发生变更。梯形格网的简化算法依照梯形的上下左右关系进行判断,然而三维场景下由于旋转、俯仰等操作梯形的位置和方向发生了变更,使得其简化算法不再适用。而且此方法不支持线要素的渲染、没有GPU环境下的实现,不适用于三维场景下矢量地图LOD的渲染。
3. 研究现状总结与分析
纵观矢量地图渲染的研究现状,近年来国内外对LOD的渲染方法的研究己经取得了较大的进展,随着制图需求的日益增长已然形成了多种LOD绘制方法。分析当前矢量地图渲染方法的研究现状总结为以下几点:
(1)现有简化方法可以有效地简化矢量几何要素,但没有考虑绘制操作。顶点剔除法在原始数据结构上进行简化,但需要进行剖分操作才可用于渲染,然而相邻层级之间的简化结果具有相似性,现有方法忽略相邻层级的相似性,冗余的剖分计算导致其绘制效率低下。边折叠和半边折叠方法不需要进行重复剖分,却不适用于矢量地图的渲染。
(2)梯形格网渲染方法解决了重复剖分的问题且支持矢量面要素的渲染,然而没有考虑投影方式对制图简化的影响,不支持线要素的渲染且没有针对GPU环境下的实现。
(3)梯形格网渲染方法主要是针对二维场景的实现,暂不适用于三维场景,针对透视投影下矢量地图的LOD绘制方法的研究较少。
4. 研究目标与研究内容
4.1 研究目标
总结以上问题,针对现有矢量地图LOD绘制方法存在的不足,研究基于梯形格网的矢量地图动态LOD绘制方法,目的提高地图的渲染效率并用以支持三维场景下的矢量地图的渲染。本文的研究目标如下:
(1)设计一种透视投影下的梯形格网简化算法。简化算法包含线、面梯形格网的简化算法,该算法不仅能够保证渐进格网简化方法与传统简化方法结果的一致性,还可以避免要素自身的自相交,以实现LOD绘制过程中剖分与简化的统一。
(2)设计一种高效的地图动态LOD绘制方法。该方法依据视点相关的原则对矢量地图进行动态LOD绘制,可以支持三维场景下矢量地图的渲染。
4.2 研究内容
为实现以上研究目标,设计研究内容如下:
(1)矢量地图可视化探讨与分析
从地图学的角度研究地图渲染,以现有的地图可视化模型为基础,由动态LOD绘制流程为切入点,深入分析传统动态LOD流程中存在的问题。分析平行投影与透视投影的异同,详细探讨投影方式对地图简化的影响,研究透视投影下节点的权重计算方式。
(2)梯形格网的构建与分析
使用平行线推移算法和梯形剖分算法对矢量几何要素进行剖分,基于剖分结果使用梯形格网结构构建线、面梯形格网,分析梯形格网中梯形节点、梯形链与简化还原的关系,用以支持梯形格网的简化还原操作。
(3)顾及拓扑保持的梯形格网简化算法研究
在透视投影下,基于拓扑保持和简化结果一致性的原则,使用梯形格网结构设计顾及拓扑保持的梯形格网简化算法。
(4)基于GPU的矢量地图LOD渲染方法研究
基于可视化流水管线的渲染流程,为避免矢量地图动态LOD绘制流程中存在的图形重复剖分和顶点数据重传至GPU的问题,设计GPU环境下的基于梯形格网的矢量地图LOD绘制方法,充分利用GPU与可编程流水管线的特性,提高地图的渲染效率。
5. 研究方法与技术路线
5.1 研究方法
(1)文献分析法
搜集并整理国内外相关领域研究者在矢量地图LOD绘制方法取得的研究成果,总结前人的方法和方法适用范围,针对这些方法的优势和存在的不足进行分析并借鉴其优点,为本文的研究方法提供思路。
(2)对比分析法
进行本文方法与Mapbox矢量瓦片渲染方法在基础地图操作如:平移、缩放、俯仰、飞行的效率对比,验证本文方法的高效性。
(3)实验验证法
选取OSM(OpenStreetMap)线、面数据,使用提出的动态LOD绘制方法,对渲染结果和渲染效率进行实验,验证算法的高效性。
5.2 技术路线
根据本文的研究目标和研究内容,设计的技术路线如下图所示,包括5个阶段:
1)准备阶段。收集并整理文献,总结分析现有LOD绘制方法的优缺点和适用性,对现有研究取得的成果进行总结归纳,从而找出本文的研究目标和研究思路。
2)梯形格网构建阶段。从可视化的角度出发,对线,面要素进行剖分处理,针对线,面要素剖分后的图元,构建梯形格网并分析梯形格网中梯形节点、梯形链对梯形格网简化还原的影响。
3)梯形格网简化算法设计阶段,依据前文所述梯形格网,基于拓扑保持和一致性原则设计透视投影下的梯形格网简化算法,给出详细的算法实现步骤。
4)动态LOD绘制方法设计。在梯形格网简化算法的基础上,设计梯形格网LOD策略,同时分析地图操作对简化的影响,依据GPU可编程流水管线的原理,设计基于梯形格网的矢量地图动态LOD绘制方法。
5)实验及评价阶段。选取OSM线,面数据,对比Mapbox矢量瓦片绘制方法,验证算法的有效性,讨论算法的适用性。
6. 结语
综上所述,本文阐述了基于三维GIS技术的矢量地图动态LOD渲染方法的研究背景和研究意义。分别从线,面要素的LOD绘制方法的研究现状进行分析,结合当前计算机硬件发展的趋势和空间信息可视化新水器的要求,依次介绍了研究目标、研究内容、研究方法以及技术路线。
原文来自:http://www.ztmapinfo.com/blog/index.php/article/39.html