一种支持GIS线对象和面对象连续LOD绘制的方法

文档序号:30176926发布日期:2022-05-26 12:08阅读:134来源:国知局
一种支持GIS线对象和面对象连续LOD绘制的方法
一种支持gis线对象和面对象连续lod绘制的方法
技术领域
1.本发明涉及地理信息系统(gis)、计算机辅助设计(cad)、计算机地图制图(cac),导航地图、电子地图、手机地图领域,特别涉及一种gis线对象和面对象连续lod绘制的方法。


背景技术:

2.地图可视化一直是现代地图学的核心,地图可视化方法的性能和质量对高交互的制图和分析具有重要意义。大数据时代的到来,使得当前可视化方法难以应对矢量数据的海量性和复杂性带来的地图高交互性和数据查询与交互的挑战,矢量数据渲染所涉及的多尺度空间索引技术、lod技术等方面的研究较为缺乏。
3.多尺度空间索引技术根据可视化尺度来获取用于快速显示的不同尺度的数据。常见的多尺度空间索引方法以reactive-tree为代表,包括r树、r*树、sr树等。这些方法能够优先获取尺度较大、重要性较高的矢量数据,但破坏了空间索引的平衡性,改变了原有空间索引的存储方法,降低了数据查询效率。同时,当前多尺度索引多为面向数据快速获取,并未考虑数据调度成本与数据lod成本。lod技术分为静态lod与连续lod。静态lod方法多围绕生成不同精度数据的质量和效率展开。常见的静态lod方法包括顶点聚类算法、浮动栅格聚类方法、ice等。静态lod在可视化性能上有着优越表现,但需要较长的预处理时间,同时导致相邻比例尺下,不同层次细节之间难以平滑过渡。连续lod的研究主要围绕矢量数据简化和累积简化。常见的简化算法多为从原始数据进行简化得到最终的简化数据,并未考虑简化后数据重复利用。目前还未形成一个通用的、高质量的gis线对象和面对象连续lod绘制方法。


技术实现要素:

