CN111145300A - 顾及线宽一致性的矢量地图尖角形虚线符号绘制方法 - Google Patents

顾及线宽一致性的矢量地图尖角形虚线符号绘制方法 Download PDF

Info

Publication number
CN111145300A
CN111145300A CN201911363806.6A CN201911363806A CN111145300A CN 111145300 A CN111145300 A CN 111145300A CN 201911363806 A CN201911363806 A CN 201911363806A CN 111145300 A CN111145300 A CN 111145300A
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
Application number
CN201911363806.6A
Other languages
English (en)
Other versions
CN111145300B (zh
Inventor
乐松山
温永宁
陈旻
闾国年
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing Normal University
Original Assignee
Nanjing Normal University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nanjing Normal University filed Critical Nanjing Normal University
Priority to CN201911363806.6A priority Critical patent/CN111145300B/zh
Publication of CN111145300A publication Critical patent/CN111145300A/zh
Application granted granted Critical
Publication of CN111145300B publication Critical patent/CN111145300B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/20Drawing from basic elements, e.g. lines or circles
    • G06T11/203Drawing of straight lines or curves
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/001Texturing; Colouring; Generation of texture or colour
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09BEDUCATIONAL OR DEMONSTRATION APPLIANCES; APPLIANCES FOR TEACHING, OR COMMUNICATING WITH, THE BLIND, DEAF OR MUTE; MODELS; PLANETARIA; GLOBES; MAPS; DIAGRAMS
    • G09B29/00Maps; Plans; Charts; Diagrams, e.g. route diagram
    • G09B29/003Maps
    • G09B29/006Representation of non-cartographic information on maps, e.g. population distribution, wind direction, radiation levels, air and sea routes
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy 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绘制。该方法依赖于一个颜色二维数组来表达符号结构,虽然能够通过数组标记来表达和绘制虚线符号,但整个方法中只是针对固定地图比例尺的绘制,对于线宽的一致性问题完全没有涉及;另外,此论文方法通过颜色二维数组来处理虚线,只能绘制矩形的虚线,无法支持尖角形的虚线绘制。而论文《一种基于屏幕的三维地图线状符号渲染方法》(刘君妍,陈雅茜,高亦远,等.《地球信息科学学报》,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值二维向量的长度是根据扩张顶点与原始点之间的距离计算获得的。
所述步骤2中,矢量线要素由首尾相接的一系列线段构成,每个线段有且只有两个点:起点和终点,线段的起点和终点扩张出来的矩形,构成矢量线要素主体部分,相邻线段之间形成的拐角,构成矢量线要素拐角部分;所述矢量线要素主体部分的正向标记P值和反向标记N均大于等于0,矢量线要素拐角部分的正向标记P值和反向标记N值均小于0。具体的:
矢量线要素主体部分的正向标记P值和反向标记N值为:
正向标记P值:矢量线要素是由首尾相接的一系列线段构成的,每个线段都具有起点和终点,起点垂直于线走向扩张出来的两个点P值均为0,终点垂直与线走向扩张出来的两个点P值均为该线段的长度除以线宽。
反向标记N值:矢量线要素是由首尾相接的一系列线段构成的,每个线段都具有起点和终点,起点垂直于线走向扩张出来的两个点N值均为该线段的长度除以线宽,终点垂直与线走向扩张出来的两个点N值均为0。
所述步骤2中,在矢量线要素的拐角处进行对称三角化处理,通过四个点的P-N值来表达拐角的具体步骤如下:
拐角处的对称三角化处理:矢量线要素是由首尾相接的一系列线段构成的,相邻线段之间构成了拐角,此拐角如果是沿线走向左侧凸起,则由以下四个点构成:由前一线段终点的左侧点、后一线段起点的左侧点、前后线段的左侧交点、前一线段的终点;此拐角如果是沿线走向右侧凸起,则由以下四个点构成:由前一线段终点的右侧点、后一线段起点的右侧点、前后线段的右侧交点、前一线段的终点;无论是左侧凸起还是右侧凸起,拐角处都由且仅由四个点构成,形成的四边形是垂直于线走向对称的。
拐角如果是沿线走向左侧凸起:前一线段终点的左侧点、后一线段起点的左侧点、前一线段的终点P值均为-1.0,前后线段的左侧交点P值为:-1.0-(延展长度/线宽),延展长度是前后线段的左侧交点与前一线段终点的左侧点距离;四个点的N值均为延展长度除以凸起长度,凸起长度是前后线段的左侧交点与前一线段终点之间的距离。
拐角如果是沿线走向右侧凸起:前一线段终点的右侧点、后一线段起点的右侧点、前一线段的终点P值均为-1.0,前后线段的右侧交点P值为:-1.0-(延展长度/线宽),延展长度是前后线段的右侧交点与前一线段终点的右侧点距离;四个点的N值均为延展长度除以凸起长度,凸起长度是前后线段的右侧交点与前一线段终点之间的距离。
进一步的,所述步骤3中最大线宽M值是根据步骤2中计算获得的世界坐标系的线宽;地图比例缩放S值是随着地图比例尺缩放动态更新的比例值;实部比例P1值可以是任意大于等于1.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小于等于0.5,则调整U为U=U-SegU;如果SegU大于0.5,则调整U为U=U+(P1-SegU);根据状态协议,实部P1值必须大于等于1.0,所以0.5是尖角形最小尺寸的一半;通过调整U值,将拐角边界调整到刚好处于尖角形的左边或者右边。
如果待绘制位置处于拐角的内部:利用拐角处V值来判断是否处于尖角形内部,如果V值小于等于0.5则绘制SegU-0.5和0.5-SegU之间的部分,如果V值大于0.5则绘制P1-SegU+0.5和SegU+0.5之间的部分。
和现有技术相比,本发明具有如下显著进步:本发明可以充分利用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是尖角形虚线在拐角处进行截断绘制的示意;
图12是利用本发明的方法绘制结果示意图,(a)所示为状态协议中虚实比例为[1.0:1.0]地图比例尺较小的线宽效果,(b)所示为状态协议中虚实比例为[1.0:1.0]地图比例尺变大后线宽的效果仍然一致,(c)所示为状态协议中虚实比例为[2.0:3.0]地图比例尺较小的线宽效果,(d)所示为状态协议中虚实比例为[2.0:3.0]地图比例尺变大后线宽的效果仍然一致。
具体实施方式
下面结合附图和实施例做进一步说明。
图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值必须是大于等于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小于等于0.5,则调整U为U=U-SegU;如果SegU大于0.5,则调整U为U=U+(P1-SegU);根据状态协议,实部P1值必须大于等于1.0,所以0.5是尖角形的最小半径;通过调整U值,将拐角边界调整到刚好处于尖角形的边界。图9中的不合理情形,通过此动态调整方法,变成图10所示的效果。
在图10中,能够将尖角形的右边归并到拐角点处,但对于拐角三角形区域没有绘制。在图11中给出了拐角三角形区域的绘制工艺。图11中给出的是左侧凸起拐角的情况,在此拐角区域如果SegU小于等于0.5,则绘制区域为V<=0.5-SegU的部分;如果SegU大于0.5,则绘制区域为V<P1-SegU+0.5的部分。基于类似的绘制工艺,如果是右侧凸起的拐角,在此拐角区域如果SegU小于等于0.5,则绘制区域为V>=0.5-SegU的部分;如果SegU大于0.5,则绘制区域为V>SegU-0.5的部分。
在图12中给出了两个不同地图比例尺,尖角形虚线符号的绘制效果。左侧是小比例尺,(a)所示为状态协议中虚实比例为[1.0:1.0]地图比例尺较小的线宽效果,(c)所示为状态协议中虚实比例为[2.0:3.0]地图比例尺较小的线宽效果;右侧是大比例尺,(b)所示为状态协议中虚实比例为[1.0:1.0]地图比例尺变大后线宽的效果仍然一致,(d)所示为状态协议中虚实比例为[2.0:3.0]地图比例尺变大后线宽的效果仍然一致。可以看出小比例尺和大比例尺的绘制效果在线宽方面是一致的。
实施例:
相比于传统计算机可视化领域中的尖角形虚线绘制,地图绘制中的尖角形虚线符号需要考虑地图比例尺的变化。GPU绘制环境下,仅通过三角形集合的坐标和颜色来控制绘制流程,无法满足保持线宽一致性的需求。所以本发明设计了一种CPU-GPU状态协议,通过此协议将线宽相关的信息打包传递给GPU,在GPU中能够有序解析这些信息,从而达到顾及线宽一致性的矢量地图尖角形虚线符号绘制。
以下是利用OpenGL Shader给出了本发明的实施例:
(1)GPU状态协议结构
Figure BDA0002337870010000101
Figure BDA0002337870010000111
(2)CPU状态协议结构
Figure BDA0002337870010000112

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.根据U值、P1值、P2值来判断实部和虚部:
SegU=U-[U/(P1+P2)]*(P1+P2);
其中,U表示当前位置的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小于等于0.5,则调整U为U=U-SegU;如果SegU大于0.5,则调整U为U=U+(P1-SegU);根据状态协议,实部P1值大于等于1.0,所以0.5是尖角形最小尺寸的一半;通过调整U值,将拐角边界调整到处于尖角形的左边或者右边;
E.待绘制位置处于拐角的内部:利用拐角处V值来判断是否处于尖角形内部,如果V值小于等于0.5则绘制SegU-0.5和0.5-SegU之间的部分,如果V值大于0.5则绘制P1-SegU+0.5和SegU+0.5之间的部分。
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中,在矢量线要素的拐角处进行对称三角化处理,通过四个点的P-N值来表达拐角的具体步骤如下:
A.对称三角化处理:
当拐角为沿线走向左侧凸起时,由以下四个点构成:前一线段终点的左侧点、后一线段起点的左侧点、前后线段的左侧交点、前一线段的终点;当拐角为沿线走向右侧凸起时,由以下四个点构成:前一线段终点的右侧点、后一线段起点的右侧点、前后线段的右侧交点、前一线段的终点;四个点形成的四边形是垂直于线走向对称的;
B.矢量线要素拐角部分的正向标记P值和反向标记N值:
当拐角为沿线走向左侧凸起时:前一线段终点的左侧点、后一线段起点的左侧点、前一线段的终点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的浮点数,代表尖角形虚线符号中需要填充颜色的长度,在传递给状态协议之前需要进行线宽映射,即将原始的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四维向量。
CN201911363806.6A 2019-12-26 2019-12-26 顾及线宽一致性的矢量地图尖角形虚线符号绘制方法 Active CN111145300B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911363806.6A CN111145300B (zh) 2019-12-26 2019-12-26 顾及线宽一致性的矢量地图尖角形虚线符号绘制方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911363806.6A CN111145300B (zh) 2019-12-26 2019-12-26 顾及线宽一致性的矢量地图尖角形虚线符号绘制方法

Publications (2)

Publication Number Publication Date
CN111145300A true CN111145300A (zh) 2020-05-12
CN111145300B CN111145300B (zh) 2023-07-07

Family

ID=70520267

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911363806.6A Active CN111145300B (zh) 2019-12-26 2019-12-26 顾及线宽一致性的矢量地图尖角形虚线符号绘制方法

Country Status (1)

Country Link
CN (1) CN111145300B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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的颜色渐变线型地图符号绘制方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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)

* Cited by examiner, † Cited by third party
Title
蒋雪: "基于地图视觉感受的网络地图多尺度表达设计" *

Also Published As

Publication number Publication date
CN111145300B (zh) 2023-07-07

Similar Documents

Publication Publication Date Title
KR101916341B1 (ko) 스크린 위치에 따라 달라지는 분해능을 가진 다수의 렌더 타겟을 위한 텍스처 매핑을 위한 그라디언트 조정
EP3129976B1 (en) Varying effective resolution by screen location by altering rasterization parameters
JP2006190049A (ja) 頂点削減図形描画方法および装置
KR20160130821A (ko) 비-정규 직교 그리드로의 텍스처 매핑을 위한 그라디언트 조정
JP6863693B2 (ja) グラフィックス処理システムおよび方法
KR20120034293A (ko) 정점 처리 방법 및 장치
JPH03202981A (ja) 三次元図形表示方法及びシステム
CN111127589B (zh) 顾及线宽一致性的矢量地图圆形虚线符号绘制方法
CN111145298A (zh) 顾及线宽一致性的矢量地图栅栏虚线符号绘制方法
CN111145302B (zh) 顾及线宽一致性的矢量地图方形虚线符号绘制方法
CN111127297B (zh) 顾及线宽一致性的矢量地图实线符号绘制方法
CN111145301A (zh) 顾及线宽一致性的矢量地图实线符号端头绘制方法
CN111145300A (zh) 顾及线宽一致性的矢量地图尖角形虚线符号绘制方法
CN105741335A (zh) 一种基于分块组织的多层次兵棋地图快速绘制方法
CN111145296B (zh) 顾及线宽一致性的矢量地图线符号圆形箭头绘制方法
CN111028352B (zh) 顾及线宽一致性的矢量地图线符号开放尖角形箭头绘制方法
CN111145299B (zh) 顾及线宽一致性的矢量地图实线符号拐角绘制方法
CN111145303B (zh) 顾及线宽一致性的矢量地图线符号尖角形箭头绘制方法
CN111028353B (zh) 顾及线宽一致性的矢量地图线符号燕尾形箭头绘制方法
CN114723864A (zh) 带宽度的弧线渲染方法及计算机程序产品
CN111080744B (zh) 顾及线宽一致性的矢量地图线符号半开放尖角形箭头绘制方法
CN111028351B (zh) 顾及线宽一致性的矢量地图线符号半尖角形箭头绘制方法
CN111145297B (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