一种移动端矢量数据的空间索引和缓存构建方法与流程

文档序号:14689810发布日期:2018-06-15 16:48阅读:210来源:国知局
本发明属于移动端矢量数据的管理和应用领域,具体涉及基于四叉树的层次网格索引和在此基础上的缓存构建方法。
背景技术
:目前移动计算技术正在迅猛发展,促使嵌入式技术与GIS技术的结合,使GIS技术的应用逐步进入到了后PC阶段,它已经成功应用于国民经济乃至国家命脉相关的重要领域如交通、水利、测绘、地矿、环境、航空、国土资源综合利用等。由于移动端CPU运算速度慢、存储空间小、内存共用、可视范围小等特点,而GIS数据量大、计算复杂,给地图快速显示带来很大的压力,因此,在满足需求的情况下,需要考虑用软件方法提高数据的处理能力。目前,移动环境下,在空间数据快速检索方面,主要的空间索引有以下几种:传统网格索引、层次网格索引和QR树索引。传统网格索引在记录点状要素时,具有很好的性能;而在记录线状要素和面状要素时,尤其是较大的状要素和面目标通常跨越多个格网,会带来大量的重复索引,造成较大的数据冗余。层次网格索引能有效解决传统网格索引的数据冗余的问题,但需要用户根据实际情况设置每层网格长和宽,导致建立索引时可操作性不强,并且相邻两级网格间几乎是独立的,不存在任何联系。QR树索引在进行查找算法时,需要遍历每个区域和多个树,这样将降低检索的效率;同时,某个区域中即使只有一个结点还要建个小树,这样浪费了空间资源。移动端矢量数据的缓存研究还比较少,目前只有面向多图层的空间矢量数据缓存更新策略。该策略针对空间矢量数据多图层的特性,综合考虑图层优先级以及查询频率对于缓存更新的影响,设置相应的缓存淘汰更新策略,合理地利用了缓存空间。然而,此策略在矢量数据分块、分级显示的应用上却未能取得良好的效果。技术实现要素:为了克服上述空间索引和缓存策略现有技术的不足,本发明提出了一种针对移动端矢量数据的高效、稳定、准确的空间索引及其缓存构建方法。本发明采用以下技术方案实现本发明目的:一种移动端矢量数据的空间索引和缓存构建方法,其特征在于,包括以下步骤:一种移动端矢量数据的空间索引和缓存构建方法,其特征在于,包括以下步骤实现:步骤S1:根据矢量地图范围、屏幕尺寸和像素精度,对移动端矢量数据进行基于四叉树的多级网格划分;步骤S2:依据空间对象尺寸,确定各个空间对象所在的网格级别,并计算其所跨越的网格范围,分别记录空间对象的ID;步骤S3:根据最高级网格中的空间对象的个数,结束网格划分,确定网格的级别数;步骤S4:通过网格的行列号,计算各个网格的网格编码,并使用网格编码建立索引表,每级网格分别建立索引,各级网格索引相互间独立;步骤S5:针对不同的网格级别,设置不同的显示级别,实现分级显示;步骤S6:根据分块、分级显示的矢量地图的特点,设置相应的缓存参数;步骤S7:在步骤S6基础上,构建面向分块、分级显示的矢量数据的缓存模型;步骤S8:在步骤S6和S7基础上,构建合适的缓存淘汰更新策略;步骤S9:当对地图进行操作时,加载缓存数据,并统计缓冲区容量,适时执行缓存淘汰更新策略。本发明的移动端矢量数据缓存构建方法,在上述空间索引的基础上,根据分块、分级显示的矢量数据的特征,设置相应的缓存参数,并在此基础上建立相应的缓存模型,提出对应的缓存淘汰更新策略。实现针对分块、分级显示的矢量数据的实际情况和地图操作的特点,在缓冲区中加载所需要的数据,并淘汰无用数据。附图说明图1是本发明一种移动端矢量数据的空间索引和缓存构建方法的实施例流程图;图2是本发明一种移动端矢量数据的空间索引和缓存构建方法步骤102的实施例流程图;图3是本发明一种移动端矢量数据的空间索引和缓存构建方法步骤102的确定空间对象网格级别的示意图;图4是本发明一种移动端矢量数据的空间索引和缓存构建方法步骤104的实施例流程图;图5是本发明一种移动端矢量数据的空间索引和缓存构建方法步骤104的缓存模型的实施例流程图;图6是本发明缓冲区数据加载示意图;图7是本发明一种移动端矢量数据的空间索引和缓存构建方法步骤104的缓存淘汰更新策略的实施例流程图。具体实施方式下面结合附图和具体实施例对本发明做进一步说明。本发明提出的一种移动端矢量数据的空间索引构建方法的相关参数项如表1所示:表1本发明提出的一种面向移动端分块、分级显示的矢量数据的缓存模型的相关参数项如表2所示:表2名称参数意义备注grid网格管理对象记录本网格的所有信息list空间对象容器用于显示对象的重复判断level网格级别网格所在的网格层次times网格访问次数默认为正整数t0网格读入时刻网格第一次读入缓存时刻d显示位网格中心点到屏幕中心点距离display比例尺判断缓存中网格是否显示如图1、图2和图4所示,本发明一种移动端矢量数据的空间索引和缓存构建方法的实施例包括以下步骤:步骤S1:根据矢量地图范围、屏幕尺寸和像素精度,对移动端矢量数据进行基于四叉树的多级网格划分;步骤S2:依据空间对象尺寸,确定各个空间对象所在的网格级别,并计算其所跨越的网格范围,分别记录空间对象的ID;步骤S3:根据最高级网格中的空间对象的个数,结束网格划分,确定网格的级别数;步骤S4:通过网格的行列号,计算各个网格的网格编码,并使用网格编码建立索引表,每级网格分别建立索引,各级网格索引相互间独立;步骤S5:针对不同的网格级别,设置不同的显示级别,实现分级显示;步骤S6:根据分块、分级显示的矢量地图的特点,设置相应的缓存参数;步骤S7:在步骤S6基础上,构建面向分块、分级显示的矢量数据的缓存模型;步骤S8:在步骤S6和S7基础上,构建合适的缓存淘汰更新策略。步骤S9:当对地图进行操作时,加载缓存数据,并统计缓冲区容量,适时执行缓存淘汰更新策略。在本实施例中,所述步骤S1中,基于四叉树的多级网格划分具体包括以下步骤:步骤S11:分别以矢量地图的横坐标范围ΔX和纵坐标范围ΔY,除以在满足数据编辑精度条件下,移动设备可显示的数据横坐标和纵坐标的实际距离,得到两个网格数L和H;具体如下:若已知屏幕分辨率为L×W像素,矢量地图X坐标覆盖范围Xmax-Xmin,Y坐标覆盖范围Ymax-Ymin,地图中一个像素代表的实际距离记为A,记地图横向划分图块数量为L,纵向划分图块数量为H,则有以下公式:L=(Xmax-Xmin)/(A×L)H=(Ymax-Ymin)/(A×M)(1)通过公式(1)求出最初的L和H。步骤S12:根据四叉树的特点,取L和H中的最大那个数,并求大于它的最邻近的2的n次幂,即2n-1≤max{L,H}≤2n,令这个2n的值为N;步骤S13:以N×N块来划分矢量地图,构成第1级网格划分;步骤S14:以(N/2)×(N/2)块来划分矢量地图,构成第2级网格划分;步骤S15:依次类推,构成基于四叉树的多级网格划分。在本实施例中,所述步骤S2中,参照图3,确定各个空间对象所在的网格级别具体包括以下步骤:步骤S21:确定空间对象的最大的网格存储数M(根据四叉树的特点,M=4);步骤S22:从第1级网格开始,计算出每个空间对象跨越的网格数目;步骤S23:若空间对象跨越的网格数目小于等于M则放入第1级格;否则,再从第2级网格起,依次类推,直至第一次出现空间对象跨越的网格数目小于等于M,将空间对象放入该层网格。在本实施例中,所述步骤S2中,确定各个空间对象所跨越的网格范围具体如下:(1)、若空间对象为点对象,则直接用此点与原点的坐标差除以网格的宽和高的实际距离,然后进行取整运算;(2)、若空间对象为线对象或者面对象,先求出其空间实体的最小外界矩形,根据其左下点坐标和右上点坐标计算出最小外接矩形的网格范围;再依次遍历这些网格,用图形求交算法,最终得到空间对象所跨越的网格范围。具体步骤如下:(1)、点状对象:设地图上任意点的矢量坐标为(Xp,Yp),得到:(Xp,Yp)→f(W,H)---(2)]]>其中,映射f:Y→H=[Y/M],:X→W=[X/N],W、H别表示点所在分块的行、列号;[]表示取整。(2)、线状和面状对象:①先求出空间实体的最小外界矩形,得到其最小外接矩形的最小点坐标(Xmin,Ymin)和最大点坐标(Xmax,Ymax)。②通过①所得到的2点坐标,确定该森林小班实体最小外接矩形所占的网格范围:(Xmin,Ymin)→f(W1,H1)]]>(Xmax,Ymax)→f(WS,HS)---(3)]]>其中,映射f:Y→H=[Y/M],:X→W=[X/N],W、H别表示点所在分块的行、列号;[]表示取整。最后得到该空间实体的分块范围是X:W1→WS,Y:H1→HS,共(WS-W1)×(HS-H1)块。③遍历②得到的网格范围,判断每个网格是否和该空间实体相交,若相交,则记录该网格,并建立索引,否则,不记录。这样可以避免对全部的网格进行循环,从而提高索引建立的速度。在本实施例中,所述步骤S3中,确定网格的级别数具体包括以下步骤:步骤S31:设定最高级网格中空间对象个数的阈值up=((N/leve)×(N/level))/4,其中N为第1级网格划分,leve为网格级别(其意义为:根据四叉树的特点,1个空间对象在本级网格中最多占4个网格,填满本级网格的最少空间对象是((N/leve)×(N/level))/4);步骤S32:从第1级网格开始,统计该网格级别内的空间对象的个数。若第1级网格中的空间对象个数大于up,则还需要继续划分,统计第2级网格内的空间对象的个数,判断是否大于up;否则,停止划分。依次类推,即可确定网格的级别数。在本实施例中,所述步骤S4中,网格编码计算具体如下:假设使用offset存储每个级别的网格的线性编码,则在具体某个网格级别内,网格矩阵行列数(row,col)的网格的网格编码的计算为公式(4),(其中,sum为此级别网格下矢量地图横向或纵向划分图块数量)offset=row×sum+col(4)在本实施例中,所述步骤S4中,建立索引表具体如下:每个网格级别分别建立自己的索引表,各网格级别的索引表相互独立。将网格的网格编码作为关键字,按从小到大的顺序建立索引表,记录的内容为网格内的空间对象的ID。在本实施例中,所述步骤S5中,设置显示级别具体包括以下步骤:步骤S51:利用步骤S1中的像素精度,计算出第1级网格对应的显示比例尺Scale1,由此算出第2级网格对应的显示比例尺Scale1/2,依次类推,求出所有网格级别的显示比例尺。步骤S52:在地图操作时,首先得到此时屏幕的比例尺Scale,将所有显示比例尺小于等于Scale的网格级别,进行显示;所有显示比例尺大于Scale的网格级别,不进行显示。在本实施例中,所述步骤S6中,分块、分级显示的矢量地图的特点具体如下:(1)、数据的整体性:数据的读取以网格层次为基本单位,而不是以数据层次为基本单位;(2)、空间局部性、位置连续性:只用读取屏幕范围内和附近的局部数据,数据按相邻位置进行显示;(3)、数据层次级别:数据根据不同级别的网格,分为不同的层次级别;(4)、数据重复性:同一级别内,相邻网格间的空间数据,存在着重复的可能;(5)、数据显示级别:在小比例尺下显示的数据,在大比例尺时,也要进行显示;反之,则不一定。在本实施例中,所述步骤S6中,缓存参数具体如下:(1)、网格管理对象grid:本质为数据的容器,为数据读取的基本单位;(2)、距离d:网格中心点坐标到屏幕中心点坐标的距离,在地图漫游时,用以判断网格的重要性;(3)、层次n:数据所在的网格级别,在地图缩放时,用以判断网格的重要性;(4)、空间对象容器list:本质为在屏幕范围内显示的空间对象的容器,用以进行重复判断;(5)、显示级别level:为不同层次的数据设置不同的显示级别,用以判断数据显示的时机。在本实施例中,所述步骤S7中,参照图5,缓存模型具体如下:缓存模型主要由网格管理和对象管理两大块组成。网格管理是针对网格管理,网格是缓存管理的基本单位,一个网格包含多个空间对象;而对象管理是针对要进行显示的空间对象的管理,避免由于一个对象属于多个网格,而造成的重复加载和显示的情况。(1)、网格管理由后台管理对象和显示管理对象组成,二者均为缓存管理对象的数据模型。显示管理对象用于管理进行显示的网格管理对象;后台管理对象用于管理在缓存中,但不进行显示的网格管理对象,二者之间可以相互转化。当进行地图操作时,将显示管理对象中上次进行显示,而这次不进行显示的网格管理对象放入后台管理对象中;反之,则将后台管理对象中的网格管理对象放入显示管理对象中。本发明中的对缓存的加载、更新、淘汰等操作,均是针对网格管理部分。缓存管理对象是网格管理对象的容器,根据用户需要管理缓存内的若干个网格管理对象。网格管理对象主要作用是对网格内的空间对象进行管理和对本网格的特征进行描述,由数据管理对象的容器和属性对象组成。数据管理对象的容器负责对数据管理对象进行增删改查的造作;而属性对象主要包括:网格ID、网格综合价值(缓存淘汰的衡量指标)、网格生成时间、最后5次访问时间、访问次数、显示位(用以判断网格是否需要显示)。数据管理对象由空间对象和属性对象组成,属性特征主要包括:空间对象ID和显示位(用以判断此空间对象是否已经在屏幕中进行显示)。(2)、对象管理由重复判断容器构成,主要作用是避免空间对象在屏幕中的重复加载和显示,其本质是数据管理对象的容器,只存储在屏幕中进行显示的空间对象的数据管理对象。具体实施如下:步骤S71:根据数据的范围层次,生成数据管理对象、网格管理对象和缓存管理对象3种级别的数据模型。步骤S72:将缓冲区分成两部分:网格管理部分和数据管理部分。步骤S73:由后台管理对象和显示管理对象组成网格管理部分,二者均为缓存管理对象的数据模型。步骤S74:由重复判断容器构成对象管理部分,只存储在屏幕中进行显示的空间对象的数据管理对象;步骤S75:当对地图进行操作时,只对网格管理部分中的数据执行缓存淘汰更新策略。在本实施例中,所述步骤S8中,参照图7,缓存淘汰更新策略具体包括以下步骤:步骤S81:先不考虑当前显示级别网格,从比例尺最大的网格级别开始,从底向上,依次根据网格的最后访问时间和访问热度计算每个网格级别中的所有网格的综合价值。具体如下:网格综合价值为:valuei=μtime×μhot(5)●最近访问时间影响因子的计算如下:首先,计算出最近几次网格被访问的时间间隔的平均值:Δti=Σ1nΔtn---(6)]]>其中,Δt表示相邻两次网格i被访问的时间间隔,Δti表示网格i相邻两次被访问的平均值,相当于概率统计中的标准差。其次,计算出网格在缓存中未被访问的时间:t=currentT-lastT(7)其中,currentT表示当前时间,lastT表示网格i最后一次被访问的时间。最后,最近访问时间影响因子为:μtime=1/(|t-Δti|+1)(8)此公式表示的意义为:网格在缓存中未被访问的时间离网格相邻两次被访问的时间间隔的平均值越近,则越容易再次被访问;反之,则越难被访问。●访问热度影响因子的计算如下:μhot=timescurrentT-t0---(10)]]>其中,times表示网格i的访问次数,currentT表示当前时间,t0表示网格i在缓存中的生成时间。步骤S82:从最小级网格i开始,将综合价值小的网格从缓冲区中移去,直至缓冲区不再溢出,若第i级网格中的所有网格均被移除,而缓冲区还溢出,则将第i+1级网格中综合价值小的网格从缓冲区中移去,依次类推。步骤S83:若除去当前显示级别网格外,其他级别的网格从缓冲区中移除,但缓冲区还是溢出,则对当前显示层,使用网格中心点坐标到屏幕中心点坐标的距离为依据计算出每个网格的综合价值,并以此为依据,将综合价值小的网格从缓冲区中移去,直至缓冲区不再溢出。具体如下:使用网格中心点坐标到屏幕中心点坐标的距离作为综合价值value的衡量指标,进一步简化为,使用网格与屏幕中心点所在网格行列号之差的绝对值进行衡量,计算公式为:valuei=1/(|rowi-row0|+|coli-col0|)(5)其中,valuei表示网格i的综合价值,rowi、coli分别为网格i的行列号,row0、col0分别为屏幕中心点所在网格的行列号。在本实施例中,所述步骤S9中,参照图6,缓存数据加载具体包括以下步骤:步骤S91:以网格作为缓存的控制依据。步骤S92:根据当前的屏幕中心点坐标、网格尺寸和屏幕尺寸,计算出需要显示的网格和不用显示但需要后台加载的网格;并据此生成网格管理对象,设置对应的显示位(具体实施例中,1代表显示,0代表不显示),加入到对应的显示管理对象和后台管理对象中;步骤S93:分别读取每个网格中的空间对象的数据,生成数据管理对象,并加入到对应的网格管理对象中;步骤S94:将需要进行显示的网格中的数据管理对象加入到重复判断管理容器中,并设置每个数据管理对象对应的显示位(1代表显示,0代表不显示),当加载每个空间对象时,根据这个容器判断加载的空间对象是否重复,避免重复加载和显示;步骤S95:当进行地图操作时,重新设置每个网格管理对象的显示位,根据显示位,将不进行显示的网格管理对象从显示管理对象放入到后台管理对象中,将需要进行显示的网格,加入到显示管理对象中;同理,根据显示位,将不在屏幕内显示的数据管理对象从重复判断管理对象中移除,将需要显示的数据管理对象加入重复判断管理容器中;步骤S96:先设置缓存的上限和下限。当显示管理对象和后台管理对象中的网格管理对象数目之和达到缓存上限时,立刻只对后台管理对象中的数据执行缓存淘汰策略,使得显示管理对象和后台管理对象中的网格管理对象数目之和达到缓存下限值,减少淘汰策略的执行次数;若未达到缓存上限,则不用执行缓存淘汰更新策略,可继续加载所需网格管理对象。上列较佳实施例,对本发明的目的、技术方案和优点进行了进一步详细说明,所应理解的是,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1