基于gpu的地图矢量线要素拐角合理性绘制方法

文档序号:9922444阅读:606来源:国知局
基于gpu的地图矢量线要素拐角合理性绘制方法
【技术领域】
[0001] 本发明设及GIS领域和电子地图领域的一种符号化擅染技术,给出了一种基于GPU (Gra地ics Processing化it)可编程流水线及化ader语言的地图线要素拐角合理性绘制 方法。
【背景技术】
[0002] 地理空间实体的符号化方法是地理信息领域和地图制图领域的重要研究内容。相 比于常用的点符号和面符号,线符号由于其需要沿着线状要素的走向来填充绘制的特点, 往往更加困难和耗时。除了常用的实线和虚线之外,地图表达中需要用的线型符号更为复 杂。如城市主干道的线型符号是带有边框的双线图元;铁路符号是带有边框的黑白相间的 图元;单边边界线符号是齿状的图元。运些线型符号利用不同几何形状组合而成一个带有 语义信息的图元。传统的绘制方式是通过符号相关的特定函数,为每一个线型符号设计相 应的绘制函数,运种方式应用场景固定,可扩展性不强。另一种常用的方式是利用组合绘制 的方式来将地图符号分解,再根据分解出来的图元多次绘制矢量线;运种方式需要对原始 的矢量线绘制多次,影响了其绘制效率。论文《面向GIS的矢量线状符号填充算法研究》(张 海泉,潘懸,吴焕萍,等.《地理与地理信息科学》,2004,20(04) :11-14.)介绍了运些基本方 法。
[0003] 由于地图符号的复杂性,也导致了在矢量线要素拐角处的绘制容易出现重绘、漏 绘的问题,也就是拐角的不合理填充问题。运种不合理填充主要出现在用符号结构中不连 续的部分绘制拐角,形成不一致的绘制;也出现在用符号结构中空白色来填充拐角,形成拐 角的歧义,也就是说在拐角处既可W认为是连续的线,也可W认为是两条线。论文《基于GDI +的复杂线状符号优化算法》(秦佐,周晓光,刘军生,等.《测绘科学》,2011,04期(04) :183-185.)在对线状符号的复杂性进行分析的基础上,总结了线状符号的基本组成结构W及在 拐角处的绘制的转角问题。虽然该论文的方法提出了一种基于最小符号单元定位点的方案 来解决拐角处的绘制问题,但其方法仍然是纯软件绘制的方法,对于线型符号的绘制需要 多次重复的绘制才能表达符号的复杂结构;采用变换间隔距离的方式能够一定程度上避免 在拐角处出现不合理的填充,但运种方式依赖于对矢量线要素的长度预先计算,且需不断 调整间隔。在当前数据更新频率加快、数据获取精度不断提高、大数据的背景下,其绘制效 率受到了极大的制约,也难W适应硬件加速绘制和GP听十算的技术趋势。名称为"基于GPU的 地图线形符号绘制方法及系统",申请号201310125110.6的中国专利,在分析地图线形符号 绘制的难点的基础上,公开了一种在化ader程序里面定制线型地图符号的绘制方法。但运 种方法严格依赖于化ader编程,不同的线型符号需要在化ader里面大量的编程才能实现绘 审IJ;对于如何将各种各样的复杂线型地图符号映射到GPU像素计算的方面并没有给出方法, 对于如何处理拐角处的不合理绘制亦没有设及。
[0004] 因而,如何对矢量线要素的拐角进行合理性绘制是计算机地图绘制中的一个亟待 解决的问题。运种拐角合理性绘制需要适应于多种线型地图符号,而且不能改变原始矢量 线数据。

【发明内容】

