CN111145299A - 顾及线宽一致性的矢量地图实线符号拐角绘制方法 - Google Patents
顾及线宽一致性的矢量地图实线符号拐角绘制方法 Download PDFInfo
- Publication number
- CN111145299A CN111145299A CN201911363794.7A CN201911363794A CN111145299A CN 111145299 A CN111145299 A CN 111145299A CN 201911363794 A CN201911363794 A CN 201911363794A CN 111145299 A CN111145299 A CN 111145299A
- Authority
- CN
- China
- Prior art keywords
- line
- value
- point
- vector
- corner
- 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 109
- 238000000034 method Methods 0.000 title claims abstract description 52
- 238000012545 processing Methods 0.000 claims abstract description 19
- 238000006243 chemical reaction Methods 0.000 claims abstract description 6
- 238000004364 calculation method Methods 0.000 claims description 5
- 238000002372 labelling Methods 0.000 claims description 2
- 238000009877 rendering Methods 0.000 description 14
- 230000008569 process Effects 0.000 description 9
- 230000000694 effects Effects 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 3
- 239000003550 marker Substances 0.000 description 3
- 238000011160 research Methods 0.000 description 3
- 239000003086 colorant Substances 0.000 description 2
- 230000007423 decrease Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 238000012800 visualization Methods 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
-
- 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
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绘制。该方法依赖于一个颜色二维数组来表达符号结构,整个方法中只是针对固定地图比例尺的线符号绘制,对于线宽的一致性问题并没有涉及。另外,此论文中对于线拐角的处理粗暴的进行特定的三角化(此论文中的Fig 16),增加了三角形集合的数量,也由此影响了绘制效率。而论文《一种基于屏幕的三维地图线状符号渲染方法》(刘君妍,陈雅茜,高亦远,等.《地球信息科学学报》,2018,20(8):1047-1054) 提出了将矢量线要素映射成为纹理数据,通过纹理数据来绘制线;该方法主要是针对线要素与地形的融合,线要素的线宽处理明确是随着地图缩放而变化的。此外名称为“基于GPU的地图线形符号绘制方法及系统”(申请号201310125110.6)的中国专利,名为“基于GPU的宽度渐变线型地图符号绘制方法”(申请号201610015703.0)的中国专利,都是在分析GPU绘制矢量线要素难点的基础上,提出了用Shader着色器来绘制线符号的方法。但是这些方法都是针对固定比例尺的线符号绘制,当地图比例尺变化时,为了保持线宽不变,前述方法都需要重新三角化和绘制。反复不断的三角化对绘制效率具有明显的影响,由此造成了地图的缩放交互仍然存在效率瓶颈。专利“基于GPU的地图矢量线要素拐角合理性绘制方法”针对矢量线要素在拐角处绘制可能产生歧义理解的问题,提出了基于颜色表和背景列的方式来规避拐角的不合理绘制;该方法也只是在固定线宽下的策略,并且其在拐角处的三角化策略仍然是为不同的拐角样式进行不同的三角化处理,由此增加了拐角处的三角形数量,影响绘制效率。
因而,如何同时满足(1)随着地图比例尺缩放保持线宽一致,(2)地图缩放时矢量线要素不需要重新进行三角化,(3)地图缩放时线要素拐角不需要重新三角化,(4) 不同的拐角样式只需要一种三角化,是数字地图制图领域一个亟待解决的问题。对于最经常使用的实线符号而言,这种顾及线宽一致性的绘制需求在本质上依赖于CPU和 GPU的协调工作。GPU的绘制是依赖于三角面片的,当一个矢量线被三角化为实线符号后,GPU只能拿到三角形坐标和颜色,整个绘制是无状态的。如何将实线符号的地图状态传递给GPU成为解决顾及线宽一致性绘制实线符号拐角的关键。
发明内容
本发明的目的是在GPU绘制环境下,针对实线地图符号拐角的线宽一致性绘制需求,提供一种能够在地图缩放过程中不改变线宽、不重新三角化,实现不同拐角样式都对应同一种矩形区域、减少三角形数量的顾及线宽一致性的矢量地图实线符号拐角绘制方法。
技术方案:一种顾及线宽一致性的矢量地图实线符号拐角绘制方法,包括下列步骤:
步骤1、对矢量线要素的坐标序列进行初始化,设置以像素为单位的屏幕线宽,设置实线拐角的样式;
步骤2、构建矢量线要素的世界坐标系和屏幕坐标系之间的转换规则,通过此规则将屏幕线宽转换为世界坐标系的线宽,根据此世界坐标系线宽:顺序遍历矢量线要素的每个坐标,由线生成三角形集合,其中每个三角形:每个顶点都具有沿线走向的U值和垂直线走向的V值,每个顶点都具有所属线段的正向标记P值和反向标记N值,每个顶点都具有一个缩放方向向量D值;在矢量线要素的所有拐角处进行对称三角化处理,通过四个点来表达所有样式的拐角;
步骤3、组装GPU着色器的状态协议:该状态协议包括两个层次,一个是由U值、 V值、正向标记P值、反向标记N值、缩放方向D值构成的顶点层,另一个是由最大线宽M值、地图比例缩放S值、拐角样式J值构成的结构层;不同样式的实线拐角一一对应于不同的拐角样式J值;
步骤4、在CPU中获取初始的世界坐标系线宽和地图比例尺缩放系数,并分别按照状态协议中的M值、S值和J值传递到GPU中,由此在GPU着色器中解析状态协议中的U、V、P、N、D、M、S、J值,动态计算当前实线拐角需要绘制的像素位置,并最终完成绘制。
进一步的,所述步骤1中实线拐角样式分为四种,分别为圆角、尖角、平角和缺角,这四种样式与步骤3状态协议中的J值严格一一对应。
进一步的,所述步骤2中,沿线走向的U值根据每个顶点沿着线要素的距离计算,其中起点扩张出来的两个顶点U值均为0,终点扩张出来的两个顶点U值均为整条线的长度除以线宽,其他点扩张出来的两个顶点U值均根据长度累积值除以线宽获得;垂直线走向的V值根据每个顶点向两侧扩张的距离计算,线要素上的每个点,其扩张出来的两个顶点位于线走向左侧的V为1,位于右侧的0;顶点缩放方向的D值是一个二维向量,指明了扩张出来的每个顶点与原始点之间的连接方向,并且不是一个归一化的向量, D值二维向量的长度是根据扩张顶点与原始点之间的距离计算获得的。
进一步的,一个带线宽的矢量线要素包括主体部分和拐角部分;矢量线由首尾相接的一系列线段构成,每个线段有且只有两个点:起点和终点,线段的起点和终点扩张出来的矩形,构成所述主体部分;相邻线段之间形成的拐角,构成所述拐角部分;所述主体部分的正向标记P值和反向标记N均大于等于0,拐角部分的正向标记P值和反向标记N均小于0,其中:
主体部分的正向标记P值:起点垂直于线走向扩张出来的两个点P值均为0,终点垂直于线走向扩张出来的两个点P值均为该线段的长度除以线宽;
主体部分的反向标记N值:起点垂直于线走向扩张出来的两个点N值均为该线段的长度除以线宽,终点垂直与线走向扩张出来的两个点N值均为0。
在矢量线要素的拐角处进行对称三角化处理,并通过四个点的P-N值来表达拐角的样式的具体步骤如下:
A.对称三角化处理:
当拐角为沿线走向左侧凸起时,由以下四个点构成:前一线段终点的左侧点、后一线段起点的左侧点、前后线段的左侧交点和前一线段的终点;当拐角为沿线走向右侧凸起时,由以下四个点构成:前一线段终点的右侧点、后一线段起点的右侧点、前后线段的右侧交点和前一线段的终点;无论是左侧凸起还是右侧凸起,拐角处都由且仅由四个点构成,形成的四边形是垂直于线走向对称的。
B.矢量线要素拐角部分的正向标记P值和反向标记N值:
B1.当拐角为沿线走向左侧凸起时:前一线段终点的左侧点、后一线段起点的左侧点以及前一线段的终点P值均为-1.0,前后线段的左侧交点P值为:-1.0-(延展长度/线宽),延展长度是前后线段的左侧交点与前一线段终点的左侧点距离;四个点的N值均为延展长度除以凸起长度,凸起长度是前后线段的左侧交点与前一线段终点之间的距离;
B2.当拐角为沿线走向右侧凸起时:前一线段终点的右侧点、后一线段起点的右侧点以及前一线段的终点P值均为-1.0,前后线段的右侧交点P值为:-1.0-(延展长度/线宽),延展长度是前后线段的右侧交点与前一线段终点的右侧点距离;四个点的N值均为延展长度除以凸起长度,凸起长度是前后线段的右侧交点与前一线段终点之间的距离。
进一步的,所述步骤3中最大线宽M值是根据步骤2中计算获得的世界坐标系的线宽;地图比例缩放S值是随着地图比例尺缩放动态更新的比例值;拐角样式J值是对应于圆角、尖角、平角和缺角的四个标记值,四个标记值互不相同;按照U值、V值、 D值、P值、N值、M值、S值、J值进行组织,其中U值和V值是一维浮点数、D值是二维浮点数、P值和N值是一维浮点数、M值和S值是一维浮点数、J值也是一维浮点数,将U值、V值、D值按序组织成四维向量,将P值、N值按序组织成为二维向量,将M值、S值、J值按序组织成三维向量,最终形成的状态协议由三个向量构成:U-V-D 四维向量、P-N二维向量和M-S-J三维向量,顾及线宽一致性的矢量地图实线符号拐角绘制必须严格遵从此协议,在CPU和GPU之间进行消息传递时也必须严格依照此协议进行消息组装。
和现有技术相比,本发明具有如下显著优点:本发明可以充分利用GPU硬件加速的绘制性能,突破GPU仅依靠坐标和颜色的无状态绘制局限,通过定制合理的状态协议,将矢量线的走向信息、线宽信息、拐角样式信息、地图缩放比例信息在CPU和GPU 之间传递。通过一个四维向量、一个二维向量和一个三维向量的组合,能够有效的组装状态协议;按照U-V-D-P-N-M-S-J的结构能够方便的实现状态内容的获取,从而在GPU 的着色器中进行保持线宽一致的实线拐角绘制。相比于传统的方法,本发明能够在不重复三角化的基础上,定制清晰的状态协议,实现随着地图比例尺的缩放进行线宽一致的实线拐角绘制,从而提升地图的绘制效率和效果。
附图说明
图1是本发明方法的流程示意图;
图2是状态协议的基本结构;
图3是矢量线要素的三角化说明;
图4是矢量线要素在非拐角区域的U值、V值、D值、P值和N值说明;
图5是矢量线要素在拐角处的对称三角化处理,以及拐角处相关顶点的D值说明,拐角处的延展长度LE、凸起长度LB的定义说明;
图6是矢量线要素在拐角处的U值、V值、P值、N值说明;
图7是矢量线要素在GPU中处理不同样式拐角的说明,(a)是圆角的处理工艺,(b)是尖角的处理工艺,(c)是平角的处理工艺,(d)是缺角的处理工艺;
图8是M值和S值的说明,以及地图缩放后线宽处理的方法说明,其中灰色填充部分为真实绘制的线宽,外层虚线部分为原始不处理前的绘制区域(即一开始三角化的结果);
图9是利用本发明的方法绘制结果示意图,(a)小比例尺圆角,(b)小比例尺尖角,(c)小比例尺平角,(d)小比例尺缺角,(e)大比例尺圆角,(f)大比例尺尖角,(g) 大比例尺平角,(h)大比例尺缺角。
具体实施方式
下面结合附图和具体实施例对本发明的技术方案做进一步说明。
图1为本发明方法的流程图。该方法包括以下步骤:首先对待绘制的矢量线要素进行初始化,指定需要在屏幕上呈现的线宽(像素单位),指定矢量线要素的拐角样式,并确定矢量线要素的世界坐标系和屏幕坐标系之间的转换规则。接着,按照坐标转换规则将屏幕线宽转换为世界坐标系的线宽,并在世界坐标系下对矢量线要素进行三角化操作,同时对矢量线要素的拐角进行对称三角化处理。然后,按照所构建的顾及线宽一致性的GPU状态协议,在CPU中获取地图缩放比例系数、初始线宽大小、拐角样式等信息,并利用状态协议传递到GPU中。最终,在GPU中获取初始最大线宽、缩放系数和拐角样式等状态后进行保持线宽一致的实线符号拐角绘制。
在GPU绘制环境下,三角化是将矢量线要素进行实线符号化绘制的关键。GPU着色器获取三角形序列,通过三角形的坐标和颜色来在屏幕上呈现待绘制对象。本质上, GPU的绘制流水线是一种无状态的过程,矢量线的线宽相关信息无法从CPU直接传递给GPU。对于实线符号而言,其需要沿着线的走向、按照确定的线宽进行绘制。基于此需求,本发明设计了一种面向实线符号保持线宽一致性绘制的状态协议。CPU中需要按照此状态协议组织信息,GPU中需要按照此状态协议解析信息。
状态协议包含两个层面,一个是顶点层,包括U值,V值、P值、N值和D值,另一个是结构层,包括M值、S值和J值,如图2所示;U值、V值、P值、N值、D值、 M值、S值和J值的内涵和计算方法在后续几个段落阐述。U值和V值分别是两个浮点型float数值,P值和N值分别是两个浮点型float数值,D值是一个二维向量,其具有 X和Y方向的分量D(x)和D(y)。M值、S值和J值是三个浮点型的数值。U-V-D三个值被组装成一个四维向量,P-N两个值被组装成一个二维向量,M、S和J三个值被组装成一个三维向量。因此,面向实线符号拐角的线宽一致性绘制,CPU和GPU之间的信息传递就依赖于四维向量、二维向量和三维向量的组合。之所以将U-V-D组装成一个四维向量、将P-N组装成一个二维向量、将M-S-J组装成一个三维向量,是为了在CPU-GPU信息传递过程中尽可能减少信息交互的次数,批量进行传递。
在图3中给出了矢量线要素的线宽扩张策略,线要素上的点A、B、C顺序排列,对每个点进行垂直于线走向的扩张,得到相应的左侧点和右侧点。线段AB的长度除以线宽、线段BC的长度除以线宽分别获为L1和L2。线段AB和BC形成的拐角将会做单独处理,图3中的阴影部分为矢量线绘制的主体。在图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向量不能进行归一化,其向量长度就是扩张顶点与关联点之间的长度。
矢量线由首尾相接的一系列线段构成,每个线段有且只有两个点,即起点和终点;线段起点和终点扩张出来的点构成的矩形,为矢量线要素的主体部分;相邻线段之间形成的拐角,为矢量线要素的拐角部分,即一个带线宽的矢量线要素由主体部分和拐角部分组成。
矢量线要素的主体部分P-N值均为大于等于0;为了区别拐角,拐角处四个点的P-N值均小于等于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中所有加虚框的点和坐标均为数学假设点,并不在线要素的三角化结果中,仅用于解释拐角处的绘制工艺。
基于U-V值和P-N值,在图7中给出了如何利用GPU来进行像素计算,从而保证不需要为每一种拐角样式定制不同的三角化策略。在同一个三角形区域内,图7的(a) (b)(c)(d)分别是圆角、尖角、平角和缺角的绘制工艺。圆角的绘制工艺是仅绘制拐角三角形中满足:(P+1.0)*(P+1.0)+(V-0.5)*(V-0.5)<=0.25,即距离小于等于0.5的部分。尖角是完整绘制拐角三角形。平角是仅绘制拐角三角形中满足:(P+1.0)*(-N)>V,即满足在拐角斜率以下的部分。缺角是完全不绘制拐角三角形。
对于M-S-J值而言,M值是在初始地图比例尺下显示的最大线宽的值,S值是相对于初始地图比例尺的缩放系数,J值是指定拐角样式的枚举值。如图5所示,在GPU中解析状态协议里面的M-S-J值,利用以下公式重新计算任一扩张顶点的坐标: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值来控制扩张顶点向内收缩,从而达到一致线宽的绘制效果。
在图9中给出了两个不同地图比例尺,实线符号不同拐角样式的绘制效果。上排是小比例尺,(a)为小比例尺圆角,(b)为小比例尺尖角,(c)为小比例尺平角,(d)为小比例尺缺角,下排是大比例尺,(e)为大比例尺圆角,(f)为大比例尺尖角,(g)为大比例尺平角,(h)为大比例尺缺角。可以看出小比例尺和大比例尺的绘制效果在线宽方面是一致的。
实施例:
相比于传统计算机可视化领域中的实线绘制,地图绘制中的实线符号需要考虑地图比例尺的变化。GPU绘制环境下,仅通过三角形集合的坐标和颜色来控制绘制流程,无法满足保持线宽一致性的需求。所以本发明设计了一种CPU-GPU状态协议,通过此协议将线宽相关的信息打包传递给GPU,在GPU中能够有序解析这些信息,从而达到顾及线宽一致性的矢量地图实线符号拐角绘制。
以下是利用OpenGL Shader给出了本发明的实施例:
(1)GPU状态协议结构
(2)CPU状态协议结构
Claims (9)
1.一种顾及线宽一致性的矢量地图实线符号拐角绘制方法,其特征在于,包括下列步骤:
步骤1、对矢量线要素的坐标序列进行初始化,设置以像素为单位的屏幕线宽,设置实线拐角的样式;
步骤2、构建矢量线要素的世界坐标系和屏幕坐标系之间的转换规则,通过此规则将屏幕线宽转换为世界坐标系的线宽,根据此世界坐标系线宽:顺序遍历矢量线要素的每个坐标,由线生成三角形集合,其中每个三角形的顶点都具有沿线走向的U值和垂直线走向的V值,每个顶点都具有所属线段的正向标记P值和反向标记N值,每个顶点还具有一个缩放方向D值;在矢量线要素的拐角处进行对称三角化处理,通过四个点的P-N值来表达不同样式的实线拐角;
步骤3、组装GPU着色器的状态协议:该状态协议包括两个层次,一个是顶点层,包括U值、V值、正向标记P值、反向标记N值、缩放方向D值,另一个结构层,包括最大线宽M值、地图比例缩放S值、拐角样式J值;不同样式的实线拐角一一对应于不同的拐角样式J值;
步骤4、在CPU中获取初始的世界坐标系线宽和地图比例尺缩放系数,并分别按照状态协议中的M值、S值和J值传递到GPU中,由此在GPU着色器中解析状态协议中的U值、V值、P值、N值、D值、M值、S值、J值,动态计算当前实线拐角需要绘制的像素位置,并完成绘制。
2.根据权利要求1所述的顾及线宽一致性的矢量地图实线符号拐角绘制方法,其特征在于,所述实线拐角样式包括圆角、尖角、平角和缺角。
3.根据权利要求1或2所述的顾及线宽一致性的矢量地图实线符号拐角绘制方法,其特征在于,所述步骤2中:
A.沿线走向的U值根据每个顶点沿着线要素的距离计算获得,其中起点扩张出来的两个顶点U值均为0,终点扩张出来的两个顶点U值均为整条线的长度除以线宽,其他点扩张出来的两个顶点U值均为长度累积值除以线宽;
B.垂直线走向的V值根据每个顶点向两侧扩张的距离计算获得,线要素上的每个点,其扩张出来的两个顶点位于线走向左侧的V值为1,位于右侧的V值为0;
C.缩放方向D值为一个二维向量,该二维向量的长度根据扩张顶点与原始点之间的距离计算获得。
4.根据权利要求1或2所述的顾及线宽一致性的矢量地图实线符号拐角绘制方法,其特征在于,所述步骤2中,矢量线要素由首尾相接的一系列线段构成,每个线段有且只有两个点:起点和终点,线段的起点和终点扩张出来的矩形,构成矢量线要素主体部分,相邻线段之间形成的拐角,构成矢量线要素拐角部分;所述矢量线要素主体部分的正向标记P值和反向标记N均大于等于0,矢量线要素拐角部分的正向标记P值和反向标记N值均小于0。
5.根据权利要求4所述的顾及线宽一致性的矢量地图实线符号拐角绘制方法,其特征在于,所述矢量线要素主体部分的正向标记P值和反向标记N值为:
正向标记P值:起点垂直于线走向扩张出来的两个点P值均为0,终点垂直于线走向扩张出来的两个点P值均为该线段的长度除以线宽;
反向标记N值:起点垂直于线走向扩张出来的两个点N值均为该线段的长度除以线宽,终点垂直与线走向扩张出来的两个点N值均为0。
6.根据权利要求4所述的顾及线宽一致性的矢量地图实线符号拐角绘制方法,其特征在于,在矢量线要素的拐角处进行对称三角化处理,通过四个点的P-N值来表达不同样式的实线拐角的具体步骤如下:
A.对称三角化处理:
当拐角为沿线走向左侧凸起时,由以下四个点构成:前一线段终点的左侧点、后一线段起点的左侧点、前后线段的左侧交点和前一线段的终点;当拐角为沿线走向右侧凸起时,由以下四个点构成:前一线段终点的右侧点、后一线段起点的右侧点、前后线段的右侧交点和前一线段的终点;所述四个点形成的四边形是垂直于线走向对称的;
B.矢量线要素拐角部分的正向标记P值和反向标记N值:
B1.当拐角为沿线走向左侧凸起时:前一线段终点的左侧点、后一线段起点的左侧点以及前一线段的终点P值均为-1.0,前后线段的左侧交点P值为:-1.0-(延展长度/线宽),延展长度是前后线段的左侧交点与前一线段终点的左侧点距离;四个点的N值均为延展长度除以凸起长度,凸起长度是前后线段的左侧交点与前一线段终点之间的距离;
B2.当拐角为沿线走向右侧凸起时:前一线段终点的右侧点、后一线段起点的右侧点以及前一线段的终点P值均为-1.0,前后线段的右侧交点P值为:-1.0-(延展长度/线宽),延展长度是前后线段的右侧交点与前一线段终点的右侧点距离;四个点的N值均为延展长度除以凸起长度,凸起长度是前后线段的右侧交点与前一线段终点之间的距离。
7.根据权利要求1所述的顾及线宽一致性的矢量地图实线符号拐角绘制方法,其特征在于,所述步骤3中,最大线宽M值为世界坐标系的线宽。
8.根据权利要求1所述的顾及线宽一致性的矢量地图实线符号拐角绘制方法,其特征在于,所述步骤3中,地图比例缩放S值是随着地图比例尺缩放动态更新的比例值。
9.根据权利要求1所述的顾及线宽一致性的矢量地图实线符号拐角绘制方法,其特征在于,所述步骤3中,状态协议按照U值、V值、D值、P值、N值、M值、S值、J值进行组织,其中U值和V值是一维浮点数、D值是二维浮点数、P值和N值是一维浮点数、M值和S值是一维浮点数、J值也是一维浮点数,将U值、V值、D值按序组织成四维向量,将P值、N值按序组织成为二维向量,将M值、S值、J值按序组织成三维向量,最终形成的状态协议由三个向量构成:U-V-D四维向量、P-N二维向量和M-S-J三维向量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911363794.7A CN111145299B (zh) | 2019-12-26 | 2019-12-26 | 顾及线宽一致性的矢量地图实线符号拐角绘制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911363794.7A CN111145299B (zh) | 2019-12-26 | 2019-12-26 | 顾及线宽一致性的矢量地图实线符号拐角绘制方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111145299A true CN111145299A (zh) | 2020-05-12 |
CN111145299B CN111145299B (zh) | 2023-08-22 |
Family
ID=70520330
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911363794.7A Active CN111145299B (zh) | 2019-12-26 | 2019-12-26 | 顾及线宽一致性的矢量地图实线符号拐角绘制方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111145299B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103268626A (zh) * | 2013-04-11 | 2013-08-28 | 江苏省在这里数字科技有限公司 | 基于gpu的地图线形符号绘制方法及系统 |
CN105513110A (zh) * | 2016-01-11 | 2016-04-20 | 南京师范大学 | 基于gpu的宽度渐变线型地图符号绘制方法 |
CN105701855A (zh) * | 2016-01-11 | 2016-06-22 | 南京师范大学 | 基于符号结构的线型地图符号反走样绘制方法 |
CN105701759A (zh) * | 2016-01-11 | 2016-06-22 | 南京师范大学 | 基于gpu的地图矢量线要素拐角合理性绘制方法 |
CN105719230A (zh) * | 2016-01-11 | 2016-06-29 | 南京师范大学 | 基于gpu的颜色渐变线型地图符号绘制方法 |
-
2019
- 2019-12-26 CN CN201911363794.7A patent/CN111145299B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103268626A (zh) * | 2013-04-11 | 2013-08-28 | 江苏省在这里数字科技有限公司 | 基于gpu的地图线形符号绘制方法及系统 |
CN105513110A (zh) * | 2016-01-11 | 2016-04-20 | 南京师范大学 | 基于gpu的宽度渐变线型地图符号绘制方法 |
CN105701855A (zh) * | 2016-01-11 | 2016-06-22 | 南京师范大学 | 基于符号结构的线型地图符号反走样绘制方法 |
CN105701759A (zh) * | 2016-01-11 | 2016-06-22 | 南京师范大学 | 基于gpu的地图矢量线要素拐角合理性绘制方法 |
CN105719230A (zh) * | 2016-01-11 | 2016-06-29 | 南京师范大学 | 基于gpu的颜色渐变线型地图符号绘制方法 |
Non-Patent Citations (1)
Title |
---|
蒋雪: "基于地图视觉感受的网络地图多尺度表达设计" * |
Also Published As
Publication number | Publication date |
---|---|
CN111145299B (zh) | 2023-08-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2006190049A (ja) | 頂点削減図形描画方法および装置 | |
CN105513110A (zh) | 基于gpu的宽度渐变线型地图符号绘制方法 | |
KR20140073480A (ko) | 라인을 따른 텍스트 이미지 렌더링 | |
CN102147936B (zh) | 一种基于级联的在三维地形表面无缝叠加二维矢量的方法 | |
CN106408626A (zh) | 图形处理系统 | |
CN101751682A (zh) | 一种通用地图的制备方法 | |
WO2003102875A1 (fr) | Dispositif de trace d'un polygone triangulaire et procede de trace d'un polygone triangulaire | |
CN109934893A (zh) | 几何体任意截面的显示方法、装置及电子设备 | |
CN111127589B (zh) | 顾及线宽一致性的矢量地图圆形虚线符号绘制方法 | |
CN111145298B (zh) | 顾及线宽一致性的矢量地图栅栏虚线符号绘制方法 | |
CN111145301B (zh) | 顾及线宽一致性的矢量地图实线符号端头绘制方法 | |
CN111127297B (zh) | 顾及线宽一致性的矢量地图实线符号绘制方法 | |
CN111145302B (zh) | 顾及线宽一致性的矢量地图方形虚线符号绘制方法 | |
CN111145299B (zh) | 顾及线宽一致性的矢量地图实线符号拐角绘制方法 | |
KR20090059800A (ko) | 폴리곤의 특징에 적응된 순서로 래스터화하는 래스터화엔진 및 3차원 그래픽스 시스템 | |
CN111145296B (zh) | 顾及线宽一致性的矢量地图线符号圆形箭头绘制方法 | |
CN111145303B (zh) | 顾及线宽一致性的矢量地图线符号尖角形箭头绘制方法 | |
CN111028353B (zh) | 顾及线宽一致性的矢量地图线符号燕尾形箭头绘制方法 | |
CN105427371A (zh) | 一种三维透视投影场景中保持图形对象等像素面积显示的方法 | |
CN105741335A (zh) | 一种基于分块组织的多层次兵棋地图快速绘制方法 | |
CN111028352B (zh) | 顾及线宽一致性的矢量地图线符号开放尖角形箭头绘制方法 | |
CN111145300B (zh) | 顾及线宽一致性的矢量地图尖角形虚线符号绘制方法 | |
JPWO2016092588A1 (ja) | 描画装置、および描画方法 | |
CN109087391A (zh) | 一种三维场景下的军标标绘方法 | |
Deng et al. | Visualization of vector data on global scale terrain |
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 |