本发明专利技术公开了一种顾及线宽一致性的矢量地图线符号半开放尖角形箭头绘制方法,包括以下步骤:初始化矢量线要素,指定屏幕坐标系线宽,指定起点和终点处是否绘制半开放尖角形箭头,接着按照坐标转换规则将屏幕线宽转换为世界坐标系的线宽,对线要素进行三角化操作,并在起点和终点进行膨胀操作。然后构建顾及线宽一致性的GPU状态协议,在CPU中组装协议内容并传递到GPU。最终在GPU中获取状态协议,在起点和终点进行半开放尖角形箭头的腐蚀操作,实现保持线宽一致的绘制。本发明专利技术通过构建面向半开放尖角形箭头线符号绘制的状态协议,利用结构化的状态协议,实现在地图缩放过程中不改变线宽、不重新三角化,完成线要素起点、终点处的半开放尖角形箭头绘制。
Drawing method of vector map line symbol semi open sharp angle arrow considering line width consistency
【技术实现步骤摘要】
顾及线宽一致性的矢量地图线符号半开放尖角形箭头绘制方法
本专利技术涉及数字地图制图领域和地理信息系统领域的矢量地图线符号半开放尖角形箭头绘制方法,尤其涉及一种顾及线宽一致性的矢量地图线符号半开放尖角形箭头绘制方法。
技术介绍
数字地图制图是将现实世界中各种空间信息以地图的方式呈现出来,点、线和面要素是地图中最基础的三种表达结构,由此主导了点、线和面符号化方法。通过各种不同的点符号、线符号和面符号,能够将空间实体的分布状况、关联关系、相互作用等信息形象化的传递给读图者。为了能够支撑读图者快速理解地图、准确获取空间信息,地图符号的绘制是最为关键的因素。在现实地理世界中,广泛存在着“方向”型的空间信息,如风吹的方向、河流的方向、道路的行驶方向等。为了能够将此类方向型的信息传递给读图者,带有半开放尖角形箭头的线符号是一种常用的方法。为了能够绘制带有半开放尖角形箭头的线符号,当前主要有两种方法:一种是基于软件绘制的方法,一种是基于GPU硬件的方法。前者广泛应用于现有各种二维地图平台上,主要是通过纯软件的方式来操作像素着色,典型的方法有GDI+,Cairo,AGG等。例如,论文《面向GIS的矢量线状符号填充算法研究》(张海泉,潘懋,吴焕萍,等.《地理与地理信息科学》,2004,20(04):11-14.),给出了一种基于GDI+的纯软件绘制方法来表达矢量线要素。该种方法严格依赖于矢量线的屏幕坐标和屏幕宽度,当地图缩放时,需要不断的进行重新计算和绘制,严重降低了地图显示的效率。针对此效率低下的问题,后续的研究大多数集中于如何用硬件加速的方法,即后者基于GPU硬件的方法来实现矢量线符号的绘制。基于GPU硬件绘制的方法主要是研究如何通过GPU着色器(Shader)来绘制线符号。代表性的方法如论文《Afunction-basedlinearmapsymbolbuildingandrenderingmethodusingshaderlanguage》(YueSS,YangJS,ChenM,等.《InternationalJournalofGeographicalInformationScience》,2016,30(2):143-16)提出了一种利用OpenGLShader来构建线符号并用GPU绘制。该方法依赖于一个颜色二维数组来表达符号结构,虽然能够通过数组标记来表达和绘制虚线符号,但整个方法中只是针对固定地图比例尺的绘制,对于线宽的一致性问题完全没有涉及;此论文方法也只是对不带箭头的线符号,如何处理带半开放尖角形箭头的线符号未有涉及。而论文《一种基于屏幕的三维地图线状符号渲染方法》(刘君妍,陈雅茜,高亦远,等.《地球信息科学学报》,2018,20(8):1047-1054)提出了将矢量线要素映射成为纹理数据,通过纹理数据来绘制线;该方法主要是针对线要素与地形的融合,线要素的线宽处理明确是随着地图缩放而变化的。此外名称为“基于GPU的地图线形符号绘制方法及系统”(申请号201310125110.6)的中国专利,名为“基于GPU的宽度渐变线型地图符号绘制方法”(申请号201610015703.0)的中国专利,名为“基于GPU的颜色渐变线型地图符号绘制方法”(申请号201610016561.X),都是在分析GPU绘制矢量线要素难点的基础上,提出了用Shader着色器来绘制线符号的方法。但是这些方法都是针对固定比例尺的线符号绘制,当地图比例尺变化时,为了保持线宽不变,前述方法都需要重新三角化和绘制。反复不断的三角化对绘制效率具有明显的影响,由此造成了地图的缩放交互仍然存在效率瓶颈。并且由于半开放尖角形箭头的特殊性,已有GPU硬件绘制方法均未提出明确的解决方案。整体而言,现有方法主要是面向静态线宽绘制,当地图比例尺缩放时,需要重新计算和绘制;另外,基于GPU硬件加速的带半开放尖角形箭头的线要素绘制也未见公开方法。本专利技术提出了一种顾及线宽一致性的矢量地图线要素半开放尖角形箭头绘制方法,其可以实现:(1)随着地图比例尺缩放保持线宽一致,(2)矢量线要素不需要重新进行三角化,(3)半开放尖角形箭头能够与线要素一起绘制。因为GPU的绘制依赖于三角面片,当一个矢量线被三角化成三角形序列后,GPU只能拿到坐标和颜色,整个绘制是无状态的(即无法区分哪里是起始点、哪里是终止点、哪里是箭头等)。为了能够在GPU中绘制半开放尖角形箭头,本专利技术的核心就是构建了独特的GPU状态协议,从而驱动CPU-GPU协同工作,实现随着地图缩放线宽保持一致的半开放尖角形箭头绘制。
技术实现思路
本专利技术的目的是在GPU绘制环境下,针对带有半开放尖角形箭头的地图线符号线宽一致性绘制需求,突破传统要么不管线宽一致性、要么反复三角化的问题,提供一种能够实现在地图缩放过程中不改变线宽、不重新三角化,实现线要素起点、终点处的半开放尖角形箭头绘制的顾及线宽一致性的矢量地图线符号半开放尖角形箭头绘制方法。技术方案:一种顾及线宽一致性的矢量地图线符号半开放尖角形箭头绘制方法,包括下列步骤:步骤1、对矢量线要素的坐标序列进行初始化,设置以像素为单位的屏幕线宽,设置起点和终点处是否绘制半开放尖角形箭头;步骤2、构建矢量线要素的世界坐标系和屏幕坐标系之间的转换规则,通过此规则将屏幕线宽转换为世界坐标系的线宽,根据此世界坐标系线宽:顺序遍历矢量线要素的每个坐标,由线生成三角形集合,其中每个三角形的每个顶点都具有沿线走向的U值和垂直线走向的V值,并且每个顶点还具有一个缩放方向向量D值;对矢量线要素的起点和终点分别进行膨胀操作和协议标记;步骤3、组装GPU着色器的状态协议:该状态协议包括两个层次,一个是顶点层,包括U值、V值、缩放方向D值,另一个是结构层,包括最大线宽M值、地图比例缩放S值、起点标记CB、终点标记CE;步骤4、在CPU中获取初始的世界坐标系线宽和地图比例尺缩放系数,并分别按照状态协议中的M值、S值、CB值和CE值传递到GPU中,由此在GPU着色器中解析状态协议中的U、V、D、M、S、CB、CE值,动态计算当前半开放尖角形箭头需要绘制的像素位置,并最终完成绘制。进一步的,所述步骤2中:沿线走向的U值根据每个顶点沿着线要素的距离计算获得,其中起点扩张出来的两个顶点U值均为0,终点扩张出来的两个顶点U值均为整条线的长度除以线宽,其他点扩张出来的两个顶点U值均根据长度累积值除以线宽获得;垂直线走向的V值根据每个顶点向两侧扩张的距离计算获得,线要素上的每个点,其扩张出来的两个顶点位于线走向左侧的V为1,位于右侧的0;顶点缩放方向的D值:D值是一个二维向量,指明了扩张出来的每个顶点与原始点之间的连接方向,并且不是一个归一化的向量,D值二维向量的长度是根据扩张顶点与原始点之间的距离计算获得的;进一步的,所述步骤2中:矢量线要素的起点膨胀操作:矢量线要素的起点逆于线走向扩张1.5个线宽,再垂直于线走向分别向两侧扩张1.5个线宽,由此形成两个点;矢量线要素的起点顺着线走向扩张1.5个线宽,再垂直于线走向分别向两侧扩张1.5个线本文档来自技高网...
【技术保护点】
1.一种顾及线宽一致性的矢量地图线符号半开放尖角形箭头绘制方法,其特征在于,包括下列步骤:/n步骤1、对矢量线要素的坐标序列进行初始化,设置以像素为单位的屏幕线宽,设置起点和终点处是否绘制半开放尖角形箭头;/n步骤2、构建矢量线要素的世界坐标系和屏幕坐标系之间的转换规则,通过此规则将屏幕线宽转换为世界坐标系的线宽,根据此世界坐标系线宽:顺序遍历矢量线要素的每个坐标,由线生成三角形集合,其中每个三角形的每个顶点都具有沿线走向的U值和垂直线走向的V值,并且每个顶点还具有一个缩放方向D值;对矢量线要素的起点和终点分别进行膨胀操作和协议标记;/n所述矢量线要素的起点膨胀操作:矢量线要素的起点逆着线走向扩张1.5个线宽,再垂直于线走向分别向两侧扩张1.5个线宽,由此形成两个点;矢量线要素的起点顺着线走向扩张1.5个线宽,再垂直于线走向分别向两侧扩张1.5个线宽,由此再形成两个点;此四个点构成以三个线宽为边长的正方形,也就是起点处的膨胀正方形;/n所述矢量线要素的终点膨胀操作:矢量线要素的终点逆着线走向扩张1.5个线宽,再垂直于线走向分别向两侧扩张1.5个线宽,由此形成两个点;矢量线要素的终点顺着线走向扩张1.5个线宽,再垂直于线走向分别向两侧扩张1.5个线宽,由此再形成两个点;此四个点构成以三个线宽为边长的正方形,也就是终点处的膨胀正方形;/n所述矢量线要素的起点协议标记:起点膨胀正方形中逆着线方向膨胀出来的两个点,其U值均为为-2.0;起点膨胀正方形中顺着线方向膨胀出来的两个点,其U值均为为-1.0;起点膨胀正方形中位于线走向右侧的两个点V值为0,左侧的两个点V值为1;/n所述矢量线要素的终点标记:终点膨胀正方形中逆着线方向膨胀出来的两个点,其U值均为为-10.0;终点膨胀正方形中顺着线方向膨胀出来的两个点,其U值均为为-11.0;终点膨胀正方形中位于线走向右侧的两个点V值为0,左侧的两个点V值为1;/n区分起点和终点:线要素中既不是起点也不是终点部分的U值均为大于等于0,起点和终点部分的膨胀正方形U值均小于0,其中起点处的U值大于等于-2.0,而终点处的U值小于-2.0;/n步骤3、组装GPU着色器的状态协议:该状态协议包括两个层次,一个是顶点层,包括U值、V值、缩放方向D值,另一个是结构层,包括最大线宽M值、地图比例缩放S值、起点标记CB值、终点标记CE值;/n步骤4、在CPU中获取初始的世界坐标系线宽和地图比例尺缩放系数,并分别按照状态协议中的M值、S值、CB值和CE值传递到GPU中,由此在GPU着色器中解析状态协议中的U值、V值、D值、M值、S值、CB值、CE值,动态计算当前半开放尖角形箭头需要绘制的像素位置,对起点和终点进行半开放尖角形箭头腐蚀操作,并完成绘制:/nA.将起点处的膨胀正方形的四个点U值统一加上1.0,形成一个0.0到-1.0的区间;将终点处的膨胀正方形的四个点U值统一加上10.0,形成一个0.0到-1.0的区间;/nB.根据线的走向,将半开放尖角箭头分为左侧半开放尖角箭头和右侧半开放尖角箭头;/nB1.左侧半开放尖角箭头:/n首先腐蚀V值小于1/3的部分;/n其次,针对V值大于等于1/3的部分,依据U值V值的关系进行划分,按照-2/3的斜率,V值大于U值乘以斜率-2/3的部分进行腐蚀;/n剩下的部分,仍然按照-2/3的斜率,V值小于U值乘以斜率-2/3减0.25的部分则继续腐蚀,得到的腐蚀区域中,针对U值小于等于-0.5并且大于等于-0.75的部分,进行填补;/n根据上述腐蚀剩下的部分,绘制左侧半尖角箭头;/nB2.左侧半开放尖角箭头:/n首先腐蚀V值大于2/3的部分;/n其次,针对V值小于等于2/3的部分,依据U值V值的关系进行划分,按照2/3的斜率,V值小于U值乘以斜率2/3的部分进行腐蚀;/n剩下的部分,仍然按照2/3的斜率,V值大于U值乘以斜率2/3减0.25的部分则继续腐蚀,得到的腐蚀区域中,针对U值小于等于-0.5并且大于等于-0.75的部分,进行填补;/n根据上述腐蚀剩下的部分,绘制右侧半尖角箭头。/n...
【技术特征摘要】
1.一种顾及线宽一致性的矢量地图线符号半开放尖角形箭头绘制方法,其特征在于,包括下列步骤:
步骤1、对矢量线要素的坐标序列进行初始化,设置以像素为单位的屏幕线宽,设置起点和终点处是否绘制半开放尖角形箭头;
步骤2、构建矢量线要素的世界坐标系和屏幕坐标系之间的转换规则,通过此规则将屏幕线宽转换为世界坐标系的线宽,根据此世界坐标系线宽:顺序遍历矢量线要素的每个坐标,由线生成三角形集合,其中每个三角形的每个顶点都具有沿线走向的U值和垂直线走向的V值,并且每个顶点还具有一个缩放方向D值;对矢量线要素的起点和终点分别进行膨胀操作和协议标记;
所述矢量线要素的起点膨胀操作:矢量线要素的起点逆着线走向扩张1.5个线宽,再垂直于线走向分别向两侧扩张1.5个线宽,由此形成两个点;矢量线要素的起点顺着线走向扩张1.5个线宽,再垂直于线走向分别向两侧扩张1.5个线宽,由此再形成两个点;此四个点构成以三个线宽为边长的正方形,也就是起点处的膨胀正方形;
所述矢量线要素的终点膨胀操作:矢量线要素的终点逆着线走向扩张1.5个线宽,再垂直于线走向分别向两侧扩张1.5个线宽,由此形成两个点;矢量线要素的终点顺着线走向扩张1.5个线宽,再垂直于线走向分别向两侧扩张1.5个线宽,由此再形成两个点;此四个点构成以三个线宽为边长的正方形,也就是终点处的膨胀正方形;
所述矢量线要素的起点协议标记:起点膨胀正方形中逆着线方向膨胀出来的两个点,其U值均为为-2.0;起点膨胀正方形中顺着线方向膨胀出来的两个点,其U值均为为-1.0;起点膨胀正方形中位于线走向右侧的两个点V值为0,左侧的两个点V值为1;
所述矢量线要素的终点标记:终点膨胀正方形中逆着线方向膨胀出来的两个点,其U值均为为-10.0;终点膨胀正方形中顺着线方向膨胀出来的两个点,其U值均为为-11.0;终点膨胀正方形中位于线走向右侧的两个点V值为0,左侧的两个点V值为1;
区分起点和终点:线要素中既不是起点也不是终点部分的U值均为大于等于0,起点和终点部分的膨胀正方形U值均小于0,其中起点处的U值大于等于-2.0,而终点处的U值小于-2.0;
步骤3、组装GPU着色器的状态协议:该状态协议包括两个层次,一个是顶点层,包括U值、V值、缩放方向D值,另一个是结构层,包括最大线宽M值、地图比例缩放S值、起点标记CB值、终点标记CE值;
步骤4、在CPU中获取初始的世界坐标系线宽和地图比例尺缩放系数,并分别按照状态协议中的M值、S值、CB值和CE值传递到GPU中,由此在GPU着色器中解析状态协议中的U值、V值、D值、M值、S值、CB值、CE值,动态计算当前半开放尖角形箭头需要绘制的像素位置,对起点和终点进行半开放尖角形箭头腐蚀操作,并完成绘制:
A.将起点处的膨胀正方形的四个点U值统一加上1.0,形成一个0.0到-1.0的区间;将终点处的膨胀正方形的四个点U值统一加上10.0,形成一个0.0到-1.0的区间;
B.根据线的...
【专利技术属性】
技术研发人员:乐松山,温永宁,陈旻,闾国年,
申请(专利权)人:南京师范大学,
类型:发明
国别省市:江苏;32
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。