[0005] 本发明的目的是在GPU可编程流水线和着色器技术的基础上,针对矢量线要素在 拐角处容易发生不合理绘制的问题,突破传统用多种不同的间隔模式来避免拐角处重绘漏 绘的方式,实现基于符号结构的矢量线要素逐像素绘制,并在绘制过程中就进行拐角合理 性处理。
[0006] 本发明的技术方案是:
[0007] 基于GPU的地图矢量线要素拐角合理性绘制方法,包括下列步骤:
[0008] 步骤1确定需要沿线重复填充的符号单元的颜色结构表:将需要填充的符号单元 按照纵向-横向的结构进行分解,用列优先的二维数组和相应的符号单元属性来结构化映 射一个符号单元,对颜色结构表中的每一列指定其是否为背景列;
[0009] 步骤2初始化需要绘制的线状要素的点集序列,根据线宽生成需要绘制的S角形 几何=角网:确定需要绘制线要素的线宽参数,遍历线状要素中的每一个顶点,按照半个最 大线宽向两边扩展,同时生成相应的=角形集合,并为每个=角形的每个顶点赋予沿线走 向的长度值U值和垂直于线走向的长度值V值,即U-V值,将拐角处顶点的U值转换到符号结 构中,判断其是否为背景列,如果是背景列,则调整U值到最接近的非背景列;
[0010] 步骤3在着色器中根据颜色渐变函数对线状要素进行逐像素绘制:在着色器中基 于传递到着色器里面的顶点U-V值,动态确定每个像素的U-V值,即像素在水平方向上到线 起点的距离U'值和像素在垂直方向上到线的上边界的距离V'值,由此确定每一个像素在符 号颜色结构表中属于哪一个颜色单元,利用颜色单元的颜色来填充当前像素。
[0011] 所述步骤1中:A.符号单元的颜色结构表:将符号单元按照其结构分解为几个列, 每一列都包含其相应的行,每一行都包含其相应的四个角的颜色值,由此形成一系列的颜 色单元来映射特定的符号;B.颜色结构表的单元属性:对于一个符号单元的颜色结构表,其 每一列都包含相应的宽度属性和所包含的行数属性,每一行都包含相应的高度属性,每一 列都包含一个布尔值来指明该列是否为背景列,整个颜色结构表包含总列数、总宽度和总 高度属性。
[0012] 所述步骤2中拐角处U-V值的调整:在线串的拐角处,拐角内外存在沿线走向上的 长度不一致,分别用拐角外的长度对拐角外顶点的U赋值,将拐角外顶点的U值赋给内拐角 对应的顶点;对拐角顶点的U值,利用公式U(p)=u'-SL*[uV化]计算其在符号颜色结构表 中的U(P)值,其中U'为原始计算得到的U值,化表达整个符号的宽度,[u'/SL]表示对U VSL 的结果进行取整得到小于U'值的化的整数倍;根据U(P)值遍历符号颜色结构表中的各列, 判断其处于具体哪一列,得到所在列的索引值,利用运个列的索引值获取该列是否为背景 列;如果该列是背景列,则判断U(P)值占据运一列的左半部分还是右半部分,如果是左半部 分,则调整U'值到该列索引值-1运一列,反之在右半部分,调整U'值到该列索引值+1运一 列。
[0013] 本发明的方法可W利用GPU可编程流水线和着色器中像素着色器能够遍历每一个 像素的特点,按照符号自身的结构信息,将符号的映射为二维的颜色结构表;根据确定的符 号结构中不能被填充在拐角处的信息,动态调整拐角处顶点的U值;在着色器中用依据调整 过后的U值和V值进行颜色表取值,最终实现矢量线要素在拐角处的合理绘制。相比现有传 统的绘制方法,本发明可W对矢量线要素拐角进行合理绘制,能够避免拐角处重绘漏绘,并 平滑地表达矢量线的拐角,增强地图的绘制效果和可读性。
【附图说明】
[0014] 图1是本发明方法的流程示意图;
[0015] 图2是符号颜色结构表信息组织;
[0016] 图3是矢量线要素在拐角处的=角化方法说明;
[0017] 图4是(a)黑白间断线型符号在拐角处的合理性绘制方法说明,(b)将黑色延伸到 拐角处,白色往右侧归并,(C)将黑色从拐角处开始,白色往左侧归并;
[0018] 图5是边界线符号在拐角处的合理性绘制方法说明;
[0019] 图6是利用本发明的方法绘制拐角的结果与其他现有方法的对比图,(a)采用GDI+ 方法,(b)采用AGG方法,(C)采用化iro方法,(d)本发明方法处理的斜接拐角,(e)本发明方 法处理的圆形拐角,(f)本发明方法处理的平截拐角,(g)本发明方法处理的不连接拐角。
【具体实施方式】
[0020] 下面结合附图和实施例做进一步说明。
[0021] 图1为本发明方法的流程图。该方法包括W下步骤:首先根据需要填充的地图符号 单元生成相应的颜色结构表,并在颜色结构表中制定特定的列作为背景列。接着根据线宽 构造=角化后的线=角网,将沿线走向的U参数和垂直于线走向的V参数传递给=角网中的 每个顶点,在对顶点赋U值时,如果拐角处的填充是背景列,则调整U值。最后将此结构颜色 表和U-V参数传递到着色器程序中,利用化ader语言,根据每个顶点上的U-V值,基于颜色结 构表进行线要素的逐像素绘制。
[0022] 一个符号的颜色结构表信息如图2所示,按照整个符号的宽度SymbolLength,整个 符号有多少列Co IumnCount,每一列有多少行Co IumnRowCountArray,每一列的宽度 Co IumnWi 化 Mrr ay,每一行的高度RowHei 曲tAr ray 和每一个 Cell 的颜色 Cel IColorTable 来 组织。基于运个符号颜色结构表,可W在化ader中根据每一个像素的U-V值,从颜色表中取 值来进行矢量线要素的填充。
[0023] 对拐角处的S角化需要根据不同的拐角类型来处理,如图3所示,几种不同类型的 拐角分别S角化。对拐角的每个顶点跟其他顶点一样,也需要赋予U-V值。其U值基于拐角处 在线上对应的点到起始点的距离,而运个U值存在很大的可能性会导致在拐角处填充不合 理的颜色值。如图4所示的黑白间断线,拐角处不应该填充白色,W免引起地图读者认为是 两条线;如图5所示的边界线,拐角处不应该填充间断边线,W免引起拐角处的歧义绘制。所 W运个原始U值需要映射到一个符号中,并判断其是否属于符号颜色结构表中的背景列。如 果是背景列,则往两侧作动态调整。如图4和图5所示。
[0024] 本发明技术方案的具体说明如下:
[0025] A.首先遍历线要素中的每一个顶点,按照半个最大线宽向两边扩展,由此可W将 一个线段扩展成一个矩形;利用矩形的四个顶点,组合生成相应的两个=角形;由一系列连 续的线段可W生成连续的=角形集合。对于沿着线走向,往左边扩展出来的顶点,设定其V 值为0;而往右边扩展出来的顶点,设定其V值为1。左右两边的扩展顶点的U值计算,是根据 扩展顶点对应的线上的点与线的起始点计算长度,用长度除W最大线宽得到左右扩展顶点 的U值。
[0026] B.对于需要沿线重复填充的符号单元,该符号首先从横向上被分为宽度一致的几 列,对每一列再分为颜色一致的几行。不同列的宽度可W不同,但每一列中的每一行宽度相 同;列中的不同行的颜色可W不同,但一行只能有一个颜色。由运些列-行(Colu皿-Row)构 成了一系列的单元(Cell)。每个Column被赋予宽度属性和行数属性,每个Row被赋予高度属 性,每个Cell被赋予颜色值,整个符号颜色结构表被赋予总列数、总宽度和总高度属性。
[0027] C.通过GPU可编程流水线,将构造好的线S角网Mesh、需要绘制的符号颜色结构信 息传递到化ader程序中。
[0028] D.对拐角处的顶点,调整其U值。利用公式U(p)=u'-化*[u'/SL]计算拐角处顶点 在符号
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1