4.本发明的目的在于解决当前大规模矢量数据带来的地图可视化效率低、空间索引未考虑矢量数据lod调度问题,提供一种基于gpu的要素连续lod绘制方法,实现线要素和面要素连续lod高性能渲染。
5.本发明的总体思路是:针对基于数据库的外部空间索引查询方法的数据查询与调度效率低问题,设计层次编码;针对矢量要素增量数据难以统一管理问题,设计矢量数据存储与组织结构;针对矢量数据lod快速获取问题,设计基于层次编码索引结构的数据查询与调度方法;针对数据渲染效率低问题,设计基于gpu环境和要素样式的数据剖分与lod算法。
6.本发明一种支持gis线对象和面对象连续lod绘制方法,包括以下几个步骤:步骤1,以点区域四叉树初始化空间索引,重载索引节点和数据的访问函数,通过范围相交查询构建索引节点及其数据的层次编码;步骤2,先单独构建面要素的梯形格网结构,再改进dp算法,迭代计算要素各节点的权重值,并将权重值作为增量信息录入数据库,再构建包含权重值的要素数据结构;步骤3,根据节点包围盒与可视化查询窗口的相交关系,以及节点数据的累积简化
状态,从数据库中查询增量数据,对节点进行化简或累积简化;步骤4,在gpu中,去除相邻线段重复部分,绘制线段主体,再针对平角、斜角、圆角三种拐角样式,剖分绘制线段拐角;以骨干梯形将梯形格网拆分成梯形链,结合数据库中的增量信息,对细节梯形进行合并简化与累积简化,最终渲染面要素。
7.上述步骤1具体包括:(1)根据ogr图层的要素总量,计算索引层数,使得索引层数相对平衡,保证四叉树的高度适中;(2)以点区域四叉树为原型,生成基础的空间索引,并向树中插入要素的id与范围;(3)对于点区域四叉树的节点访问和数据访问函数,进行自定义的重载,根据节点的层数生成相应的节点编码,再基于节点的编码,给节点下的各个数据赋予编码;(4)经过(1)、(2)和(3)可以得到反映空间索引层次性的层次编码索引结构。以层次编码为序的数据存储顺序与空间分布相关,即具有共同祖先节点的数据在线性空间中被存储到一起,能够大幅提高数据的查询和调度效率。
8.上述步骤2具体包括:(1)先单独对面要素构建梯形格网,逐一获取面要素外环和各内环上的点坐标与点个数,根据点的坐标数据与点的总数,利用水平扫描线,逐个扫描行将面要素切分成梯形面片,形成梯形连通图并基于梯形连通图,将梯形面片划分为骨干梯形与细节梯形两类;遍历梯形链,以梯形格网平行边为节点,梯形为节点连接线,构建平行边多段线图。(2)获取要素第一个和最后一个节点组成节点对,根据节点对的坐标数据,计算位于节点对之间各节点的权重值,找到权重值最大的节点,以该节点与节点对的两个节点分别形成新的两组节点对,再次计算节点对之间各顶点的权重值,以此不断迭代计算要素各节点的权重。(3)将节点权重值作为要素的增量信息,录入数据库。最终,构造包含权重值的要素数据结构。(4)经过(1)、(2)和(3)可以得到针对lod、更完善的要素数据结构体系。
9.上述步骤3具体包括:(1)判断可视化窗口与空间索引范围是否相交,若相交,则取相交范围为实际查询范围,否则不进行渲染更新;再判断实际查询范围、比例尺、选择id数,若任一项与前一次不同,则更新本次查询范围、比例尺、选择id数,否则不进行渲染更新;(2)根据节点的包围盒与像素比例尺、可视化查询窗口与像素比例尺,结合节点数据的累积简化状态,对节点进行几何数据查询;(3)一方面,当内存中数据已满足可视化分辨率细节需求时,删除冗余的节点数据;另一方面,根据从数据库中查询得到的增量数据,对未满足可视化需求的节点进行展开;(4)经过(1)、(2)和(3)可以得到面向lod可视化的渲染数据集。
10.上述步骤4具体包括:在gpu环境下,绘制线要素时,对于线的主体绘制,通过平行线推移去除相邻线段的重复部分,减少曲线的重叠绘制;对于线的拐角样式绘制,将线要素拐角的连接样式分为平角、斜角、圆角三种样式,连接推移顶点绘制平角样式,以交点将拐角缺口剖分成两三角形绘制斜角样式,采用顶点旋转方式绘制圆角样式。绘制面要素时,基于步骤2的梯形格网结构,根据梯形连通图,以骨干梯形将梯形格网拆分成多段由多个细节梯形组成的梯形链,同时从数据库中获取的增量信息。一方面,对相邻细节梯形基于权重进行合并简化;另一方面,以原始梯形和增量信息中的顶点,构成新的细节梯形进行累积简化。最终对简化结果进行渲染。
11.有益效果:本发明能够支持gis线对象和面对象进行高性能的连续lod绘制,满足地图可视化高交互的快速响应需求,同时直接保留原始几何数据的完整性,便于空间数据的查询与空间操作。与reactive-tree相比,本方法的空间索引避免破环原有的空间索引结
构,实现了对数据库中空间数据的范围查询,同时提高空间索引查询效率。与常见的静态、连续lod方法相比,本方法顾及可视化中矢量数据量与数据lod的关系,面向数据lod渲染设计空间索引结构和数据调度方法,最终在gpu环境下完成线要素和面要素的剖分与渲染。
附图说明
12.图1本发明方法的流程图;图2层次编码示意图;图3数据组织结构与逻辑结果示意图,(a)要素组织结构,(b)数据与节点逻辑存储结构;图4扫描剖分示意图;图5数据查询流程图;图6推移线重叠部分相对坐标示意图;图7线要素剖分渲染示意图;图8梯形合并示意图,(a)合并前的相邻梯形,(b)合并后梯形顶点的变化情况,(c)合并前的节点连接线,(d)合并后节点连接线的变化情况;图9梯形增量构建示意图,(a)原始梯形,(b)根据增量信息简化得到的新梯形。
具体实施方式
13.下面结合附图和实施例对本发明做进一步详细说明。
14.本发明将以点区域四叉树为空间索引原型,构建考虑空间索引层次性的层次编码索引结构;单独构建面要素的梯形格网结构,并改进dp算法,计算要素节点权重并构建针对lod的要素数据结构;根据可视化窗口和节点的包围盒与像素比例尺,结合节点的累积简化状态,对节点进行几何数据查询;最终在gpu环境下,基于线样式分线段主体与线段拐角两部分,剖分渲染线要素,根据骨干梯形将梯形格网拆分为梯形链,结合从数据库中获取的增量信息,对梯形格网结构下的面要素进行简化与渲染。
15.实施例1如图1所示,我国某范围内路网地图数据连续lod渲染包含以下步骤:步骤1,以点区域四叉树初始化空间索引,重载索引节点和数据的访问函数,通过范围相交查询构建索引节点及其数据的层次编码;步骤2,先单独构建面要素的梯形格网结构,再改进dp算法,迭代计算要素各节点的权重值,并将权重值作为增量信息录入数据库,再构建包含权重值的要素数据结构;步骤3,根据节点包围盒与可视化查询窗口的相交关系,以及节点数据的累积简化状态,从数据库中查询增量数据,对节点进行化简或累积简化;步骤4,在gpu中,去除相邻线段重复部分,绘制线段主体,再针对平角、斜角、圆角三种拐角样式,剖分绘制线段拐角;以骨干梯形将梯形格网拆分成梯形链,结合数据库中的增量信息,对细节梯形进行合并简化与累积简化,最终渲染面要素。
16.更具体的实施步骤如下:四叉树初始化与层次编码索引构建本发明改进点区域四叉树划分方法从上往下构建,但需要统计每个索引节点包含
的点数据量(其他可视化参数)信息。本发明索引构建算法具体描述如下:1)提取原始矢量数据集合d(d1、d2…
)的地理范围,并以数据集包围盒中心点将地理范围拓展成正方形,基于数据的地理范围计算levelmax等信息;2)以当前数据集的统计信息(顶点数量)、节点编码,构建索引节点;3)将地理范围均分为四子块空间,依据子块地理范围对数据集合进行分割;4)遍历子块,判断子块节点深度是否等于levelmax,若是,则将子块构建节点后,计算节点尺度s,并将子块中所有数据和节点信息存储至数据库中;5)若否,则判断子块点数集合中是否存在点数量小于点数量阈值的di,若是,则将子块构建节点后,计算节点尺度s,并将子块中di和节点信息存储至数据库中;否则,以当前子块和子块中数据集合进行步骤2)。
17.与传统四叉树的构建算法相比,本发明提出的构建算法针对的是多要素集合,能够实现对多要素集进行索引构建。同时,本发明结合数据地理范围和可视化信息,能够自适应计算索引最大层级,避免树索引深度过高带来索引检索效率低的问题。本发明索引构建时,需要统计点的数量(可视化属性),同时需要计算节点的尺度s。节点的尺度s计算如下,假设len为数据的拓展成方形的地理范围的宽或高,z为节点在索引中的层级,节点尺度s的计算公式如下:本发明基于空间索引的层次性对索引节点和要素进行编码,使编码具有以下特征:一方面,父节点的编码小于孩子节点的编码;另一方面,同一层两节点a、b,若a的节点编码小于b的节点编码,则节点a的所有孩子节点编码同样小于b的节点编码。编码结果如图2所示。
18.图3为以编码为序的数据存储以及数据与节点逻辑存储示意图,图3(a)为要素在数据库中的组织结构示意图,code字段为本发明的编码。从图3(b)可以看出以层次编码为序的数据存储顺序与空间分布相关,即具有共同祖先节点的数据在线性空间中被存储到一起,如要素3与6在存储上临近。同时,要素存储顺序符合基于索引深度查询,要素访问顺序。基于编码结构能够实现对数据的范围查询,如当数据查询窗口包含索引节点2的地理范围时,只需查询编码,即利用逻辑符号可快速查询、调度数据。
19.层次编码具有良好的拓展性,编码是基于树索引结构的层次性建立,并不会影响索引的构建方式和索引中数据存储位置,因此能应用于各类空间索引结构上。
20.梯形格网构建与节点权重计算梯形格网是简化与剖分渲染一体化数据结构,能够对有效支撑面数据的连续lod。本发明基于以梯形格网作为面要素的lod结构,基于扫描线算法对面要素进行梯形剖分,对多边形原始顶点的纵坐标进行排序,依据纵坐标值生成x方向水平的扫描线,将多边形划分成按行分布的梯形面片,其空间位置由所在梯形四个顶点坐标值所决定。梯形剖分算法如下:step1:以排序后多边形原始节点y值构建扫描线数组。对多边形顶点进行y方向从大到小的唯一值(消除相同的y值)快速排序,依据排序结果建立扫描线数组s1、s2、...、sn;step2:以边节点的最小y值构建边链表。依据节点顺序构建边数组,以边数组的中
每一条边的最小y值为key值,按照从小到大的顺利快速排序,插入至边链表;step3:从扫描线s1开始,计算与当前扫描线scur相交的所有边,对边与扫描线的交点依据x值进行快速排序,x值相同再依据边的斜率进行排序;step4:取下一条扫描线snext,再次进行step3,把两次计算的结果组成水平方向连续的梯形组;step5:接着更新scur为snext进行下一个循环,直至scur=sn,扫描结束。
21.如图4,逐个提取梯形组中的梯形,即可实现多边形的梯形剖分。但剖分多边形的顶端和尾端可能会出现三角形,本发明通过存储两个相同的上顶点进行三角形的存储,同时也通过梯形具备两个相同的上顶点完成对梯形是否是三角形的判断。
22.几何数据节点权重算法决定了节点简化顺序和图形简化质量,本发明对于要素的lod处理,基于dp算法设计本发明的数据节点权重算法。假设要素首节点vs,要素尾部节点ve,初始两端节点权重为无限大,则算法描述如下:1)连接要素首尾节点形成直线v
sve
;2)获取要素上距离直线v
sve
距离最大的点vi;3)判断hi与节点两端顶点权重的大小,若小于,则以hi作为点vi的权重,若大于,则以两端节点中的权重最小值min(hs,he)作为该点vi的权重;4)将要素以vi节点为分割点形成新的两条要素,即vs和vi及其中间节点组成一段要素,vi和ve及其中间节点组成一段要素;5)重复1)、2)、3)、4)步骤,直至要素中间不存在点,迭代结束。
23.基于本发明的算法,任意要素v
ivj
之间所有节点权重必须不高于vi、vj点权重,若高于,取两点权重最小值。如此通过权重调整,能够保证节点权重的单调性符合dp算法节点简化顺序,即优先简化的节点权重更小。
24.最终,以id号、坐标数据和节点权重值作为成员变量,构建新的要素类,该类是针对lod、更加完备的数据结构体系。
25.几何数据查询与lod调度本发明基于层次编码结构,设计针对数据库的空间数据范围查询方法。本发明的索引为可视化与数据调度一体化索引,结合索引查询包含求精和过滤两个过程,实现对数据的增量查询和化简查询,即基于查询需要,查询增量数据并对几何数据进行累积简化,也需要对其他数据进行简化。假设节点的像素比例尺为sn,当前地图可视化的像素比例尺为s,可视化查询窗口bv,节点包围盒为bn,本发明索引查询算法如图5所示。
26.1)判断子树根节点bn与bv是否相交,若不相交,则说明数据不在可视化范围内,对数据进行简化,并将节点所包含数据移除渲染数据集;2)若相交,判断节点数据中数据是否已进行累积简化,若没有则以节点编码查询增量数据,进行数据累积简化;3)若已进行累积简化,则判断当前节点sn是否大于s,若大于则说明内存中数据已满足可视化分辨率细节需求,将数据加载至渲染数据集;4)若sn不大于s,则判断是否bv包含bn,若包含则说明当前节点所有数据都需进行渲染,基于节点编码进行增量信息范围查询,将累积简化后数据加入渲染数据集;若否,则继续遍历节点子树。
27.本发明方法查询的结果为有要素编码和索引节点编码构成的编码集。索引节点编码代表以该节点为祖先节点的所有要素都被查询窗口v包含。
28.在查询算法方面,本发明查询考虑节点与查询窗口的包含关系,当查询窗口包含节点时,则不再进行遍历子节点,有效避免了子节点的深度遍历。在外部索引查询结果集方面,本发明外部索引查询结构为编码集,而不是要素id等信息。在基于结果集对数据库中数据进行查询调度方面,本发明以要素的编码进行离散查询,以索引节点编码进行范围查询。从而以索引节点编码进行范围查询,有效减少数据查询时的数据库扫描次数,降低数据库内部数据查询调度成本。同时本发明方法仅对空间索引进行编码和改变空间索引查询方法,并不会影响空间索引的构建方式和构建结果,因此本发明方法能拓展至其他空间索引结构上,具有适用性和拓展性。
29.基于要素样式与数据结构的剖分渲染本发明针对线要素拐角的连接样式,采用平行线推移算法,在gpu中进行线要素的剖分绘制。以线段为单元,线要素的绘制分为线段主体(矩形区)绘制和拐角样式绘制。从而避免线的压盖绘制。
30.针对线段主体绘制需要去除与相邻线段重复部分。如图6所示。若以p2p3为x方向、p
2v3
为y方向,建立坐标系。p2p3长度为l,则矩形v3u3u
4v4
的坐标范围r2矩形v1u1u
2v2
的坐标范围r1。
31.公共区域的范围。绘制矩形v1u1u
2v2
时,需要去除与矩形v3u3u
4v4
的公共部分,即区域。在几何着色器阶段,计算顶点v1、u1、u2、v
2 以v3p2p3为坐标轴下的相对坐标;光栅化阶段会内插计算光栅化的像素点以v3p2p3为坐标轴下的相对坐标;片段着色器阶段,判断是否属于r2,若属于则不处理当前像素点,从而避免当前像素点的处理与绘制。
32.针对线的拐角样式剖分与绘制,如图7所示,从可视化的角度出发,线符号的连接样式分为斜角、平角和圆角连接。

