一种基于gpu的宽度可控的gis路网绘制方法
技术领域
1.本发明涉及gis带宽度的路网数据处理领域,尤其是涉及一种基于gpu的宽度可控的gis路网绘制方法。
背景技术:2.gis中路网数据量庞大,呈现方式主要有两种,一种是一维线条的展示方式,通过引擎自带的线条处理技术,将线条顶点连接成线,另一种呈现方式是通过带宽度的线条的方式呈现,此方式可以让用户直观感受到当前道路的宽度信息,符合大多数用户的视觉需求,通过给不同宽度的路网赋予不同的颜色,也可以让用户直观感受城市道路分布情况。在实际开发过程中,带宽度的路网是在cpu中完成的,通过利用程序在解析几何顶点的过程中对线条进行拓宽然后三角化得到指定宽度的面片,这种方式在需要改变线条宽度的时候需要重新销毁几何数据,然后使用指定宽度数据重新生成几何宽线,在数据量很大的情况下难以实时处理。针对上述问题,本发明通过在cpu中收集路网的几何顶点的数据信息将其传入gpu中进行拓宽处理,几何顶点位置数据本身和线条宽度没有直接的关联。因此用户可以通过cpu使用统一变量,在gpu中实现宽线实时处理,降低了cpu中不断销毁和创建新的路网几何数据的性能消耗,也降低了对用户电脑配置的要求。
3.一种在中国专利文献上公开的“基于gpu资源的数据处理方法、电子设备及系统”,其公告号cn110764901b,此发明公开了一种基于gpu资源的数据处理方法、电子设备及系统,根据资源配置策略和物理gpu资源创建n个虚拟gpu资源;根据资源配置策略,生成物理gpu资源和虚拟gpu资源之间的资源映射关系;使得每个资源申请模块根据资源映射关系,获得n个虚拟gpu资源中的目标虚拟gpu资源。但是它无法在不删除前面数据的情况下改变网路线宽,对处理数据的cpu功耗大的问题。
技术实现要素:4.本发明是为了克服无法在不删除前面数据的情况下改变网路线宽,对处理数据的cpu功耗大,提供了一种基于gpu的宽度可控的gis路网绘制方法,实现了cpu通过控制变量实现gpu中线宽实时改变,不需删除数组数据,降低了cpu功耗。
5.为了实现上述目的,本发明采用以下技术方案:一种基于gpu的宽度可控的gis路网绘制方法,包括以下步骤:s1解析geojson数据,提取路网数据,将多个路网数据存于一个数组;s2遍历路网数组,对每一条路网分别进行数据处理,构造并存储带宽度线段数据;s3所有线段遍历完毕之后将所有的顶点数据传入gpu中处理;s31在gpu中利用每个顶点的偏移方向和可偏移几何顶点位置的三角形矢量运算创建带宽度的线段;s32在cpu中通过uniform变量改变gpu中的宽度值,改变线宽。
6.本发明通过解析geojson数据,将多个路网数据解析并存储,分析每条路网顶点数
据,构建带宽度线段数据,再将带宽度线段的数据储存,同时将gpu通过所存储的顶点数据和偏移方向数据,用三角几何运算构造出带宽度的线段,cpu通过uniform改变gpu中的宽度值从而改变线宽,因为带宽度线段数据的存储与gpu的运算不关联,所以cpu可以不用删除前面的数据就改变线宽,实现了降低cpu功耗。
7.作为优选其中s2步骤还包括:s21遍历当前路网的所有顶点数据,收集每个顶点到下一个顶点的切线方向数据;s22根据s21每个顶点向量的数据,一条带宽度线段是由四个顶点组成,两个起始顶点数据,两个末端顶点数据,一条所述的一维线段只有起始顶点和末顶点,因此需要将一维线段的各个顶点向线条垂直方向扩展,形成四个顶点数据;s23根据顶点数据判定当前顶点是否是当前路网的起始点,如果是起始点则用此位置顶点构造当前点对应的宽线的首端的两个顶点数据,如果不是起始点则用此位置顶点构造当前点对应的宽线的末端的两个顶点数据。
8.本发明将网路处理成带向量的顶点,并将它们初步构造成每四个顶点为一组的带宽度线段数据,再判断四个顶点指向,即判断确定顶点是否为起始点,此步骤为后续建模提供必要数据。
9.作为优选在s23步骤中,如果顶点不是起始点则执行以下步骤:s231将所述一维线段的末顶点设为当前线段法线方向的两个顶点,在末顶点一侧的顶点需要在gpu中向左侧正方向偏移,在末顶点另一侧的顶点需要在gpu中向右侧负方向偏移,创建两个顶点对象,分别记录对应的偏移方向;s232利用相邻一侧顶点到该顶点的切线方向和相邻另一侧的顶点到该顶点的切线方向,计算该顶点的角度信息,将角度分别存储于s231步骤中的两个偏移顶点对象数据中;s233利用末顶点相对末顶点一侧的切线方向和相对于末顶点另一侧的方向切线计算所述末顶点的副切线方向。
10.本发明将两个宽线末端的偏移方向和切线方向记录,并根据这两个数据,获取副切线方向,储存这两个顶点的副切线,这些数据是gpu的建模和数据处理所需的数据。
11.作为优选其中s233步骤计算方式是:将两个切线向量叠加,然后进行归一化,利用归一化后的向量与当前引擎世界空间的up方向叉乘,获取副切线方向,将副切线分别存储到两个偏移的顶点对象。
12.本发明通过切线的向量叠加计算,所得到的的向量有与引擎世界的up方向叉乘获得副切线。
13.作为优选在s23步骤中,如果顶点是起始点则执行以下步骤:s235创建两个顶点对象,分别记录一维线段起始点相对一维线段法线的两个偏移方向;s236利用起始点相对起始点一侧的切线方向和起始点相对另一侧的切线方向,计算起始点的角度信息,将角度信息分别存储到两个偏移的顶点对象;s237利用起始点相对于起始点一侧的切线方向和起始点相对于起始点另一侧的切线方向计算当前顶点的副切线方向,将副切线信息分别存储于两个偏移顶点数据中;本发明将两个宽线的起始点的偏移方向和切线方向储存,并根据它们计算并储存
当前顶点的副切线方向,这些数据将用于gpu建模。
14.作为优选所述s31还包括以下步骤:s311在gpu中,通过收集的角度,副切线,偏移方向以及当前顶点的位置等顶点数据和预设的线宽,将顶点的第一侧向量末端和顶点的第二侧向量首端连接得到副切线,顶点相对副切线上的法线交于第一线宽限位线,法线和第一线宽限位线的交点相对于第二限位线法线的交点得到顶点的几何偏移位置,计算出偏移后的几何顶点位置,创建带宽度的可控线段。
15.本发明通过s23收集的数据,在gpu中运用三角形几何运算计算出偏移后的几何顶点位置,并创建带宽度的可控线段,创建的模型数据为gpu渲染和下一步处理提供基础。
16.作为优选所述s32还包括以下步骤:s321通过gpu的片元着色器,以s311步骤获得的可控线条数据进行渲染颜色,输出到屏幕;s322在cpu中通过uniform变量控制gpu中的线宽数据即可实时改变线宽,无需在cpu中销毁线条的几何数据。
17.本发明通过片元着色器将s23得到的数据进行渲染输出到屏幕,cpu只需通过uniform变量控制,就能改变线宽,无需销毁之前的数据,降低了cpu功耗,提高了cpu处理数据能力。
18.本发明具有以下有益效果:通过解析的geojson数据分析出路网数据,再将路网数据存于数组,对数组分析,构造带宽度线段的数据,将线段顶点数据录入gpu处理得到带宽度的线段模型,gpu根据模型渲染出图像并输出到屏幕,几何数据只需要收集一次,通过cpu设置uniform变量即可实时改变路网宽度,无需cpu参与路网宽度运算,并且gpu的运算速度远远快于cpu运算,因此在gpu中拓宽线条计算速度上也远远快于cpu运算速度,cpu也无需创建和销毁几何数据去改变路网宽度。
附图说明
19.图1是本发明的流程图;图2是本发明的gpu线宽拓展图;图3是本发明的gpu中几何运算原理图。
具体实施方式
20.下面结合附图与具体实施方式对本发明做进一步的描述。
21.根据图1:s1解析geojson数据,提取路网数据,将多个路网数据存于一个数组;s2遍历路网数组,对每一条路网分别进行数据处理,构造并存储带宽度线段数据;s21遍历当前路网的所有顶点数据,收集每个顶点到下一个顶点的切线方向数据;s22根据s21每个顶点向量的数据,一条带宽度线段是由四个顶点组成,两个起始顶点数据,两个末端顶点数据,一条所述的一维线段只有起始顶点和末顶点,因此需要将一维线段的各个顶点向线条垂直方向扩展,形成四个顶点数据;
s23根据顶点数据判定当前顶点是否是当前路网的起始点,如果是起始点则用此位置顶点构造当前点对应的宽线的首端的两个顶点数据,如果不是起始点则用此位置顶点构造当前点对应的宽线的末端的两个顶点数据。
22.s231将所述一维线段的末顶点设为当前线段法线方向的两个顶点,在末顶点一侧的顶点需要在gpu中向左侧正方向偏移,在末顶点另一侧的顶点需要在gpu中向右侧负方向偏移,创建两个顶点对象,分别记录对应的偏移方向;s232利用相邻一侧顶点到该顶点的切线方向和相邻另一侧的顶点到该顶点的切线方向,计算该顶点的角度信息,将角度分别存储于s231步骤中的两个偏移顶点对象数据中;s233利用末顶点相对末顶点一侧的切线方向和相对于末顶点另一侧的方向切线计算所述末顶点的副切线方向将两个切线向量叠加,然后进行归一化,利用归一化后的向量与当前引擎世界空间的up方向叉乘,获取副切线方向,将副切线分别存储到两个偏移的顶点对象。
23.s235创建两个顶点对象,分别记录一维线段起始点相对一维线段法线的两个偏移方向;s236利用起始点相对起始点一侧的切线方向和起始点相对另一侧的切线方向,计算起始点的角度信息,将角度信息分别存储到两个偏移的顶点对象;s237利用起始点相对于起始点一侧的切线方向和起始点相对于起始点另一侧的切线方向计算当前顶点的副切线方向,将副切线信息分别存储于两个偏移顶点数据中;s3所有线段遍历完毕之后将所有的顶点数据传入gpu中处理;s31在gpu中利用每个顶点的偏移方向和可偏移几何顶点位置的三角形矢量运算创建带宽度的线段;s311在gpu中,通过收集的角度,副切线,偏移方向以及当前顶点的位置等顶点数据和预设的线宽,将顶点的第一侧向量末端和顶点的第二侧向量首端连接得到副切线,顶点相对副切线上的法线交于第一线宽限位线,法线和第一线宽限位线的交点相对于第二限位线法线的交点得到顶点的几何偏移位置,计算出偏移后的几何顶点位置,创建带宽度的可控线段。
24.s32在cpu中通过uniform变量改变gpu中的宽度值,改变线宽。
25.s321通过gpu的片元着色器,以s311步骤获得的可控线条数据进行渲染颜色,输出到屏幕;s322在cpu中通过uniform变量控制gpu中的线宽数据即可实时改变线宽,无需在cpu中销毁线条的几何数据。
26.根据图2,本实施列1的工作过程:在已知线段ce的顶点分别为点c和点e,在顶点c和顶点e分别做线段ce的法线,分别标出两条法向上偏移的c1、c2、e1、e2,将线段ce拓展为带宽度的线段c1c2e1e2。
27.根据图3,本实施,2的工作过程:以e点计算过程为例,线段ab表示当前线条宽度,向量cd表示当前e点的副切线,通过计算向量cd的垂直向量即可得到e点的平移方向向量,利用顶点中的存储的偏移方向决定向左偏移还是向右偏移,目前以向左偏移为例,将顶点沿着向量ep方向进行偏移,偏移距
离为线段ep长度,只需要求取线段ep的长度即可得到e点的偏移距离,即可完成e点的偏移, 向量ce和向量de都是单位向量,角度def作为已知角度,可以得到角度dce,角度dce是角度def的一半,利用相似三角形pon与三角形com可以获取到角度mpe,已知线段pm的长度,通过线段pm长度与角度mpe即可计算得到线段ep的长度,沿着线段ep方向偏移|ep|长度即可得到e点的新位置p点。
28.本发明通过解析geojson数据,将多个路网数据解析并存储,分析每条路网顶点数据,构建带宽度线段数据,再将带宽度线段的数据储存,同时将gpu通过所存储的顶点数据和偏移方向数据,用三角几何运算构造出带宽度的线段,cpu通过uniform改变gpu中的宽度值从而改变线宽,因为带宽度线段数据的存储与gpu的运算不关联,所以cpu可以不用删除前面的数据就改变线宽,实现了降低cpu功耗。
29.本发明将网路处理成带向量的顶点,并将它们初步构造成每四个顶点为一组的带宽度线段数据,再判断四个顶点指向,即判断确定顶点是否为起始点,此步骤为后续建模提供必要数据。
30.本发明将两个宽线末端的偏移方向和切线方向记录,并根据这两个数据,利用当前引擎世界空间的up方向叉乘,获取副切线方向,储存这两个顶点的副切线,这些数据是gpu的建模和数据处理所需的数据。
31.本发明将两个宽线的起始点的偏移方向和切线方向储存,并根据它们计算并储存当前顶点的副切线方向,这些数据将用于gpu建模。
32.本发明通过s23收集的数据,在gpu中运用三角形几何运算计算出偏移后的几何顶点位置,并创建带宽度的可控线段,创建的模型数据为gpu渲染和下一步处理提供基础。
33.本发明通过片元着色器将s23得到的数据进行渲染输出到屏幕,cpu只需通过uniform变量控制,就能改变线宽,无需销毁之前的数据,降低了cpu功耗,提高了cpu处理数据能力。