买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】一种海量的矢量数据的访问和渲染方法、电子设备及存储介质_广东南方数码科技股份有限公司_201710526253.6 

申请/专利权人:广东南方数码科技股份有限公司

申请日:2017-06-30

公开(公告)日:2020-09-18

公开(公告)号:CN107479871B

主分类号:G06F9/451(20180101)

分类号:G06F9/451(20180101);G06F16/29(20190101)

优先权:

专利状态码:有效-授权

法律状态:2020.09.18#授权;2018.01.09#实质审查的生效;2017.12.15#公开

摘要:本发明公开了一种海量的矢量数据的访问和渲染方法,包括数据访问方法和数据渲染方法,其中数据访问方法用于获取当前视口中每个要素的要素数据,数据渲染方法用于根据数据访问方法获取的要素对应的要素数据在当前视口内对要素进行绘制渲染;数据访问方法还具体包括以下步骤:获取当前视口的搜索范围;根据搜索范围在索引文件中查找符合条件的要素以及要素外包、要素ID;所述条件为要素外包与搜索范围相交或要素外包被搜索范围所包含;所述要素外包为每个要素的最大坐标和最小坐标所组成的矩形区域;根据每个要素对应的要素ID在数据文件中查找对应的要素数据。本发明还公开了一种电子设备和计算机可读存储介质。本发明具有数据访问速度快、渲染快、安全性好的特点。

主权项:1.一种海量的矢量数据的访问和渲染方法,其特征在于包括:数据访问方法和数据渲染方法,其中数据访问方法用于获取当前视口中每个要素的要素数据,数据渲染方法用于根据数据访问方法获取的要素对应的要素数据在当前视口内对要素进行绘制;数据访问方法和数据渲染方法分别由不同的线程来处理,所述数据访问方法还具体包括以下步骤:要素获取步骤:获取当前视口的搜索范围;要素查找步骤:根据搜索范围在索引文件中查找符合条件的要素以及要素外包、要素ID;所述条件为要素外包与搜索范围相交或要素外包被搜索范围所包含;所述要素外包为每个要素的最大坐标和最小坐标所组成的矩形区域;要素数据获取步骤:根据每个要素对应的要素ID在数据文件中查找对应的要素数据;所述数据渲染方法包括自上而下的渲染方法;所述自上而下的渲染方法包括以下步骤:首先将当前视口的画布中需要绘制的所有图层的读取和绘制顺序设置为从上到下,并且使用布尔值来记录当前视口的画布中每个像素点是否已被绘制;所述图层为当前视口内同一类型的要素的集合;所述像素点为当前视口的画布中的一个最小绘制单位;当绘制开始前,将当前视口的画布中每个像素点的布尔值均初始化为假;当开始绘制某一像素点的颜色时,判断该像素点对应的布尔值是否为假,若是,则将绘制颜色赋予该像素点,同时将该像素点对应的布尔值设置为真;若否,则跳过该像素点的颜色绘制。

全文数据:一种海量的矢量数据的访问和渲染方法、电子设备及存储介质技术领域[0001]本发明涉及一种地理信息系统,尤其涉及一种在地理信息系统中海量的数据的访问方法、电子设备及存储介质。背景技术[0002]地理信息系统是一种特定的十分重要的空间信息系统。它是计算机硬、软件系统支持下,对整个或部分地球表层包括大气层空间中的有关地理分布数据进行采集、存储、管理、运算、分析、显示和描述的技术系统。但是,基于要素的数字化矢量地图已经完全成为了主流。随着行业技术的向前发展,我们对矢量数据的数据量和访问效率都提出了越来越高的要求。比如,ESRI就先后推出了Shape数据格式、PDB数据格式到FGDB数据格式,将数据访问能力不断提升,虽然已在数据访问能力方面有了质的提升,但面对合库与海量数据编辑方面仍显不足。[0003]比如ArcGIS是ESRI公司产品,也是行业GIS平台的标杆。在数据存储上,ArcGIS在不同应用中使用不同的第三方数据库格式进行存储,将自己定义的数据格式存储在第三方数据库中。数据的读写、历史管理、均由第三方由于有专业数据库支持,其数据存储量,历史管理方式以及部分的渲染效率,均由第三方数据库决定。ArcGIS利用空间索引进行数据查询,为数据库中的每个数据表建立空间索引表或索引字段,方便搜索查询、能进行无极缩放。在渲染时,Arcgis根据显示区域范围对数据对在第三方数据库中的空间索引进行查询,将查询结果进行渲染。但是,对于大数据,ArcGIS—次渲染结束前会影响缩放,不能方便地中断,持续缩放体验不佳。[0004]也即是,现有的数据访问方面存在以下缺点:[0005]1索引文件展开需要消耗大量的时间,在每次使用时,都需要在内存中对索引文件进行展开并重建,导致消耗大量内存和时间;[0006]2为了能够高效运行,需要将大量数据驻留在内存内,从而消耗大量内存;[0007]3事务不能保持,关闭软件后无法撤销修改:比如对数据进行修改后,传统的做法将每次修改的原始数据作为临时文件额外保存或驻留在内存中,当软件关闭后,修改则无法撤销;[0008]4对于渲染时,现有技术一般是以建立矢量或者栅格图像金字塔进行缩放的;生成金字塔时需要时间,数据不能够达到秒开的效果;[0009]5在数据读取和渲染时,采用单线程运行,首先需要读取数据然后再进行渲染,会造成渲染不能中断,而且长时间的渲染会造成程序假死或漫游不顺畅的情况出现等。发明内容[0010]为了克服现有技术的不足,本发明的目的之一在于提供一种海量的矢量数据的访问和渲染方法,其能够解决现有技术中在数据读取和渲染时,对海量数据的处理速度慢的问题。[0011]本发明的目的之二在于提供一种电子设备,其能够解决现有技术中在数据读取和渲染时,对海量数据的处理速度慢的问题。[0012]本发明的目的之三在于提供一种计算机可读存储介质,其能够解决现有技术中在数据读取和渲染时,对海量数据的处理速度慢的问题。[0013]本发明的目的之四在于提供一种海量的矢量数据的访问和渲染装置,其能够解决现有技术中在数据读取和渲染时,对海量数据的处理速度慢的问题。[0014]本发明的目的之一采用如下技术方案实现:[0015]—种海量的矢量数据的访问和渲染方法,包括:数据访问方法和数据渲染方法,其中数据访问方法用于获取当前视口中每个要素的要素数据,数据渲染方法用于根据数据访问方法获取的要素对应的要素数据在当前视口内对要素进行绘制;数据访问方法和数据渲染方法分别由不同的线程来处理,所述数据访问方法还具体包括以下步骤:[0016]要素获取步骤:获取当前视口的搜索范围;[0017]要素查找步骤:根据搜索范围在索引文件中查找符合条件的要素以及要素外包、要素ID;所述条件为要素外包与搜索范围相交或要素外包被搜索范围所包含;所述要素外包为每个要素的最大坐标和最小坐标所组成的矩形区域;[0018]要素数据获取步骤:根据每个要素对应的要素ID在数据文件中查找对应的要素数据。[0019]进一步地,所述数据渲染方法包括自上而下的渲染方法、渐进刷新的渲染方法、渲染中断方法、画面平移的局部刷新渲染方法、要素符号化的渲染方法的一种或多种的组合。[0020]进一步地,所述自上而下的渲染方法包括以下步骤:[0021]首先将当前视口的画布中需要绘制的所有图层的读取和绘制顺序设置为从上到下,并且使用布尔值来记录当前视口的画布中每个像素点是否已被绘制;所述图层为当前视口内同一类型的要素的集合;所述像素点为当前视口的画布中的一个最小绘制单位;[0022]当绘制开始前,将当前视口的画布中每个像素点的布尔值均初始化为假;[0023]当开始绘制某一像素点的颜色时,判断该像素点对应的布尔值是否为假,若是,则将绘制颜色赋予该像素点,同时将该像素点对应的布尔值设置为真;若否,则跳过该像素点的颜色绘制。[0024]进一步地,所述渐进刷新渲染方法包括以下步骤:[0025]在数据渲染时,将通过要素数据绘制要素的过程由子线程来完成,将更新当前视口图片由UI线程来完成;将每个要素根据要素的绘制时间进行权重划分,并且要素的绘制时间短的其要素的权重低、要素的绘制时间长的其要素的权重高;[0026]子线程在开始绘制时,首先记录计算机的当前时刻,然后开始依次绘制要素并累加每个要素的权重;当权重累加达到设定的权重阈值时,将当前的计算机时刻与记录的计算机当前时刻进行差值运算得到差值;[0027]当差值大于设定的时间阈值时,将当前渲染的结果拷贝并通过UI线程更新当前视口图片并显示给用户,同时将权重累加值清零,子线程重新记录计算机时间;[0028]当差值小于设定的时间阈值时,将权重累加值清零。[0029]进一步地,所述渲染中断方法包括以下步骤:[0030]系统中设置一渲染序号并且渲染序号由UI线程管理,初始值为0;当系统每次触发新的渲染请求时,UI线程中的渲染序号自动加1;[0031]当子线程开始执行渲染请求时,记录当前时刻下的UI线程中的渲染序号;当时间达到一定值时判断子线程所记录的渲染序号是否等于UI线程当前的渲染序号,若是,则继续渲染;若否,则结束当前渲染请求。[0032]进一步地,所述画面平移的局部刷新渲染方法包括以下步骤:[0033]当对当前视口进行渲染时,首先判断此次渲染的缩放尺寸与上次渲染的缩放尺寸是否相同:[0034]若不同,则执行数据渲染方法的步骤;[0035]若相同,则判断当前视口偏移与上次渲染的视口偏移是否相同:若相同,则重新绘制当前视口偏移;若不同,则执行平移操作;[0036]所述平移操作具体为:将上一次的视口范围与当前的视口范围求交集从而得到交集的视口范围并将该交集的视口范围作为搜索忽略区域;然后将上一次的视口范围的绘制结果平移贴入当前视口范围;再利用当前视口对要素进行搜索,若搜索到要素的要素外包,则要素完全在所述搜索忽略区域内,则对该要素不进行绘制,反之重新绘制。[0037]进一步地,所述要素符号化的渲染方法包括以下步骤:[0038]所述要素包括点、线、面和文字注记四种类型;[0039]当要素类型为点类型,并且该要素的要素符号化后的外包转换到视口后的宽度均小于设置的第一阈值,则认为该要素不需符号化,将要素绘制成一个单点;[0040]当要素类型为线类型,并且该要素的要素符号化后的线型宽度转换到视口后的宽度均小于设置的第二阈值,则认为该要素不需符号化,将要素绘制成单线段;[0041]当要素类型为面类型,并且该要素内的填充符号的间距小于设置的第三阈值,则认为该要素不需符号化,将要素进行面域填充;[0042]当要素类型为面类型,并且该要素内的填充符号的间距大于设置的第三阈值并且要素的填充符号的外包转换到视口后的宽度均小于设置的第四阈值,则认为该要素内的填充符号不需符号化,将要素的填充符号绘制成单点;[0043]当要素为注记类型,并且要素外包转换为视口坐标后宽高均小于设置的第五阈值,则不绘制文字,直接绘制文字外包。[0044]本发明的目的之二采用如下技术方案实现:[0045]一种电子设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如前所述的海量的矢量数据的访问和渲染方法的步骤。[0046]本发明的目的之三采用如下技术方案实现:[0047]一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前所述的海量的矢量数据的访问和渲染方法的步骤。[0048]本发明的目的之四采用如下技术方案实现:[0049]—种海量的矢量数据的访问和渲染装置,包括:数据访问模块和数据渲染模块,其中数据访问模块用于获取当前视口中每个要素的要素数据,数据渲染模块用于根据数据访问方法获取的要素对应的要素数据在当前视口内对要素进行绘制;所述数据访问模块具体还包括:[0050]要素获取模块,用于获取当前视口的搜索范围;[0051]要素查找模块,用于根据搜索范围在索引文件中查找符合条件的要素以及要素外包、要素ID;所述条件为要素外包与搜索范围相交或要素外包被搜索范围所包含;所述要素外包为每个要素的最大坐标和最小坐标所组成的矩形区域;[0052]要素数据获取模块,用于根据每个要素对应的要素ID在数据文件中查找对应的要素数据。[0053]相比现有技术,本发明的有益效果在于:[0054]本发明通过对地理信息系统中的数据、索引的存储的实现,从而能够实现对海量数据的访问,并且其访问速度快,大大降低了内存的消耗;采用多种渲染方案,使得数据能够达到秒开的效果、渲染速度快,提高了数据漫游的流畅度以及良好的用户体验。附图说明[0055]图1为本发明提供的方法流程图;[0056]图2为本发明提供的装置模块图;[0057]图3为本发明提供的渲染方案为画面平移的局部刷新方案时的示意简图;[0058]图4为本发明提供的要素选择方案的示意简图。具体实施方式[0059]下面,结合附图以及具体实施方式,对本发明做进一步描述,需要说明的是,在不相冲突的前提下,以下描述的各实施例之间或各技术特征之间可以任意组合形成新的实施例。[0060]实施例[0061]基于现有技术中对数据访问和渲染的缺陷,本发明首先提供了一种数据的存储格式,具体如下:一个完整的S⑶B全称为SouthGisDataBase,将所有的数据均统一存放在单独的文件中。也即是将地理信息系统中的数据采用文件的形式存储,即数据文件,该数据指的是地理信息系统中每个要素所对应的属性信息等,比如大小、尺寸、颜色等。这里的要素指的是地理信息系统中在绘制的最小单位,要素可分为点、线、面和文字注记四种类型。在地图中又定义了图层的概念,而相同类型的要素组成一个图层,每个图层可分别采用后缀为?〖、?1、?8、11的文件进行存储,文件名为图层名,并且存储时将几何信息按照类型进行序列化。比如,在地图中需要绘制一个路灯、垃圾桶等,该路灯、垃圾桶等均为要素,图层为所有同类型的要素的集合,比如所有的路灯的集合也就是一个图层,所有的垃圾桶的集合也就是一个图层。当然不同的图层划分标准不同时,其所划分的图层也是不同的,比如路灯和垃圾桶均属于居民地点状要素,此时,路灯与垃圾桶均属于同一图层,即居民地点图层。而对于每个路灯、垃圾桶等的形状、大小、尺寸、坐标、颜色等属性信息为要素数据。[0062]另外,本发明还提供了一索引文件,索引文件用于数据访问时进行数据的查找索引的。每个图层所对应的索引文件采用后缀为.index的文件进行存储,而且索引文件的数据格式是基于Rtree的结构,其中每个叶子节点所存储的数据为一个要素外包,而其他非叶子节点所存储的数据为其所有子结点的要素外包的并集。比如,对于要素-路灯,其对应的要素外包一般是取一要素的最小坐标和最大坐标并形成一矩形,即要素的尺寸大小。[0063]另外,传统的索引文件是进行串行化写入文件,在使用时,对索引文件进行反串行化,再向计算机申请每个结点占用的内存文件,用于存储结点数据,因为每次分配的结点内存地址不固定,而无法保存索引文件在内存的原始结构,每次加载索引文件时均需要在内存中重新构建其结构。这样当数据量较多时,这种重建内存结构会消耗大量时间。因为,本发明中采用内存映射技术,在构造索引时,将结点数据写入到文件中,每个结点存储的子结点指针位置为该子结点距离文件首地址的偏移值,在使用索引文件的时候直接加载结点,然后通过结点的子结点的指针偏移量加上索引文件内存映射后得到的文件首地址,即可得到该子结点的对应的内存地址,进而可获取结点数据以及通过递归的方式访问其他子结点,从而避免了像传统的方式那样每次加载索引文件时,都需要重新构建索引文件展开索引文件),导致浪费大量时间。也即是,本发明实现了将索引文件在内存中的结构持久化的目的。其中,索引文件和数据文件中均使用要素在数据文件中的偏移地址,即ID将索引文件和数据文件中的要素进行关联。[0064]另外,本发明中还提供了长事务更新机制,也即是定义了历史数据库文件,用来记录对要素的更新记录。索引文件、数据文件和历史数据库文件均采用ID进行标识,从而将三者进行关联起来。[0065]在数据写入时,首先在数据文件中将要素的数据进行存储,然后在索引文件中将要素的ID、要素外包等数据进行存储,最后将数据、ID、操作代号等作为一条记录写入到历史数据库文件中。也即是说,数据文件是用于存储要素的属性数据的,而索引文件是针对数据文件中的要素进行索引的,历史数据库文件是用于记录数据文件中要素的数据的更新记录的。[0066]另外,对于历史数据库文件来说,其是按照写入的时间顺序,历史数据库文件可以视为一个栈,每条历史记录是栈中的一条数据。这样,在回退数据时,回退数据从最后入栈的一条历史记录开始出栈,从而可以完整地追溯到任何一条数据写入操作。也即是说,在对数据写入时,比如数据的增、删、改均不会涉及到数据文件原有记录,而是在数据文件的尾部添加新的数据,同时更新索引文件。而在回退操作时,不需要进行数据文件的修改,只需要根据历史数据库文件中的历史记录的ID在数据文件中找到历史数据的位置,然后更新索引文件即可。比如,数据文件中的数据记录为A、B、C,其所对应的要素为a、b、c。当需要对要素b的数据进行修改时,只需要在数据文件的尾部追加一条数据记录D,并将要素b的ID修改为数据记录D在数据文件中所对应的偏移地址,并同时更新索引文件以及历史数据库文件,这样就可以使得数据文件、索引文件以及历书数据库文件中每个要素的ID保持一致,这样在数据查找时,首先根据索引文件查找到要素的ID,从而再根据ID在数据文件中查找到对应的要素的数据。[0067]另外,由于数据文件、索引文件和历史数据库文件在更新上有先后顺序,,为了防止由于断电、操作异常等情况发生,而导致索引文件、数据文件和历史数据库文件三者数据不能够保持一致性,本发明还提供了校验码的方式,对三个文件进行一致性校验。也即是:在每一次数据文件更新时,以更新后的数据文件大小为校验码,进行校验。在更新数据文件后,将校验码写入到数据文件中,然后更新索引文件并将校验码写入到索引文件,最后将更新记录和校验码写入到历史数据库文件中。当文件写入异常时,三个文件出现不一致时,也即是校验码同样不一致,这样就可以通过校验码来验证三个文件中的数据是否一致。当发现数据不一致时,根据历史数据库文件中最后的历史记录,可以将索引文件重新更新,从而将三个文件恢复到数据一致的状态,保持数据的完整性。[0068]另外,在要素数据更新时,比如对于将一个地图中的一个要素(路灯)的属性数据进行改变时,本发明采用了一种要素选择算法的方案,其具体为:[0069]给定指定的矩形区域,筛选出与该区域相交的要素,或者完全包含于该区域内的要素。当要素包含符号化效果时,其要素的真实外包区域可能比其几何外包要大。当要素为细长形式时,其选择区域虽然完全被包含于要素的几何外包,但可能选择区域与要素并不相交,如图4所示。这里的要素符号化指的是地理信息系统中要素表达的一个重要方法。而要素符号化时,会根据要素的编码几何信息和属性信息,将其描绘为单点包含直线)、圆、圆弧、实心圆、实心多边形填充和文字注记组合而成的符号,因此,在一个地图区域内,其要素符号化的几何外包可能大于要素的真实外包,也即是要素的符号化几何图形要比要素的实际区域大。[0070]基于此,本发明采用如下要素选择方式:将选择的指定区域作为搜索区域调用Rtree搜索算法得到指定区域内所有的要素以及对应的要素外包,该要素包括与搜索区域相交的要素,和被包含于搜索区域内的要素。然后将该搜索区域设定为画布,执行绘制操作:[0071]当要素为搜索区域相交的要素(要素选择方式为交选)时,对该要素执行绘制操作,若要素的像素点有落于画布区域的,则退出绘制,并认为要素应被选中;若完成绘制时未有要素的像素点落于画布区域,则认为要素不应被选中。[0072]当要素为和被包含于搜索区域内的要素要素选择方式为框选时,对要素执行绘制操作,若要素转换为图面像素后有像素点未落于画布区域的,退出绘制,认为要素不应被选中;若要素转换为图面像素后期像素点均落于画布区域的,则认为要素应被选中。当要素认为被选中后,执行对应的要素数据更新操作即可。[0073]通过上述可对要素的数据定义,使得数据的存储、更新更加方便、安全。[0074]本发明还提供了一种海量的矢量数据的访问和渲染方法,如图1所示,其包括以下步骤:[0075]S1、获取当前视口的搜索范围。在进行地图绘制前,首先需要查找到当前地图视口中的所有要素以及每个要素所对应的要素数据,比如绘制地图中的道路、路灯,首先要获取该地图中的道路、路灯所对应的数据信息。另外,由于地图视口的放大比例不同,要素所显示的区域也不同。要获取地图中的要素首先要获取当前视口的搜索范围,然后再根据该搜索范围在查找到搜索范围内的所有要素。[0076]S2、根据搜索范围在索引文件中查找符合条件的要素以及要素外包、要素ID;其中条件为要素的要素外包与搜索范围相交或要素的要素外包被搜索范围所包含;要素外包指的是每个要素的最大坐标和最小坐标所组成的矩形区域。当要素的要素外包在该搜索范围内,则说明该要素在当前视口内,或要素的要素外包与搜索范围相交,则说明该要素有部分在当前视口内,因此满足上述两个条件的要素均需要在地图中进行绘制。索引文件是基于Rtree结构的,其每个叶子节点均存储了要素的要素外包,并且还存储了要素以及要素ID,则根据搜索范围在索引文件中查找符合条件的要素外包,从而可得到对应的要素以及要素ID。[0077]S3、根据每个要素对应的要素ID在数据文件中查找到对应的要素数据。由于数据文件和索引文件是通过要素ID来关联的,因此根据要素的要素ID,进而可在数据文件中查找到该要素所对应的要素数据,也即是实现了数据的访问。[0078]另外,在数据访问方法中,由于索引文件采用基于Rtree的结构,不需要展开索引文件快速访问到索引文件中的每个叶子结点(也即是要素,每个结点均代表一个要素),进而快速访问的数据文件中的要素的数据,大大提高了数据访问效率,达到数据秒开的目的。[0079]另外,在索引文件中查找时,基于索引文件的结构特点,其父结点为子结点外包的并集,若父结点外包变换为视口坐标后长宽均小于一个像素,则其子结点的要素变换为视口坐标均不会超过其父结点变换坐标后所对应的单像素,因此,可在对父结点所对应的要素的数据进行访问后,直接跳过该子结点所对应的要素的数据,从而可加快数据访问的速度。比如,在绘制或渲染时,对于要素-一家医院来说,在当前地图视口的比例下,该医院的缩放比例就很小,比如该医院在当前地图视口下其坐标就相当于一个点,那么医院中的房屋、道路等要素就需要在进行绘制,则其对应的数据也就不需要了。[0080]S4、分别根据每个要素对应的要素数据以及对应的数据渲染方法对要素进行绘制。[0081]另外,本发明中采用多线程来实现数据访问和渲染过程,也即是说,要素的数据读取的过程通过一线程来完成,而要素的绘制通过另外一线程来完成,这样就可以做到数据的读取与绘制互不干扰,独立运行。当然为了绘制的正确性和一致性,本发明中还采用了队列的方法对数据进行缓存,通过设置队列最大长度来达到控制内存占用及平衡读取与渲染的时间占比。[0082]为达到多线程安全的数据操作,需要在队列的入队与出队的时候进行加锁。也即是:当队列中所缓存的数据已达到最大长度时,数据读取线程被挂起,不在进行数据读取操作,等待绘制线程从队列中取数据,直到队列中的数据消耗到队列的最大长度的一半时,唤醒数据读取线程;当队列中所缓存的数据为空时,绘制线程挂起,得到数据读取线程读取数据并将数据放入到队列中,再唤醒绘制线程。这样既可以保证了数据访问与渲染的异步执行,也可以保证数据的正确性和一致性。[0083]优选地,本发明还提供多种数据渲染方法,包括自上而下的渲染方法、渐进刷新渲染方法、渲染中断方法、画面平移的局部刷新渲染方法、要素符号化的渲染方法。上述渲染方法在执行时没有执行的先后顺序,其是根据具体的执行需求在系统中同时进行的。[0084]1、自上而下的渲染方法:一般来说,对于一个地图在绘制时,其分为多个图层。在绘制地图时,首先绘制一个图层显示后,然后再绘制另外一个图层进行显示。但是采用自下而上的渲染方法时,会给人们造成一种错觉,屏幕一直处于刷新的过程中。比如对于一个图,其中包括天空、陆地、房屋、道路等要素,每种要素的集合均为一个图层。如果比如先绘制房屋,再绘制天空时,由于天空图层位于房屋图层的下方,当绘制房屋图层后,由于房屋所在的位置上将天空图层中的部分进行遮盖,这样在绘制天空图层时,就需要考虑房屋图层所在区域的颜色。由于房屋图层位于天空图层下方,由于房屋图层将天空图层中的一部分已经遮盖,但是对于人眼来说,其每次绘制一个图层时,就像对整个地图进行刷新一次同时还需要对房屋图层的颜色进行计算使其满足房屋的渲染效果,很容易对人造成错觉。但是如果先绘制房屋时,在绘制天空时,由于房屋图层在天空图层下方,在绘制天空图层时,在屏幕上刷新时只会刷新地图中没有房屋的那部分,而不是全部地图均要刷新。也即是,自上而下的绘制顺序,可以避免矢量数据坐标变换到图面坐标后大量重叠于一点,重复对该点进行颜色运算造成的效率损失,从而加快图面绘制效率。因为使用的绘制顺序为从上到下,所以单像素点的最终绘制结果在第一次绘制时就已经确定,较之传统的从下到上的方式,可以在绘制完成前确定。[0085]另外,为达到从上到下的绘制顺序且能保证正确的层叠效果的目的,需要将图层的读取和绘制顺序设置为从上到下,并且使用与画布像素点相匹配的布尔数组记录每个像素点是否已被绘制。其中像素点为画布中最小的绘制单位。开始绘制是,将画布中的每个像素点的布尔值均初始化为假,当需要绘制某像素点的颜色时,首先判断该像素点对应的布尔值是否为真,若是则跳过该像素点的颜色运算;若否,将颜色赋予该像素点,同时将该像素点对应的布尔值设置为真。[0086]2、渐进刷新渲染方法:在数据量比较庞大的情况下,绘制完整个地图的话,则需要较长的时间。为了避免软件的假死现象,达到较好的用户体验,需要在绘制完成前依据一定的时间间隔将中间的渲染结果显示出来,以达到渲染是逐渐完成的效果。比如,在加载或绘制画面时,其画面中存在多个图片,按照传统的方式是将所有的图片均加载或绘制完成后,统一展示给用户查看,但是这种情况下,数据量很多时,系统需要一定的时间进行处理,这样就会给用户造成一种屏幕卡顿或软件挂掉的错觉,也即是软件假死现象,给用户带来了不好的体验。因此,本发明同样采用多线程的方式来实现,将矢量数据绘制成图片由子线程来完成,而更新当前视口图片时由UI线程来完成。每个子线程在开始渲染时均先记录计算机当前时刻,然后根据每个要素的矢量数据的渲染时间复杂度进行权重划分。对于渲染需要的时间少的要素其权重较低,对于渲染需要的时间多的要素其权重较高。[0087]每绘制一个要素时,就累加其权重,当权重累加达到设定的阈值时,将当前的计算机时刻与开始记录的计算机时刻进行差值运算得到差值。当差值大于设置的时间阈值时,将当前渲染的结果拷贝并通知UI线程更新视图,将权重累加值清零,重新记录当前的计算机时刻,用于下一次的时间阈值判断。若差值小于设置的时间阈值,则将权重累加值清零,然后继续执行上述循环步骤。这样做的好处是减少耗时的时间判断的次数,同时又能保证较均匀的渐进刷新效果,避免出现软件的假死效果,从而给用户提供良好的体验。也即是,本发明提供了一种边绘制边更新视口的方式,这样就不会给用户造成软件假死的错觉,提供良好的用户体验。[0088]3、渲染中断方法:在数据漫游的情况下,可能会快速进行连续的平移或缩放,每次的平移和缩放均会触发视图更新。当数据量比较大的情形下,单次刷新完成需要较长时间,如当前的视图更新不能被新的视图更新请求所中断,则渲染完成的耗时将是完成所有的视图更新请求的时间总和。为提高快速漫游的渲染效率,因此,本发明采用了渲染可中断的方式,当触发新的渲染请求时,会尽最快的速度结束当前未完成的渲染操作,开始新的渲染请求操作。[0089]也即是:系统中设置一渲染序号,并且该渲染序号由UI线程所管理,初始值为0。当系统中每次触发新的渲染请求时,UI线程中的渲染序号自动加1。子线程开始执行渲染请求时,首先拷贝记录当前时刻下的UI线程中的渲染序号;当子线程执行渲染请求的操作达到一定的时间时,将子线程所记录的渲染序号与UI线程中当前的渲染序号进行比较,若二者相同,则说明没有新的渲染请求,子线程继续执行当前的渲染请求的操作;若二者不同,则说明系统中出现的新的渲染请求,子线程立即结束执行当前的渲染请求操作,从而通知UI线程开始执行新的渲染请求操作。[0090]4、画面平移的局部刷新渲染方法:对于画面平移,一般指比如在地图显示时,通过鼠标平移的方式显示其他的地图区域,在平移期间其地图缩放尺寸不便。如果画面平移,且平移不超过一个视图时,前后两次的绘制结果会存在部分相同。如图3所述,箭头起始表示平移的开始和结束,则阴影部分表示前后两次渲染结果,该区域是可通过改变插入点坐标来达到画面重合。也即是说,该部分除了在当前视口内的坐标不同外,其他的渲染的数据均相同。在这种情况下述,如果还将所有的画面重新绘制时,就会浪费资源和时间,因此,当画面缩放尺寸不变且平移不超过一个视图时,可以只刷新局部,如图3所示的平移前的空白部分,然后将上一个视图的图片插入到合适的位置,即可得到完整的视图。[0091]具体为:每次对当前视口进行绘制开始前,判断此次绘制与上次绘制的缩放尺寸是否相同,若不同,则执行数据渲染的步骤。若相同,则判断当前视口偏移与上次渲染的视口偏移是否相同,若相同,则重新绘制当前视口偏移;若不同,则执行平移操作。这里的视口偏移是指视口坐标的最小值与数据坐标原点的偏移量,比如第一视口坐标的最小值为100,100,然后第二次也是(100,100,如果视口大小不变的话,缩放尺寸也相同,则可以推断出视口所显示的内容两次相同,触发所显示的内容相同的更新请求,从而重新绘制。[0092]该平移操作为将上一次的视口范围与当前的视口范围求交集,将交集的视口范围作为搜索忽略区域,并将上一次的完整绘制结果平移后贴入视口,然后利用当前视口对一区域进行搜索,若搜索得到的要素外包,完全在该搜索忽略区域内,则就不进行该区域的绘制,反之重新绘制。[0093]5、要素符号化的渲染方法:对于要素符号化是地理信息系统中要素表达的一个重要方法。要素符号化时,会根据要素的编码几何信息和属性信息,将其描绘为单点包含直线)、圆、圆弧、实心圆、实心多边形填充和文字注记组合而成的符号,因而其计算量较之只绘制要素的几何信息大幅度增加,在海量数据的渲染的时候,符号化的计算量会占比较大。比如,在一定的缩放尺寸,对于医院这个要素,其在地图上可显示为但是在较小的缩放尺寸下,医院也只能通过一个像素点来表示。因此,本发明中采用了粗绘、精绘的概念避免了无效的符号化运算,提高符号化效率。对于不同的要素类型,其进行处理的方式也不同,具体如下:[0094]a、当要素为点类型,并且点状要素符号化后的外包转换到视口后的宽度均小于设置的阈值,则认为该点状要素不需符号化,直接绘制其一个单点即可。也即是说,对于点状要素当其转换后在当前视口中的宽度较小时,说明该点状要素在当前视口中用一个像素点表示即可。[0095]b、当要素为线类型,并且线状要素符号化后的线型宽度转换到视口后的宽度均小于预设的阈值时,则认为该线状要素不需符号化,直接绘制单线段。比如对于道路来说,在一定的缩放尺寸下,道路可能存在多条线来表示快车道、人行道等;但是在较小的缩放尺寸下,其就只能通过一条线来表示道路。[0096]c、当要素为面类型,并且面状要素内的填充符号的间距小于设置的第一阈值,则判断该面状要素不需符号化,直接进行面域填充。比如对于草地、风景区等面状要素的填充。[0097]当面状要素内的填充符号的间距大于设置的第一阈值且面状要素内的填充符号的外包转换到视口后的宽高均小于设置的第二阈值,则认为该面状要素内部的填充符合不需符号化,直接在面状要素的填充符号位置上绘制单点。[0098]d、当要素为注记类型,并且要素外包转换为视口坐标后宽高均小于设置的阈值,则不绘制文字,直接绘制文字外包。[0099]本发明公开了一种电子设备,包括处理器、存储器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如前所述的海量的矢量数据的访问和渲染方法的步骤。[0100]另外,本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前所述的海量的矢量数据的访问和渲染方法的步骤。[0101]如图2所示,本发明还提供了一种海量的矢量数据的访问和渲染装置,包括:数据访问模块和数据渲染模块,其中数据访问模块用于获取当前视口中每个要素的要素数据,数据渲染模块用于根据数据访问方法获取的要素对应的要素数据在当前视口内对要素进行绘制;所述数据访问模块具体还包括:[0102]要素获取模块,用于获取当前视口的搜索范围;[0103]要素查找模块,用于根据搜索范围在索引文件中查找符合条件的要素以及要素外包、要素ID;所述条件为要素外包与搜索范围相交或要素外包被搜索范围所包含;所述要素外包为每个要素的最大坐标和最小坐标所组成的矩形区域;[0104]要素数据获取模块,用于根据每个要素对应的要素ID在数据文件中查找对应的要素数据。[0105]上述实施方式仅为本发明的优选实施方式,不能以此来限定本发明保护的范围,本领域的技术人员在本发明的基础上所做的任何非实质性的变化及替换均属于本发明所要求保护的范围。

权利要求:1.一种海量的矢量数据的访问和渲染方法,其特征在于包括:数据访问方法和数据渲染方法,其中数据访问方法用于获取当前视口中每个要素的要素数据,数据渲染方法用于根据数据访问方法获取的要素对应的要素数据在当前视口内对要素进行绘制;数据访问方法和数据渲染方法分别由不同的线程来处理,所述数据访问方法还具体包括以下步骤:要素获取步骤:获取当前视口的搜索范围;要素查找步骤:根据搜索范围在索引文件中查找符合条件的要素以及要素外包、要素ID;所述条件为要素外包与搜索范围相交或要素外包被搜索范围所包含;所述要素外包为每个要素的最大坐标和最小坐标所组成的矩形区域;要素数据获取步骤:根据每个要素对应的要素ID在数据文件中查找对应的要素数据。2.如权利要求1所述的海量的矢量数据的访问和渲染方法,其特征在于:所述数据渲染方法包括自上而下的渲染方法、渐进刷新的渲染方法、渲染中断方法、画面平移的局部刷新渲染方法、要素符号化的渲染方法的一种或多种的组合。3.如权利要求2所述的海量的矢量数据的访问和渲染方法,其特征在于:所述自上而下的渲染方法包括以下步骤:首先将当前视口的画布中需要绘制的所有图层的读取和绘制顺序设置为从上到下,并且使用布尔值来记录当前视口的画布中每个像素点是否已被绘制;所述图层为当前视口内同一类型的要素的集合;所述像素点为当前视口的画布中的一个最小绘制单位;当绘制开始前,将当前视口的画布中每个像素点的布尔值均初始化为假;当开始绘制某一像素点的颜色时,判断该像素点对应的布尔值是否为假,若是,则将绘制颜色赋予该像素点,同时将该像素点对应的布尔值设置为真;若否,则跳过该像素点的颜色绘制。4.如权利要求2所述的海量的矢量数据的访问和渲染方法,其特征在于:所述渐进刷新渲染方法包括以下步骤:在数据渲染时,将通过要素数据绘制要素的过程由子线程来完成,将更新当前视口图片由UI线程来完成;将每个要素根据要素的绘制时间进行权重划分,并且要素的绘制时间短的其要素的权重低、要素的绘制时间长的其要素的权重高;子线程在开始绘制时,首先记录计算机的当前时刻,然后开始依次绘制要素并累加每个要素的权重;当权重累加达到设定的权重阈值时,将当前的计算机时刻与记录的计算机当前时刻进行差值运算得到差值;当差值大于设定的时间阈值时,将当前渲染的结果拷贝并通过UI线程更新当前视口图片并显示给用户,同时将权重累加值清零,子线程重新记录计算机时间;当差值小于设定的时间阈值时,将权重累加值清零。5.如权利要求2所述的海量的矢量数据的访问和渲染方法,其特征在于:所述渲染中断方法包括以下步骤:系统中设置一渲染序号并且渲染序号由UI线程管理,初始值为0;当系统每次触发新的渲染请求时,UI线程中的渲染序号自动加1;当子线程开始执行渲染请求时,记录当前时刻下的UI线程中的渲染序号;当时间达到一定值时判断子线程所记录的渲染序号是否等于UI线程当前的渲染序号,若是,则继续渲染;若否,则结束当前渲染请求。6.如权利要求2所述的海量的矢量数据的访问和渲染方法,其特征在于:所述画面平移的局部刷新渲染方法包括以下步骤:当对当前视口进行渲染时,首先判断此次渲染的缩放尺寸与上次渲染的缩放尺寸是否相同:若不同,则执行数据渲染方法的步骤;若相同,则判断当前视口偏移与上次渲染的视口偏移是否相同:若相同,则重新绘制当前视口偏移;若不同,则执行平移操作;所述平移操作具体为:将上一次的视口范围与当前的视口范围求交集从而得到交集的视口范围并将该交集的视口范围作为搜索忽略区域;然后将上一次的视口范围的绘制结果平移贴入当前视口范围;再利用当前视口对要素进行搜索,若搜索到要素的要素外包,则要素完全在所述搜索忽略区域内,则对该要素不进行绘制,反之重新绘制。7.如权利要求2所述的海量的矢量数据的访问和渲染方法,其特征在于:所述要素符号化的渲染方法包括以下步骤:所述要素包括点、线、面和文字注记四种类型;当要素类型为点类型,并且该要素的要素符号化后的外包转换到视口后的宽度均小于设置的第一阈值,则认为该要素不需符号化,将要素绘制成一个单点;当要素类型为线类型,并且该要素的要素符号化后的线型宽度转换到视口后的宽度均小于设置的第二阈值,则认为该要素不需符号化,将要素绘制成单线段;当要素类型为面类型,并且该要素内的填充符号的间距小于设置的第三阈值,则认为该要素不需符号化,将要素进行面域填充;当要素类型为面类型,并且该要素内的填充符号的间距大于设置的第三阈值并且要素的填充符号的外包转换到视口后的宽度均小于设置的第四阈值,则认为该要素内的填充符号不需符号化,将要素的填充符号绘制成单点;当要素为注记类型,并且要素外包转换为视口坐标后宽高均小于设置的第五阈值,则不绘制文字,直接绘制文字外包。8.—种电子设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于:所述处理器执行所述程序时实现如权利要求1-7任意一项所述的海量的矢量数据的访问和渲染方法的步骤。9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现如权利要求1-7任意一项所述的海量的矢量数据的访问和渲染方法的步骤。10.—种海量的矢量数据的访问和渲染装置,其特征在于包括:数据访问模块和数据渲染模块,其中数据访问模块用于获取当前视口中每个要素的要素数据,数据渲染模块用于根据数据访问方法获取的要素对应的要素数据在当前视口内对要素进行绘制;所述数据访问模块具体还包括:要素获取模块,用于获取当前视口的搜索范围;要素查找模块,用于根据搜索范围在索引文件中查找符合条件的要素以及要素外包、要素ID;所述条件为要素外包与搜索范围相交或要素外包被搜索范围所包含;所述要素外包为每个要素的最大坐标和最小坐标所组成的矩形区域;要素数据获取模块,用于根据每个要素对应的要素ID在数据文件中查找对应的要素数据。

百度查询: 广东南方数码科技股份有限公司 一种海量的矢量数据的访问和渲染方法、电子设备及存储介质

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。