平角样式,连接推移顶点v2、p2、v3形成三角形v
2 p
2 v3即完成平角样式的剖分,图7中(c)为基于剖分结果,线段v
1 v2部分渲染结果示意图。

斜角样式,计算线段v
1 v2、v
3 v4的交点,以交点将拐角缺口剖分成两三角形,图7中(g)为线段渲染结果。

针对线的圆角样式,拟圆化处理完成拐角的平滑过渡,将圆弧部分均分成多个以线宽为腰的等腰三角形。假设折线的宽度为w,为保证圆弧三角化变形较小,本发明定义三角化变形最大变形长度为d,则三角形顶点角,采用顶点旋转方式计算弧线v2 v3中剖分三角顶点坐标。顶点坐标计算公式如下:将剖分渲染方法与线数据lod方法相结合,即可实现对矢量线lod渲染。
33.本发明对面要素的简化分为合并简化与累计简化,以简化结果作为最终的渲染数据。
34.合并简化主要针对相邻细节梯形,对骨干梯形不进行简化。本发明以骨干节点对
梯形连通图拆分,将图拆分成多段由多个细节梯形节点组成的梯形链。针对拆分后的细节梯形基于权重进行简化,最终简化为一个梯形。简化算法如下:如图8中(a)、(b)所示,两相邻梯形t1、t2二者通过合并形成新的梯形,新梯形由原始梯形顶点v
1v2
(t1梯形的上边l1)和v
5v6
(t2梯形的下边组成)构成。梯形合并从形式上来看,移除v
3v4
线,产生变形。
35.若以构成梯形格网平行边为节点,梯形为节点连接线,如图8中(c)、(d)所示,则梯形t1为l1、l2,连接线,t2为l2为l3连接线,若简化l2则l1l3连接构成新的图形。
36.若从相邻梯形单侧线考虑,以梯形左侧顶点构成曲线v
1v3v5
,基于dp算法可知,当简化阈值大于顶点v3到v
1v5
距离时h3,移除顶点v3,同样当简化阈值大于顶点v4到v
2v6
距离h4时,则移除v4顶点。因此基于梯形格网的dp算法中,只有阈值大于l2节点的权重(max(h3、h4)),才能移除线段v
3v4
,进行梯形合并操作。
37.本发明基于以平行边为节点的梯形合并算法,设计了面数据基于细节梯形的dp算法。算法描述如下:1)对面要素几何数据采用梯形剖分,构建梯形连通图;2)基于梯形连通图划分梯形类型,基于骨干梯形,将连通图划分为多个由细节梯形构成的梯形链;3)遍历梯形链,进行dp算法;4)以梯形平行边为节点,以梯形为连接关系,构建平行边多段线图;5)获取多段线图中最上最下节点l
t
、lb;6)获取节点上距离l
t
、lb距离最大的点li和其权重wi;7)判断wi与多段线两端节点权重的大小,若小于,则以wi作为节点li的权重,若大于,则以两端节点中的权重最小值作为该节点的权重(min(w
t
,wb));8)将多段线以li点为分割点形成新的两条多段线,重复5)、6)、7)、8)步骤,直至多段线中间不存在节点,迭代结束,计算出节点(平行边)权重。
38.本发明的增量信息结构以及基于面数据累积简化算法如下:面数据的增量信息以平行边为单位,由两个顶点、权重、更新梯形的id和新生成梯形的id组成。如图9中(a)所示,原始梯形为t1(v1、v2、v3、v4);如图9中(b)所示,增量信息为线段e(v5、v6;w;t1;t2)。获取增量信息e时,将t1分裂成t1和t2,新的梯形t2的坐标由原始梯形和增量信息中顶点构成,即t1变为(v1、v2、v5、v6)、t2变为(v5、v6、v3、v4),并将以堆栈存储当前增量信息。数据简化时,从堆栈中取出增量信息,将t2从渲染数据中移除,同时更新t1的坐标,移除增量信息。
39.本发明矢量数据符号化与剖分在gpu中完成,能发挥gpu的计算性能,减少cpu计算负载。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1