CN111145298A - 顾及线宽一致性的矢量地图栅栏虚线符号绘制方法 - Google Patents
顾及线宽一致性的矢量地图栅栏虚线符号绘制方法 Download PDFInfo
- Publication number
- CN111145298A CN111145298A CN201911363775.4A CN201911363775A CN111145298A CN 111145298 A CN111145298 A CN 111145298A CN 201911363775 A CN201911363775 A CN 201911363775A CN 111145298 A CN111145298 A CN 111145298A
- Authority
- CN
- China
- Prior art keywords
- value
- line
- vector
- point
- line width
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 239000013598 vector Substances 0.000 title claims abstract description 108
- 238000000034 method Methods 0.000 title claims abstract description 58
- 238000013507 mapping Methods 0.000 claims abstract description 6
- 238000006243 chemical reaction Methods 0.000 claims abstract description 4
- 238000002372 labelling Methods 0.000 claims abstract description 3
- 230000004888 barrier function Effects 0.000 claims description 14
- 238000012545 processing Methods 0.000 claims description 12
- 239000003550 marker Substances 0.000 claims description 8
- 230000008569 process Effects 0.000 abstract description 11
- 230000002457 bidirectional effect Effects 0.000 abstract 1
- 230000000694 effects Effects 0.000 description 14
- 238000009877 rendering Methods 0.000 description 10
- 238000004364 calculation method Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 3
- 238000011160 research Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000007423 decrease Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000012800 visualization Methods 0.000 description 2
- YBJHBAHKTGYVGT-ZKWXMUAHSA-N (+)-Biotin Chemical compound N1C(=O)N[C@@H]2[C@H](CCCCC(=O)O)SC[C@@H]21 YBJHBAHKTGYVGT-ZKWXMUAHSA-N 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- FEPMHVLSLDOMQC-UHFFFAOYSA-N virginiamycin-S1 Natural products CC1OC(=O)C(C=2C=CC=CC=2)NC(=O)C2CC(=O)CCN2C(=O)C(CC=2C=CC=CC=2)N(C)C(=O)C2CCCN2C(=O)C(CC)NC(=O)C1NC(=O)C1=NC=CC=C1O FEPMHVLSLDOMQC-UHFFFAOYSA-N 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/20—Drawing from basic elements, e.g. lines or circles
- G06T11/203—Drawing of straight lines or curves
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/001—Texturing; Colouring; Generation of texture or colour
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/20—Drawing from basic elements, e.g. lines or circles
- G06T11/206—Drawing of charts or graphs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/40—Filling a planar surface by adding surface attributes, e.g. colour or texture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T5/00—Image enhancement or restoration
- G06T5/20—Image enhancement or restoration using local operators
- G06T5/30—Erosion or dilatation, e.g. thinning
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
Abstract
本发明公开了一种顾及线宽一致性的矢量地图栅栏虚线符号绘制方法,包括以下步骤:首先初始化矢量线要素,指定以屏幕像素为单位的线宽和虚实比例值,确定世界坐标系和屏幕坐标系之间的转换规则。接着在世界坐标系下对矢量线要素进行三角化,对拐角进行双向标签,对虚实比例值进行线宽映射。然后,构建顾及线宽一致性的GPU状态协议,在CPU中获取初始最大线宽、地图缩放比例系数、虚实比例值等信息,利用状态协议传递到GPU中。最终,在GPU中获取状态协议,动态调整实部栅栏的绘制位置,进行保持线宽一致的栅栏虚线符号绘制。本发明通过构建栅栏虚线符号绘制的状态协议,驱动CPU‑GPU协同工作,实现在地图缩放过程中不改变线宽、不重新三角化、拐角处合理绘制。
Description
技术领域
本发明涉及数字地图制图领域和地理信息系统领域的矢量线要素绘制方法,尤其涉及一种顾及线宽一致性的矢量地图栅栏虚线符号绘制方法。
背景技术
地图是将真实地理世界中各种空间实体信息传递给读图者的有效媒介,地图符号化既是对空间实体的抽象,也是将空间实体进行视觉表达的绘制手段。数字地图制图是通过计算机来进行地图的可视化表达,点、线和面要素的符号化绘制是生成数字地图的基础。其中,矢量线要素的符号化表达既要考虑线宽、颜色、线型等绘图要素,还需要考虑随着地图缩放线宽是否保持一致的问题。栅栏虚线符号是表达矢量线要素的重要方法,通常用于表达铁路线、领海基线、未确定边界等。根据地图配图的需求,栅栏虚线地图符号在诸多情况下都需要随地图缩放保持线宽。
针对这种线宽一致性的绘图需求,现有的研究主要有两大类:
(1)基于纯软件绘制的方法。例如,论文《面向GIS的矢量线状符号填充算法研究》(张海泉,潘懋,吴焕萍,等.《地理与地理信息科学》,2004,20(04):11-14.),给出了一种基于GDI+的纯软件绘制方法来表达矢量线要素。该种方法严格依赖于矢量线的屏幕坐标和屏幕宽度,当地图缩放时,需要不断的进行重新计算和绘制,严重降低了地图显示的效率。针对此效率低下的问题,后续的研究大多数集中于如何用硬件加速的方法,即GPU绘制的方法来实现矢量线符号的绘制。
(2)基于GPU绘制的方法。此类方法主要是研究如何通过GPU着色器(Shader)来绘制线符号。例如,论文《A function-based linear map symbol building and renderingmethod using shader language》(Yue SS,Yang JS,Chen M,等.《International Journalof Geographical Information Science》,2016,30(2):143-16)提出了一种利用OpenGLShader来构建线符号并用GPU绘制。该方法依赖于一个颜色二维数组来表达符号结构,虽然能够通过数组标记来表达和绘制虚线符号,但整个方法中只是针对固定地图比例尺的绘制,对于线宽的一致性问题完全没有涉及;另外,此论文方法通过颜色二维数组来处理虚线,只能绘制矩形的虚线,无法支持栅栏的虚线绘制。而论文《一种基于屏幕的三维地图线状符号渲染方法》(刘君妍,陈雅茜,高亦远,等.《地球信息科学学报》,2018,20(8):1047-1054)提出了将矢量线要素映射成为纹理数据,通过纹理数据来绘制线;该方法主要是针对线要素与地形的融合,线要素的线宽处理明确是随着地图缩放而变化的。此外名称为“基于GPU的地图线形符号绘制方法及系统”(申请号201310125110.6)的中国专利,名为“基于GPU的宽度渐变线型地图符号绘制方法”(申请号201610015703.0)的中国专利,名为“基于GPU的颜色渐变线型地图符号绘制方法”(申请号201610016561.X),都是在分析GPU绘制矢量线要素难点的基础上,提出了用Shader着色器来绘制线符号的方法。但是这些方法都是针对固定比例尺的线符号绘制,当地图比例尺变化时,为了保持线宽不变,前述方法都需要重新三角化和绘制。反复不断的三角化对绘制效率具有明显的影响,由此造成了地图的缩放交互仍然存在效率瓶颈。
相比于实线符号的绘制,栅栏虚线还存在拐角处理的难点。由于栅栏虚线存在实部和虚部,当在拐角处绘制实部(即栅栏)时,容易造成绘制不合理的现象,影响地图可视化的效果。名为“基于GPU的地图矢量线要素拐角合理性绘制方法”(申请号CN201610016109.3)在分析此问题的基础上,提出了基于背景列的方案,但此方法仍然是面向静态线宽的处理方案,无法满足随地图缩放的线宽一致绘制;另外,此方法对于拐角的调整是在CPU三角化过程中实现的,当地图缩放时需要反复三角化、反复在CPU中调整拐角,仍然存在效率问题。论文《基于GDI+的复杂线状符号优化算法》(秦佐,周晓光,刘军生,等.《测绘科学》,2011,04期(04):183-185.)分析了线状符号的转角问题,但其方法只是针对软件GDI+绘制的,不涉及GPU绘制。
因而,如何同时满足(1)随着地图比例尺缩放保持线宽一致,(2)矢量线要素不需要重新进行三角化,(3)栅栏虚线的拐角合理化处理,是数字地图制图领域一个亟待解决的问题。对于栅栏虚线符号而言,这种顾及线宽一致性的绘制需求在本质上依赖于CPU和GPU的协调工作。GPU的绘制依赖于三角面片,当一个矢量线被三角化为栅栏虚线符号后,GPU只能拿到三角形坐标和颜色,整个绘制是无状态的。如何将栅栏虚线符号的地图状态传递给GPU成为解决顾及线宽一致性绘制栅栏虚线符号的关键。
发明内容
本发明的目的是在GPU绘制环境下,针对栅栏虚线地图符号的线宽一致性绘制需求,提供一种能够实现在地图缩放过程中不改变线宽、不重新三角化、拐角处合理绘制的顾及线宽一致性的矢量地图栅栏虚线符号绘制方法。
技术方案:一种顾及线宽一致性的矢量地图栅栏虚线符号绘制方法,包括下列步骤:
步骤1、对矢量线要素的坐标序列进行初始化,设置以像素为单位的屏幕线宽,设置栅栏虚线的虚实比例值;
步骤2、构建矢量线要素的世界坐标系和屏幕坐标系之间的转换规则,通过此规则将屏幕线宽转换为世界坐标系的线宽,根据此世界坐标系线宽:顺序遍历矢量线要素的每个坐标,以半个世界坐标系的线宽为单位,垂直于线走向分别向两侧进行扩张,连接相邻的扩张点生成三角形集合,其中每个三角形:每个顶点都具有沿线走向的U值和垂直线走向的V值,每个顶点都具有所属线段的正向标记P值和反向标记N值,每个顶点都具有一个缩放方向向量D值;在矢量线要素的所有拐角处进行对称三角化处理,通过四个点来表达拐角;
步骤3、组装GPU着色器的状态协议:该状态协议包括两个层次,一个是顶点层,包括U值、V值、正向标记P值、反向标记N值、缩放方向D值,另一个是结构层,包括最大线宽M值、地图比例缩放S值、实部比例P1值、虚部比例P2值;
步骤4、在CPU中获取初始的世界坐标系线宽、地图比例尺缩放系数、虚实比例值,并分别按照状态协议中的M值、S值、P1值、P2值传递到GPU中,由此在GPU着色器中解析状态协议中的U、V、P、N、D、M、S、P1、P2值,动态计算当前线宽在屏幕上需要绘制的像素位置,并完成绘制。
进一步的,所述步骤2中沿线走向的U值是根据每个顶点沿着线要素的距离计算,其中起点扩张出来的两个顶点U值均为0,终点扩张出来的两个顶点U值均为整条线的长度除以线宽,其他点扩张出来的两个顶点U值均根据长度累积值除以线宽获得;垂直线走向的V值是根据每个顶点向两侧扩张的距离计算,线要素上的每个点,其扩张出来的两个顶点位于线走向左侧的V等于1,位于右侧的V等于0;顶点缩放方向的D值是一个二维向量,指明了扩张出来的每个顶点与原始点之间的连接方向,并且不是一个归一化的向量,D值二维向量的长度是根据扩张顶点与原始点之间的距离计算获得的。
进一步的,矢量线要素由首尾相接的一系列线段构成,每个线段有且只有两个点:起点和终点,线段的起点和终点扩张出来的矩形,构成矢量线要素主体部分,相邻线段之间形成的拐角,构成矢量线要素拐角部分;所述矢量线要素主体部分的正向标记P值和反向标记N均大于等于0,矢量线要素拐角部分的正向标记P值和反向标记N值均小于0。具体的:
所述矢量线要素主体部分的正向标记P值和反向标记N值为:
正向标记P值:起点垂直于线走向扩张出来的两个点P值均为0,终点垂直与线走向扩张出来的两个点P值均为该线段的长度除以线宽。
反向标记N值:起点垂直于线走向扩张出来的两个点N值均为该线段的长度除以线宽,终点垂直与线走向扩张出来的两个点N值均为0。
所述步骤2中,在矢量线要素的所有拐角处进行对称三角化处理,通过四个点来表达拐角的具体步骤如下:
A.拐角处的对称三角化处理:
此拐角如果是沿线走向左侧凸起,则由以下四个点构成:由前一线段终点的左侧点、后一线段起点的左侧点、前后线段的左侧交点、前一线段的终点;此拐角如果是沿线走向右侧凸起,则由以下四个点构成:由前一线段终点的右侧点、后一线段起点的右侧点、前后线段的右侧交点、前一线段的终点;无论是左侧凸起还是右侧凸起,拐角处都由且仅由四个点构成,形成的四边形是垂直与线走向对称的。
B.矢量线要素拐角部分的正向标记P值和反向标记N值:
拐角如果是沿线走向左侧凸起:前一线段终点的左侧点、后一线段起点的左侧点、前一线段的终点P值均为-1.0,前后线段的左侧交点P值为:-1.0-(延展长度/线宽),延展长度是前后线段的左侧交点与前一线段终点的左侧点距离;四个点的N值均为延展长度除以凸起长度,凸起长度是前后线段的左侧交点与前一线段终点之间的距离。
拐角如果是沿线走向右侧凸起:前一线段终点的右侧点、后一线段起点的右侧点、前一线段的终点P值均为-1.0,前后线段的右侧交点P值为:-1.0-(延展长度/线宽),延展长度是前后线段的右侧交点与前一线段终点的右侧点距离;四个点的N值均为延展长度除以凸起长度,凸起长度是前后线段的右侧交点与前一线段终点之间的距离。
进一步的,所述步骤3中最大线宽M值是根据步骤2中计算获得的世界坐标系的线宽;地图比例缩放S值是随着地图比例尺缩放动态更新的比例值;实部比例P1值可以是任意小于1.0且大于0.0的浮点数,代表栅栏虚线符号中需要填充颜色的长度,在传递给状态协议之前需要进行线宽映射,即将原始的P1值与线宽相除得到新的P1值;虚部比例P2值可以是任意大于0.0的浮点数,代表栅栏虚线符号中不需要填充颜色(即间隔)的长度,在传递给状态协议之前需要进行线宽映射,即将原始的P2值与线宽相除得到新的P2值;状态协议按照U值、V值、D值、P值、N值、M值、S值、P1值、P2值进行组织,其中U值和V值是一维浮点数、D值是二维浮点数、P值和N值是一维浮点数、M值和S值是一维浮点数、P1值和P2值是一维浮点数,将U值、V值、D值按序组织成四维向量,将P值、N值按序组织成为二维向量,将M值、S值、P1值、P2值按序组织成四维向量,最终形成的状态协议由三个向量构成:U-V-D四维向量、P-N二维向量和M-S-P1-P2四维向量,顾及线宽一致性的矢量地图栅栏虚线符号绘制必须严格遵从此协议,在CPU和GPU之间进行消息传递时也必须严格依照此协议进行消息组装。
进一步的,所述步骤4包括如下内容:
在GPU中根据状态协议U-V-D四维向量、P-N二维向量、M-S-P1-P2四维向量获取相应的信息,解析正向标记P值和反向标记N值;当P值大于等于0时,则处于绘制线段阶段,当P值小于0时,则处于绘制拐角阶段。
通过U值、P1值、P2值来判断实部和虚部:计算方法为SegU=U-[U/(P1+P2)]*(P1+P2);其中U表示当前位置的U值,P1+P2表示实部加上虚部的总长,[U/(P1+P2)]表示U值除以总长得到的值再取整(此取整是指向下取整,即不大于一个小数的最大整数值),SegU是指当前位置在P1+P2总长中的距离;如果SegU小于等于P1则处于实部,反之则处于虚部,实部需要绘制,虚部不需要绘制。
利用P值N值组合来判断是否处于拐角边界,根据状态协议:当P值大于0,N值等于0时,待绘制位置处于拐角的起始边界;当P值等于0,N值大于0时,待绘制位置处于拐角的终止边界;当P值小于0,N值小于0时:待绘制位置处于拐角的内部。
如果待绘制位置处于拐角的起始或者终止边界:如果通过U值、P1值和P2值判断该边界处于实部,则在GPU中调整U值;如果SegU小于等于P1/2,则调整U为U=U-SegU;如果SegU大于P1/2,则调整U为U=U+(P1-SegU);根据状态协议,实部P1值必须小于1.0且大于0.0,所以P1/2是栅栏实部尺寸的一半;通过调整U值,将拐角边界调整到刚好处于栅栏的左边或者右边。
如果待绘制位置处于拐角的内部:根据前述拐角边界的调整策略,本发明所提出的方法在拐角内部不可能出现需要绘制的情形,因而整个拐角内部不需要绘制。
和现有技术相比,本发明具有如下显著优点:本发明可以充分利用GPU硬件加速的绘制性能,突破GPU仅依靠坐标和颜色的无状态绘制局限,通过定制合理的状态协议,将矢量线的走向信息、线宽信息、虚实比例信息、地图缩放比例信息在CPU和GPU之间传递。通过两个四维向量和一个二维向量的组合,能够有效的组装状态协议;按照U-V-D-P-N-M-S-P1-P2的结构能够方便的实现状态内容的获取,从而在GPU的着色器中进行保持线宽的绘制。相比于传统的方法,本发明能够在不重复三角化的基础上,定制清晰的状态协议,实现随着地图比例尺的缩放进行线宽一致的栅栏虚线绘制,从而提升地图的绘制效率和效果。
附图说明
图1是本发明方法的流程示意图;
图2是状态协议的基本结构;
图3是U值、V值和D值的说明,以及基于状态协议的矢量线要素三角化方法说明,(a)是对矢量线要素的U值、V值、D值的示例,(b)是矢量线要素三角化成三角形序列的示意;
图4是矢量线要素三角化后各顶点的U-V值、P-N值示例;
图5是矢量线要素在拐角处的对称三角化处理,以及拐角处相关顶点的D值说明,拐角处的延展长度LE、凸起长度LB的定义说明;
图6是矢量线要素在拐角处的U值、V值、P值、N值说明;
图7是M值、P1值、P2值的说明,以矢量线要素初始线宽的绘制为例;每个栅栏背后的矩形是为了表达实部和虚部作的辅助示意,在真实栅栏虚线绘制中不会绘制此类矩形;
图8是M值、S值、P1值、P2值的说明,以矢量线要素缩放后保持线宽的绘制为例,其中有栅栏填充的部分为真实绘制的线宽,外层虚线部分为原始不处理前的绘制区域(即一开始三角化的结果);每个栅栏背后的矩形是为了表达实部和虚部作的辅助示意,在真实栅栏虚线绘制中不会绘制此类矩形;
图9是栅栏虚线在拐角处不合理绘制的示意;
图10是栅栏虚线在拐角处进行栅栏两侧调整的示意;
图11是利用本发明的方法绘制结果示意图,(a)所示为状态协议中虚实比例为[0.4:0.2]地图比例尺较小的线宽效果,(b)所示为状态协议中虚实比例为[0.4:0.2]地图比例尺变大后线宽的效果仍然一致,(c)所示为状态协议中虚实比例为[0.6:0.4]地图比例尺较小的线宽效果,(d)所示为状态协议中虚实比例为[0.6:0.4]地图比例尺变大后线宽的效果仍然一致。
具体实施方式
下面结合附图和具体实施例对本发明的技术方案做进一步说明。
图1为本发明方法的流程图。该方法包括以下步骤:首先初始化矢量线要素,指定以屏幕像素为单位的线宽和虚实比例值,确定世界坐标系和屏幕坐标系之间的转换规则。接着,在世界坐标系下对矢量线要素进行三角化,对拐角进行双向标签,对虚实比例值进行线宽映射。然后,构建顾及线宽一致性的GPU状态协议,在CPU中获取初始最大线宽、地图缩放比例系数、虚实比例值等信息,利用状态协议传递到GPU中。最终,在GPU中获取状态协议,动态调整实部栅栏的绘制位置,进行保持线宽一致的栅栏虚线符号绘制。
在GPU绘制环境下,三角化是将矢量线要素进行栅栏虚线符号化绘制的关键,但是仅靠三角化并不能满足栅栏虚线符号的绘制需求。GPU着色器获取三角形序列,通过三角形的坐标和颜色来在屏幕上呈现待绘制对象。本质上,GPU的绘制流水线是一种无状态的过程,矢量线的线宽相关信息无法从CPU直接传递给GPU。而对于栅栏虚线符号而言,其需要沿着线的走向、按照确定的线宽进行绘制。基于此,本发明设计了一种面向栅栏虚线符号保持线宽一致性绘制的状态协议。CPU中需要按照此状态协议组织信息,GPU中需要按照此状态协议解析信息。
状态协议包含两个层面,一个是顶点层的U值,V值、D值、P值和N值,另一个是结构层的M值、S值、P1值和P2值,如图2所示;U值、V值、D值、P值、N值、M值、S值、P1值和P2值的内涵和计算方法在后续段落阐述。U值和V值分别是两个浮点型float数值,D值是一个二维向量,其具有X和Y方向的分量D(x)和D(y),P值和N值分别是两个浮点型float数值。M值和S值是两个浮点型的数值,P1值和P2值也是两个浮点型的数值。U-V-D三个值被组装成一个四维向量,P-N两个值被组装成一个二维向量,M、S、P1、P2四个值被组装成一个四维向量。因此,面向栅栏虚线符号的线宽一致性绘制,CPU和GPU之间的信息传递就依赖于这两个四维向量、一个二维向量的组合。之所以将U-V-D组装成一个四维向量、将P-N组装成一个二维向量、将M-S-P1-P2组装成一个四维向量,是为了在CPU-GPU信息传递过程中尽可能减少信息交互的次数,批量进行传递。
对于U-V-D值而言,在图3和图4中给出了相关的计算方法。U-V-D值是附加在每个扩展顶点上的。扩展顶点是指依据矢量线要素上的任一点,按照垂直与线走向的方向分别向两边进行扩张后得到的顶点;其中,扩张距离是线宽的一半(世界坐标系的线宽)。扩张顶点可以分为左侧点和右侧点(根据沿线走向来确定)。在图3(a)中给出线要素A-B-C的顶点扩张说明。以线段A-B为例,线段A-B扩张后形成左侧点A、右侧点A、左侧点B和右侧点B,这四个点虽然可以构造成两个三角形,但线段AB的结构特征被破坏了(A-B线段受到了拐角的影响)。因而,本发明在B点处分别对应于前后两个线段构造了垂向的左侧点B1和左侧点B2,用于区分线段区域和拐角区域。如图3(b)所示,拐角处分别构造左右两个三角形,线段A-B构造两个三角形,线段B-C构造两个三角形。
在图4中给出了线段区域的U-V-D值和P-N值的计算工艺。沿线走向的U值和垂直与线走向V值,起点A左右两侧点的U值为0,拐角点B左右两侧点的U值均为L1,终点C左右两侧点的U值均为L1+L2;所有右侧点的V值均为0,所有左侧点的V值均为1。起点A左右两侧点的P值为L1、N值为0,AB线段控制的B左右两侧点的P值为0、N值为L1;BC线宽控制的B点左右两侧点的P值为L2、N值为0,C点的的P值为0、N值为L2。整体而言,P值是沿着线走向线性递减的,N值是沿着线走向线性递增的。另外,D值是表明扩张顶点方向的二维向量,该向量是依据扩张顶点与关联点获得。需要注意的是,D向量不能进行归一化,其向量长度就是扩张顶点与关联点之间的长度。
考虑到栅栏虚线中的每个栅栏在遇到拐角时,可能会产生绘制不合理的情况(如图9),在U-V-D值的处理过程中,将拐角进行单独处理。矢量线要素的线段部分P-N值均为正值;为了区别拐角,拐角处四个点的P-N值均小于等于-1.0。如图5所示,在拐角处,外扩点之间的距离是“延展长度LE”、外扩点与拐角点之间的距离是“凸起长度LB”。拐角处是对称的三角形结构,左右两侧三角形的处理策略是一致。
以左侧三角形的处理为例,在图6中给出了拐角处U-V-D值和P-N值的计算工艺。对于U-V值而言,拐角处的几个点跟几个相关联的几个点保持一致:B点的左侧点U值为L1、V值为1,B点自己的U值为L1、V值为0.5,拐角点的U值为L1、V为1。对于P-N值而言,B点和B左侧点的P值都为-1.0,拐角点的P值为-1.0-LE,由此沿着AB线段的走向P值是线性减少的。如果有一个虚拟点的P值为-2.0,那么该点、B左侧点、B右侧点、该点的右侧对应点将会形成一个宽高比2:1的矩形,并且刚好将一个半圆放置于其中。因而,在拐角三角形区域内,P值具备有线性的规律,也就支持在GPU中进行逻辑处理。另外,拐角处所有点的N值均为负值-LE/LB,也就是线段AB与线段(拐角点-B点)之间的比值取负,该N值代表了拐角的斜率。图6中给出了线段AB和线段BC之间拐角的左侧部分,右侧部分的处理工艺与左侧一致。图6中所有加虚框的点和坐标均为数学假设点,并不在线要素的三角化结果中,仅用于解释拐角处的绘制工艺。
对于M-S值而言,M值是在初始地图比例尺下显示的最大线宽的值,S值是相对于初始地图比例尺的缩放系数。如图7和图8所示,在GPU中解析状态协议里面的M-S值,利用以下公式重新计算任一扩张顶点的坐标:X=D(x)*M*(1.0-S)/2.0,Y=D(y)*M*(1.0-S)/2.0。D(x)和D(y)分别表示顶点方向向量的X分量和Y分量。在GPU中结合D值、M值和S值,动态计算每个点真正需要绘制的位置。在图8中外部虚线部分为初始比例尺下需要绘制的区域,中间灰色填充部分为缩放比例尺之后需要绘制的区域。可以看出初始区域大,大比例尺区域小;因为在大比例尺下,矢量线要素的扩张顶点直接转换为屏幕坐标后会比初始比例尺大,所以通过D向量和M-S值来控制扩张顶点向内收缩,从而达到一致线宽的绘制效果。
对于P1-P2值而言,栅栏虚线的P1值必须是大于0.0且小于1.0的浮点数,P2值必须是大于0.0的浮点数。在状态协议中是将虚实比例值进行线宽映射的,因而在GPU中利用公式SegU=U-[U/(P1+P2)]*(P1+P2)可以统一的获取当前像素是否在实部,其中U表示当前位置的U值,P1+P2表示实部加上虚部的总长,[U/(P1+P2)]表示U值除以总长得到的值再取整(此取整是指向下取整,即不大于一个小数的最大整数值),SegU是指当前位置在P1+P2总长中的距离。如果SegU小于等于P1则处于实部,反之则处于虚部,实部需要绘制,虚部不需要绘制。如图6所示,随着地图比例尺的缩放,在GPU中进行U值、P1值和P2值与缩放系数S值的相乘,从而动态获取当前比例尺下U值、P1值和P2值,由此实现线宽一致的栅栏虚线绘制。
需要特别说明的是,基于本发明的绘制工艺,在线要素的拐角边界处能够识别是否处于实部区域,从而处理如图9所示的不合理拐角情况。识别拐角边界的方式是:
(1)当P值大于0,N值等于0时,待绘制位置处于拐角的起始边界;
(2)当P值等于0,N值大于0时,待绘制位置处于拐角的终止边界;
(3)当P值小于0,N值小于0时:待绘制位置处于拐角的内部。
如果通过U值和P1-P2值判断该边界处于实部,则在GPU中调整U值;如果SegU小于等于P1/2,则调整U为U=U-SegU;如果SegU大于P1/2,则调整U为U=U+(P1-SegU);根据状态协议,实部P1值必须小于1.0且大于0.0,所以P1/2是栅栏实部尺寸的一半;通过调整U值,将拐角边界调整到刚好处于栅栏的边界。图9中的不合理情形,通过此动态调整方法,变成图10所示的效果。
在图11中给出了两个不同地图比例尺,栅栏虚线符号的绘制效果。左侧是小比例尺,(a)所示为状态协议中虚实比例为[0.4:0.2]地图比例尺较小的线宽效果,(c)所示为状态协议中虚实比例为[0.6:0.4]地图比例尺较小的线宽效果,右侧是大比例尺,(b)所示为状态协议中虚实比例为[0.4:0.2]地图比例尺变大后线宽的效果仍然一致,(d)所示为状态协议中虚实比例为[0.6:0.4]地图比例尺变大后线宽的效果仍然一致;可以看出小比例尺和大比例尺的绘制效果在线宽方面是一致的。
实施例:
相比于传统计算机可视化领域中的栅栏虚线绘制,地图绘制中的栅栏虚线符号需要考虑地图比例尺的变化。GPU绘制环境下,仅通过三角形集合的坐标和颜色来控制绘制流程,无法满足保持线宽一致性的需求。所以本发明设计了一种CPU-GPU状态协议,通过此协议将线宽相关的信息打包传递给GPU,在GPU中能够有序解析这些信息,从而达到顾及线宽一致性的矢量地图栅栏虚线符号绘制。
以下是利用OpenGL Shader给出了本发明的实施例:
(1)GPU状态协议结构
(2)CPU状态协议结构
Claims (6)
1.一种顾及线宽一致性的矢量地图栅栏虚线符号绘制方法,其特征在于,包括下列步骤:
步骤1、对矢量线要素的坐标序列进行初始化,设置以像素为单位的屏幕线宽,设置栅栏虚线的虚实比例值;
步骤2、构建矢量线要素的世界坐标系和屏幕坐标系之间的转换规则,通过此规则将屏幕线宽转换为世界坐标系的线宽,根据此世界坐标系线宽:顺序遍历矢量线要素的每个坐标,以半个世界坐标系的线宽为单位,垂直于线走向分别向两侧进行扩张,连接相邻的扩张点生成三角形集合,其中每个三角形:每个顶点都具有沿线走向的U值和垂直线走向的V值,每个顶点都具有所属线段的正向标记P值和反向标记N值,每个顶点都具有一个缩放方向D值;在矢量线要素的所有拐角处进行对称三角化处理,通过四个点的P-N值来表达拐角;
步骤3、组装GPU着色器的状态协议:该状态协议包括两个层次,一个是顶点层,包括U值、V值、正向标记P值、反向标记N值、缩放方向D值,另一个是结构层,包括最大线宽M值、地图比例缩放S值、实部比例P1值、虚部比例P2值;
步骤4、在CPU中获取初始的世界坐标系线宽、地图比例尺缩放系数、虚实比例值,并分别按照状态协议中的M值、S值、P1值、P2值传递到GPU中,由此在GPU着色器中解析状态协议中的U值、V值、P值、N值、D值、M值、S值、P1值、P2值,动态计算当前线宽在屏幕上需要绘制的像素位置,并完成绘制:
A.在GPU中根据状态协议U-V-D四维向量、P-N二维向量、M-S-P1-P2四维向量获取相应的信息,解析正向标记P值和反向标记N值;当P值大于等于0时,则处于绘制线段阶段,当P值小于0时,则处于绘制拐角阶段;
B.根据值、P1值、P2值来判断实部和虚部:
SegU=U-[U/(P1+P2)]*(P1+P2);
其中,表示当前位置的U值,P1+P2表示实部加上虚部的总长,[U/(P1+P2)]表示U值除以总长得到的值再取整,SegU是指当前位置在P1+P2总长中的距离;如果SegU小于等于P1则处于实部,需要绘制,如果SegU大于P1则处于虚部,不需要绘制;
C.利用P值N值组合来判断是否处于拐角边界,根据状态协议:当P值大于0,N值等于0时,待绘制位置处于拐角的起始边界;当P值等于0,N值大于0时,待绘制位置处于拐角的终止边界;当P值小于0,N值小于0时:待绘制位置处于拐角的内部;
D.待绘制位置处于拐角的起始或者终止边界:如果通过U值、P1值、P2值判断该边界处于实部,则在GPU中调整U值;如果SegU小于等于P1/2,则调整U为U=U-SegU;如果SegU大于P1/2,则调整U为U=U+(P1-SegU);根据状态协议,栅栏形虚线的实部P1值必须小于1.0并且大于0.0,所以P1/2是栅栏实部尺寸的一半;通过调整U值,将拐角边界调整到处于栅栏的左边或者右边。
2.根据权利要求1所述的顾及线宽一致性的矢量地图栅栏虚线符号绘制方法,其特征在于,所述步骤2中:
A.沿线走向的U值根据每个顶点沿着线要素的距离计算获得,其中起点扩张出来的两个顶点U值均为0,终点扩张出来的两个顶点U值均为整条线的长度除以线宽,其它点扩张出来的两个顶点U值均为长度累积值除以线宽;
B.垂直线走向的V值根据每个顶点向两侧扩张的距离计算,线要素上的每个点,其扩张出来的两个顶点位于线走向左侧的V值为1,位于右侧的V值为0;
C.缩放方向D值是一个二维向量,该二维向量的长度根据扩张顶点与原始点之间的距离计算获得。
3.根据权利要求1或2所述的顾及线宽一致性的矢量地图栅栏虚线符号绘制方法,其特征在于,所述步骤2中,矢量线要素由首尾相接的一系列线段构成,每个线段有且只有两个点:起点和终点,线段的起点和终点扩张出来的矩形,构成矢量线要素主体部分,相邻线段之间形成的拐角,构成矢量线要素拐角部分;所述矢量线要素主体部分的正向标记P值和反向标记N均大于等于0,矢量线要素拐角部分的正向标记P值和反向标记N值均小于0。
4.根据权利要求3所述的顾及线宽一致性的矢量地图栅栏虚线符号绘制方法,其特征在于,所述矢量线要素主体部分的正向标记P值和反向标记N值为:
正向标记P值:起点垂直于线走向扩张出来的两个点P值均为0,终点垂直与线走向扩张出来的两个点P值均为该线段的长度除以线宽;
反向标记N值:起点垂直于线走向扩张出来的两个点N值均为该线段的长度除以线宽,终点垂直与线走向扩张出来的两个点N值均为0。
5.根据权利要求3所述的顾及线宽一致性的矢量地图栅栏虚线符号绘制方法,其特征在于,所述步骤2中,在矢量线要素的所有拐角处进行对称三角化处理,通过四个点来表达拐角的具体步骤如下:
A.拐角处的对称三角化处理:
当拐角为沿线走向左侧凸起时,由以下四个点构成:前一线段终点的左侧点、后一线段起点的左侧点、前后线段的左侧交点、前一线段的终点;当拐角为沿线走向右侧凸起时,由以下四个点构成:前一线段终点的右侧点、后一线段起点的右侧点、前后线段的右侧交点、前一线段的终点;所述四个点形成的四边形是垂直于线走向对称的;
B.矢量线要素拐角部分的正向标记P值和反向标记N值:
B1.当拐角为沿线走向左侧凸起时:前一线段终点的左侧点、后一线段起点的左侧点、前一线段的终点P值均为-1.0,前后线段的左侧交点P值为:-1.0-(延展长度/线宽),延展长度是前后线段的左侧交点与前一线段终点的左侧点距离;四个点的N值均为延展长度除以凸起长度,凸起长度是前后线段的左侧交点与前一线段终点之间的距离;
B2.当拐角为沿线走向右侧凸起时:前一线段终点的右侧点、后一线段起点的右侧点、前一线段的终点P值均为-1.0,前后线段的右侧交点P值为:-1.0-(延展长度/线宽),延展长度是前后线段的右侧交点与前一线段终点的右侧点距离;四个点的N值均为延展长度除以凸起长度,凸起长度是前后线段的右侧交点与前一线段终点之间的距离。
6.据权利要求1所述的顾及线宽一致性的矢量地图栅栏虚线符号绘制方法,其特征在于,所述步骤3中:
A.最大线宽M值是世界坐标系的线宽;
B.地图比例缩放S值是随着地图比例尺缩放动态更新的比例值;
C.实部比例P1值是任意小于1.0并且大于0.0的浮点数,代表栅栏虚线符号中需要填充颜色的长度,在传递给状态协议之前需要进行线宽映射,即将原始的P1值与线宽相除得到新的P1值;
D.虚部比例P2值是任意大于0.0的浮点数,代表栅栏虚线符号中不需要填充颜色的长度,在传递给状态协议之前需要进行线宽映射,即将原始的P2值与线宽相除得到新的P2值;
E.状态协议:按照U值、V值、D值、P值、N值、M值、S值、P1值、P2值进行组织,其中U值和V值是一维浮点数、D值是二维浮点数、P值和N值是一维浮点数、M值和S值是一维浮点数、P1值和P2值是一维浮点数,将U值、V值、D值按序组织成四维向量,将P值、N值按序组织成为二维向量,将M值、S值、P1值、P2值按序组织成四维向量,最终形成的状态协议由三个向量构成:U-V-D四维向量、P-N二维向量和M-S-P1-P2四维向量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911363775.4A CN111145298B (zh) | 2019-12-26 | 2019-12-26 | 顾及线宽一致性的矢量地图栅栏虚线符号绘制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911363775.4A CN111145298B (zh) | 2019-12-26 | 2019-12-26 | 顾及线宽一致性的矢量地图栅栏虚线符号绘制方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111145298A true CN111145298A (zh) | 2020-05-12 |
CN111145298B CN111145298B (zh) | 2023-04-21 |
Family
ID=70520329
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911363775.4A Active CN111145298B (zh) | 2019-12-26 | 2019-12-26 | 顾及线宽一致性的矢量地图栅栏虚线符号绘制方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111145298B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113284215A (zh) * | 2021-06-09 | 2021-08-20 | 智道网联科技(北京)有限公司 | 高精地图的虚线处理方法、装置及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101159065A (zh) * | 2007-11-08 | 2008-04-09 | 武汉大学 | 复杂地图符号的计算机自动绘制方法 |
CN103268626A (zh) * | 2013-04-11 | 2013-08-28 | 江苏省在这里数字科技有限公司 | 基于gpu的地图线形符号绘制方法及系统 |
CN105513110A (zh) * | 2016-01-11 | 2016-04-20 | 南京师范大学 | 基于gpu的宽度渐变线型地图符号绘制方法 |
CN105701759A (zh) * | 2016-01-11 | 2016-06-22 | 南京师范大学 | 基于gpu的地图矢量线要素拐角合理性绘制方法 |
CN109685901A (zh) * | 2018-12-10 | 2019-04-26 | 西北工业大学 | 一种军标符号标绘中动态箭标绘制方法 |
-
2019
- 2019-12-26 CN CN201911363775.4A patent/CN111145298B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101159065A (zh) * | 2007-11-08 | 2008-04-09 | 武汉大学 | 复杂地图符号的计算机自动绘制方法 |
CN103268626A (zh) * | 2013-04-11 | 2013-08-28 | 江苏省在这里数字科技有限公司 | 基于gpu的地图线形符号绘制方法及系统 |
CN105513110A (zh) * | 2016-01-11 | 2016-04-20 | 南京师范大学 | 基于gpu的宽度渐变线型地图符号绘制方法 |
CN105701759A (zh) * | 2016-01-11 | 2016-06-22 | 南京师范大学 | 基于gpu的地图矢量线要素拐角合理性绘制方法 |
CN109685901A (zh) * | 2018-12-10 | 2019-04-26 | 西北工业大学 | 一种军标符号标绘中动态箭标绘制方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113284215A (zh) * | 2021-06-09 | 2021-08-20 | 智道网联科技(北京)有限公司 | 高精地图的虚线处理方法、装置及电子设备 |
CN113284215B (zh) * | 2021-06-09 | 2023-08-29 | 智道网联科技(北京)有限公司 | 高精地图的虚线处理方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111145298B (zh) | 2023-04-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101916341B1 (ko) | 스크린 위치에 따라 달라지는 분해능을 가진 다수의 렌더 타겟을 위한 텍스처 매핑을 위한 그라디언트 조정 | |
EP3129976B1 (en) | Varying effective resolution by screen location by altering rasterization parameters | |
KR101925292B1 (ko) | 비-정규 직교 그리드로의 텍스처 매핑을 위한 그라디언트 조정 | |
KR20120034293A (ko) | 정점 처리 방법 및 장치 | |
CN111145302A (zh) | 顾及线宽一致性的矢量地图方形虚线符号绘制方法 | |
CN111145298A (zh) | 顾及线宽一致性的矢量地图栅栏虚线符号绘制方法 | |
CN111127589B (zh) | 顾及线宽一致性的矢量地图圆形虚线符号绘制方法 | |
CN111127297B (zh) | 顾及线宽一致性的矢量地图实线符号绘制方法 | |
CN111145301A (zh) | 顾及线宽一致性的矢量地图实线符号端头绘制方法 | |
CN111145300A (zh) | 顾及线宽一致性的矢量地图尖角形虚线符号绘制方法 | |
CN111028352A (zh) | 顾及线宽一致性的矢量地图线符号开放尖角形箭头绘制方法 | |
CN111145296B (zh) | 顾及线宽一致性的矢量地图线符号圆形箭头绘制方法 | |
CN111145299B (zh) | 顾及线宽一致性的矢量地图实线符号拐角绘制方法 | |
CN101764935B (zh) | 一种基于像素空间掩码矩阵的形态渐变径向色彩填充方法 | |
US11417058B2 (en) | Anti-aliasing two-dimensional vector graphics using a multi-vertex buffer | |
CN111145303A (zh) | 顾及线宽一致性的矢量地图线符号尖角形箭头绘制方法 | |
CN111028353A (zh) | 顾及线宽一致性的矢量地图线符号燕尾形箭头绘制方法 | |
CN111028351B (zh) | 顾及线宽一致性的矢量地图线符号半尖角形箭头绘制方法 | |
CN111145297B (zh) | 顾及线宽一致性的矢量地图线符号钻石形箭头绘制方法 | |
CN111080744B (zh) | 顾及线宽一致性的矢量地图线符号半开放尖角形箭头绘制方法 | |
CN111145295A (zh) | 顾及线宽一致性的矢量地图线符号半燕尾形箭头绘制方法 | |
CN116091742B (zh) | 一种三维场景的相机观测点展示优化的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |