CN105760529B - 一种移动端矢量数据的空间索引和缓存构建方法 - Google Patents
一种移动端矢量数据的空间索引和缓存构建方法 Download PDFInfo
- Publication number
- CN105760529B CN105760529B CN201610120863.1A CN201610120863A CN105760529B CN 105760529 B CN105760529 B CN 105760529B CN 201610120863 A CN201610120863 A CN 201610120863A CN 105760529 B CN105760529 B CN 105760529B
- Authority
- CN
- China
- Prior art keywords
- grid
- data
- spatial
- display
- caching
- 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.)
- Expired - Fee Related
Links
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Remote Sensing (AREA)
- Software Systems (AREA)
- Mobile Radio Communication Systems (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明公开一种移动端矢量数据的空间索引和缓存构建方法。其技术方案为:根据矢量地图范围、屏幕尺寸和像素精度,对移动端矢量数据进行基于四叉树的多级网格划分;依据空间对象尺寸,确定各个空间对象所在的网格级别,及其所跨越的网格范围;通过网格的行列号,计算各个网格的网格编码,使用网格编码建立索引表,每级网格分别建立索引;针对不同的网格级别,实现分级显示;设置相应的缓存参数,构建面向分块、分级显示的矢量数据的缓存模型;提出合适的缓存淘汰更新策略;当对地图进行操作时,加载缓存数据,并统计缓冲区容量,适时执行缓存淘汰更新策略。本发明实现对移动端矢量数据的有效组织和对应缓存的构建,提高矢量数据的加载效率。
Description
技术领域
本发明属于移动端矢量数据的管理和应用领域,具体涉及基于四叉树的层次网格索引和在此基础上的缓存构建方法。
背景技术
目前移动计算技术正在迅猛发展,促使嵌入式技术与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 | 网格访问次数 | 默认为正整数 |
t<sub>0</sub> | 网格读入时刻 | 网格第一次读入缓存时刻 |
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),得到:
其中,映射f:Y→H=[Y/M],:X→W=[X/N],W、H别表示点所在分块的行、列号;[]表示取整。
(2)、线状和面状对象:
①先求出空间实体的最小外界矩形,得到其最小外接矩形的最小点坐标(Xmin,Ymin)和最大点坐标(Xmax,Ymax)。
②通过①所得到的2点坐标,确定该森林小班实体最小外接矩形所占的网格范围:
其中,映射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)
●最近访问时间影响因子的计算如下:
首先,计算出最近几次网格被访问的时间间隔的平均值:
其中,Δt表示相邻两次网格i被访问的时间间隔,Δti表示网格i相邻两次被访问的平均值,相当于概率统计中的标准差。
其次,计算出网格在缓存中未被访问的时间:
t=currentT-lastT (7)
其中,currentT表示当前时间,lastT表示网格i最后一次被访问的时间。
最后,最近访问时间影响因子为:
μtime=1/(|t-Δti|+1) (8)
此公式表示的意义为:网格在缓存中未被访问的时间离网格相邻两次被访问的时间间隔的平均值越近,则越容易再次被访问;反之,则越难被访问。
●访问热度影响因子的计算如下:
其中,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:先设置缓存的上限和下限。当显示管理对象和后台管理对象中的网格管理对象数目之和达到缓存上限时,立刻只对后台管理对象中的数据执行缓存淘汰策略,使得显示管理对象和后台管理对象中的网格管理对象数目之和达到缓存下限值,减少淘汰策略的执行次数;若未达到缓存上限,则不用执行缓存淘汰更新策略,可继续加载所需网格管理对象。
上列较佳实施例,对本发明的目的、技术方案和优点进行了进一步详细说明,所应理解的是,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种移动端矢量数据的空间索引和缓存构建方法,其特征在于,包括以下步骤:
步骤S1:根据矢量地图范围、屏幕尺寸和像素精度,对移动端矢量数据进行基于四叉树的多级网格划分;
步骤S2:依据空间对象尺寸,确定各个空间对象所在的网格级别,并计算其所跨越的网格范围,分别记录空间对象的ID;
步骤S3:根据最高级网格中的空间对象的个数,结束网格划分,确定网格的级别数;
步骤S4:通过网格的行列号,计算各个网格的网格编码,并使用网格编码建立索引表,每级网格分别建立索引,各级网格索引相互间独立;
步骤S5:针对不同的网格级别,设置不同的显示级别,实现分级显示;
步骤S6:根据分块、分级显示的矢量地图的特点,设置相应的缓存参数;
步骤S7:在步骤S6基础上,构建面向分块、分级显示的矢量数据的缓存模型;
步骤S8:在步骤S6和S7基础上,构建合适的缓存淘汰更新策略;
步骤S9:当对地图进行操作时,加载缓存数据,并统计缓冲区容量,适时执行缓存淘汰更新策略;所述步骤S1中,基于四叉树的多级网格划分具体包括以下步骤:
步骤S11:分别以矢量地图的横坐标范围ΔX和纵坐标范围ΔY,除以在满足数据编辑精度条件下,移动设备可显示的数据横坐标和纵坐标的实际距离,得到两个网格数L和H;若已知屏幕分辨率为Ls×Ws像素,矢量地图X坐标覆盖范围Xmax-Xmin,Y坐标覆盖范围Ymax-Ymin,地图中一个像素代表的实际距离记为A,记地图横向划分图块数量为L,纵向划分图块数量为H,则有以下公式:
L=(Xmax-Xmin)/(A×Ls)
H=(Ymax-Ymin)/(A×Ws)
通过上述公式求出最初的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:依次类推,构成基于四叉树的多级网格划分;
所述步骤S8中,缓存淘汰更新策略具体包括以下步骤:
步骤S81:先不考虑当前显示级别网格,从比例尺最大的网格级别开始,从底向上,依次根据网格的最后访问时间和访问热度计算每个网格级别中的所有网格的综合价值;网格综合价值为:valuei=μtime×μhot;最近访问时间影响因子的计算如下:首先,计算出最近几次网格被访问的时间间隔的平均值:其中,Δt表示相邻两次网格i被访问的时间间隔,Δti表示网格i相邻两次被访问的平均值,相当于概率统计中的标准差;其次,计算出网格在缓存中未被访问的时间:t=currentT-lastT,其中,currentT表示当前时间,lastT表示网格i最后一次被访问的时间;最后,最近访问时间影响因子为:μtime=1/(|t-Δti|+1),此公式表示的意义为:网格在缓存中未被访问的时间离网格相邻两次被访问的时间间隔的平均值越近,则越容易再次被访问;反之,则越难被访问;访问热度影响因子的计算如下:其中times表示网格i的访问次数,currentT表示当前时间,t0表示网格i在缓存中的生成时间;
步骤S82:从最小级网格i开始,将综合价值小的网格从缓冲区中移去,直至缓冲区不再溢出,若第i级网格中的所有网格均被移除,而缓冲区还溢出,则将第i+1级网格中综合价值小的网格从缓冲区中移去,依次类推;
步骤S83:若除去当前显示级别网格外,其他级别的网格从缓冲区中移除,但缓冲区还是溢出,则对当前显示层,使用网格中心点坐标到屏幕中心点坐标的距离为依据计算出每个网格的综合价值,并以此为依据,将综合价值小的网格从缓冲区中移去,直至缓冲区不再溢出,使用网格中心点坐标到屏幕中心点坐标的距离作为综合价值value的衡量指标,进一步简化为,使用网格与屏幕中心点所在网格行列号之差的绝对值进行衡量,计算公式为:
valuei=1/(|rowi-row0|+|coli-col0|)其中,valuei表示网格i的综合价值,rowi、coli分别为网格i的行列号,row0、col0分别为屏幕中心点所在网格的行列号。
2.根据权利要求1所述的移动端矢量数据的空间索引和缓存构建方法,其特征在于:所述步骤S2中,确定各个空间对象所在的网格级别具体包括以下步骤:
步骤S21:确定空间对象的最大的网格存储数M,根据四叉树的特点,M=4;
步骤S22:从第1级网格开始,计算出每个空间对象跨越的网格数目;
步骤S23:若空间对象跨越的网格数目小于等于M则放入第1级格;否则,再从第2级网格起,依次类推,直至第一次出现空间对象跨越的网格数目小于等于M,将空间对象放入该层网格;所述步骤S2中,确定各个空间对象所跨越的网格范围具体如下:(1)、若空间对象为点对象,则直接用此点与原点的坐标差除以网格的宽和高的实际距离,然后进行取整运算;(2)、若空间对象为线对象或者面对象,先求出其空间实体的最小外界矩形,根据其左下点坐标和右上点坐标计算出最小外接矩形的网格范围;再依次遍历这些网格,用图形求交算法,最终得到空间对象所跨越的网格范围。
3.根据权利要求1所述的移动端矢量数据的空间索引和缓存构建方法,其特征在于:所述步骤S3中,确定网格的级别数具体包括以下步骤:
步骤S31:设定最高级网格中空间对象个数的阈值up=((N/level)×(N/level))/4,其中N为第1级网格划分,level为网格级别;
步骤S32:从第1级网格开始,统计该网格级别内的空间对象的个数,若第1级网格中的空间对象个数大于up,则还需要继续划分,统计第2级网格内的空间对象的个数,判断是否大于up;否则停止划分,依次类推,确定网格的级别数。
4.根据权利要求1所述的移动端矢量数据的空间索引和缓存构建方法,其特征在于:所述步骤S4中,网格编码计算具体如下:先确定网格的行号row和列号col,再利用公式:offset=row×sum+col,其中sum为此级别网格下矢量地图横向或纵向划分图块数量,求出网格编码offset;所述步骤S4中,建立索引表具体如下:每个网格级别分别建立自己的索引表,各网格级别的索引表相互独立,将网格的网格编码作为关键字,按从小到大的顺序建立索引表,记录的内容为网格内的空间对象的ID。
5.根据权利要求1所述的移动端矢量数据的空间索引和缓存构建方法,其特征在于:所述步骤S5中,设置显示级别具体包括以下步骤:
步骤S51:利用步骤S1中的像素精度,计算出第1级网格对应的显示比例尺Scale1,由此算出第2级网格对应的显示比例尺Scale1/2,依次类推,求出所有网格级别的显示比例尺;
步骤S52:在地图操作时,首先得到此时屏幕的比例尺Scale,将所有显示比例尺小于等于Scale的网格级别,进行显示;所有显示比例尺大于Scale的网格级别,不进行显示。
6.根据权利要求1所述的移动端矢量数据的空间索引和缓存构建方法,其特征在于:所述步骤S6中,分块、分级显示的矢量地图的特性如下:(1)、数据的整体性:数据的读取以网格层次为基本单位,而不是以数据层次为基本单位;(2)、空间局部性、位置连续性:只用读取屏幕范围内和附近的局部数据,数据按相邻位置进行显示;(3)、数据层次级别:数据根据不同级别的网格,分为不同的层次级别;(4)、数据重复性:同一级别内,相邻网格间的空间数据,存在着重复的可能;(5)、数据显示级别:在小比例尺下显示的数据,在大比例尺时,也要进行显示;反之,则不一定;所述步骤S6中,缓存参数具体如下:(1)、网格管理对象grid:本质为数据的容器,为数据读取的基本单位;(2)、距离d:网格中心点坐标到屏幕中心点坐标的距离,在地图漫游时,用以判断网格的重要性;(3)、层次n:数据所在的网格级别,在图缩放时,用以判断网格的重要性;(4)、空间对象容器list:本质为在屏幕范围内显示的空间对象的容器,用以进行重复判断;(5)、显示级别level:为不同层次的数据设置不同的显示级别,用以判断数据显示的时机。
7.根据权利要求1所述的移动端矢量数据的空间索引和缓存构建方法,其特征在于:所述步骤S7中,缓存模型具体如下:
(1)在数据模型方面:根据数据的范围层次,生成数据管理对象、网格管理对象和缓存管理对象3种级别的数据模型,其中:数据管理对象是由几何对象及其对应的属性对象组成;网格管理对象是对某个网格的管理,而每个网格中记录了多个空间对象,网格管理对象由数据管理对象的容器和网格的属性对象组成;缓存管理对象是网格管理对象的容器,根据用户需要管理缓存内的若干个网格管理对象;(2)、缓冲区由两部分组成:网格管理和数据管理;(3)网格管理由后台管理对象和显示管理对象组成,二者均为缓存管理对象的数据模型,显示管理对象用于管理进行显示的网格管理对象;后台管理对象用于管理在缓存中,但不进行显示的网格管理对象,二者之间能相互转化;(4)、对象管理由重复判断容器构成,主要作用是避免空间对象在屏幕中的重复加载和显示,其本质是数据管理对象的容器,只存储在屏幕中进行显示的空间对象的数据管理对象;5)、对缓存的加载、更新、淘汰操作,均是针对网格管理部分。
8.根据权利要求1所述的移动端矢量数据的空间索引和缓存构建方法,其特征在于:所述步骤S9中,缓存数据加载具体包括以下步骤:
步骤S91:以网格作为缓存的控制依据;
步骤S92:根据当前的屏幕中心点坐标、网格尺寸和屏幕尺寸,计算出需要显示的网格和不用显示但需要后台加载的网格;并据此生成网格管理对象,设置对应的显示位,加入到对应的显示管理对象和后台管理对象中;
步骤S93:分别读取每个网格中的空间对象的数据,生成数据管理对象,并加入到对应的网格管理对象中;
步骤S94:将需要进行显示的网格中的数据管理对象加入到重复判断管理容器中,并设置每个数据管理对象对应的显示位,当加载每个空间对象时,根据这个容器判断加载的空间对象是否重复,避免重复加载和显示;
步骤S95:当进行地图操作时,重新设置每个网格管理对象的显示位,根据显示位,将不进行显示的网格管理对象从显示管理对象放入到后台管理对象中,将需要进行显示的网格,加入到显示管理对象中;同理,根据显示位,将不在屏幕内显示的数据管理对象从重复判断管理对象中移除,将需要显示的数据管理对象加入重复判断管理容器中;
步骤S96:先设置缓存的上限和下限;当显示管理对象和后台管理对象中的网格管理对象数目之和达到缓存上限时,立刻只对后台管理对象中的数据执行缓存淘汰策略,使得显示管理对象和后台管理对象中的网格管理对象数目之和达到缓存下限值,减少淘汰策略的执行次数;若未达到缓存上限,则不用执行缓存淘汰更新策略,继续加载所需网格管理对象。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610120863.1A CN105760529B (zh) | 2016-03-03 | 2016-03-03 | 一种移动端矢量数据的空间索引和缓存构建方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610120863.1A CN105760529B (zh) | 2016-03-03 | 2016-03-03 | 一种移动端矢量数据的空间索引和缓存构建方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105760529A CN105760529A (zh) | 2016-07-13 |
CN105760529B true CN105760529B (zh) | 2018-12-25 |
Family
ID=56332406
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610120863.1A Expired - Fee Related CN105760529B (zh) | 2016-03-03 | 2016-03-03 | 一种移动端矢量数据的空间索引和缓存构建方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105760529B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106528772B (zh) * | 2016-11-07 | 2019-10-22 | 王昱淇 | 一种集群服务器端的网络地图多层次缓存方法 |
CN106777004B (zh) * | 2016-12-07 | 2019-07-02 | 武大吉奥信息技术有限公司 | 一种高效自适应三维地名瓦片生产方法及装置 |
CN106952319B (zh) * | 2017-02-22 | 2019-12-20 | 北京天元创新科技有限公司 | 一种栅格覆盖信息的展示方法及装置 |
CN111831772B (zh) | 2018-06-06 | 2022-04-08 | 北京嘀嘀无限科技发展有限公司 | 用于识别地图中地理区域的网格的***和方法 |
CN108984729B (zh) * | 2018-07-12 | 2021-01-22 | 武大吉奥信息技术有限公司 | 一种在WebGIS环境下动态图例的高效显示方法及装置 |
CN109544650B (zh) * | 2018-11-07 | 2020-05-05 | 苏州工业园区格网信息科技有限公司 | 基于三维空间剖分的地理坐标压缩编解码方法 |
CN109542996B (zh) * | 2018-11-23 | 2022-09-13 | 云南省地图院 | 基于GeoPDF技术的新型移动地图应用服务*** |
CN110083670B (zh) * | 2019-03-26 | 2020-09-18 | 长安大学 | 一种基于路段密度的地图网格划分方法 |
CN110213788B (zh) * | 2019-06-15 | 2021-07-13 | 福州大学 | 基于数据流时空特征的wsn异常检测及类型识别方法 |
CN110990512B (zh) * | 2019-11-29 | 2021-06-29 | 农业农村部规划设计研究院 | 矢量要素与行政区域全覆盖检查的方法和装置 |
CN110928910B (zh) * | 2019-11-29 | 2021-08-17 | 农业农村部规划设计研究院 | 高速读写Shapfile中的矢量要素的方法和装置 |
CN110955743B (zh) * | 2019-11-29 | 2021-07-20 | 农业农村部规划设计研究院 | 为矢量要素建立空间索引文件的方法和装置 |
CN110990612B (zh) * | 2019-12-13 | 2022-08-02 | 特力惠信息科技股份有限公司 | 一种矢量大数据快速显示的方法及终端 |
CN116149835A (zh) * | 2021-11-19 | 2023-05-23 | 北京太琦图形科技有限公司 | 用于处理非结构化网格数据的方法、装置、设备和介质 |
CN115840752B (zh) * | 2023-02-24 | 2023-05-02 | 西安索格亚航空科技有限公司 | 一种全球航空导航数据的存储及查询方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880681A (zh) * | 2012-09-13 | 2013-01-16 | 烽火通信科技股份有限公司 | 基于网格的大数据量矢量数据的显示和管理方法 |
CN103106276A (zh) * | 2013-02-17 | 2013-05-15 | 南京师范大学 | 一种基于小角编码的矢量数据网格索引方法 |
CN104199986A (zh) * | 2014-09-29 | 2014-12-10 | 国家电网公司 | 基于hbase和geohash的矢量数据空间索引方法 |
CN104376050A (zh) * | 2014-10-31 | 2015-02-25 | 杭州科澜信息技术有限公司 | 一种在三维场景动态调度并显示海量矢量数据的方法 |
-
2016
- 2016-03-03 CN CN201610120863.1A patent/CN105760529B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880681A (zh) * | 2012-09-13 | 2013-01-16 | 烽火通信科技股份有限公司 | 基于网格的大数据量矢量数据的显示和管理方法 |
CN103106276A (zh) * | 2013-02-17 | 2013-05-15 | 南京师范大学 | 一种基于小角编码的矢量数据网格索引方法 |
CN104199986A (zh) * | 2014-09-29 | 2014-12-10 | 国家电网公司 | 基于hbase和geohash的矢量数据空间索引方法 |
CN104376050A (zh) * | 2014-10-31 | 2015-02-25 | 杭州科澜信息技术有限公司 | 一种在三维场景动态调度并显示海量矢量数据的方法 |
Non-Patent Citations (7)
Title |
---|
A Hybrid Structure of Spatial Index Based on Multi-Grid and QR-tree;Guobin Li等;《Proceedings of the Third International Symposium on Computer Science and Computational Technology》;20100831;第447-450页 * |
Hybrid Index Structures for Location-based Web Search;Yinghua Zhou等;《Proceedings of the 14th ACM international conference on Information and Knowledge management》;20051105;第155-162页 * |
QR Factorization with Morton-Ordered Quadtree Matrices for Memory Re-use and Parallelism;Jeremy D.Frens等;《Proceedings of the ACM SIGPLAN symposium on principles and practice of parallel programming and workshop on partial evaluation and semantics-based program manipulation》;20031031;第38卷(第10期);第144-154页 * |
Research And Development of Mobile Forestry GIS Based on Intelligent Terminal;Lichun Wu;《2012 2nd International Conference on Remote Sensing,Environment and Transportation Engineering》;20120806;第1-4页 * |
基于DEM与SPOT5的小班边界自动提取;何柏华等;《南京林业大学学报(自然科学版)》;20100930;第34卷(第5期);第47-50页 * |
基于P2P的空间矢量数据索引网络缓存机制的研究;张曦;《中国优秀硕士学位论文全文数据库 信息科技辑》;20130615(第06期);I139-17 * |
基于改进QR-树的空间数据索引的研究;黄明等;《黑龙江工程学院学报(自然科学版)》;20050930;第19卷(第3期);第18-20页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105760529A (zh) | 2016-07-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105760529B (zh) | 一种移动端矢量数据的空间索引和缓存构建方法 | |
Sun et al. | Scenario simulation and landscape pattern dynamic changes of land use in the Poverty Belt around Beijing and Tianjin: A case study of Zhangjiakou city, Hebei Province | |
CN108446293A (zh) | 一种基于城市多源异构数据构建城市画像的方法 | |
CN103927389A (zh) | 一种洪涝灾害地理分析评估动态模型的构建方法 | |
CN106600523A (zh) | 一种三维模型数据的瓦片式快速加载方法 | |
Gong et al. | Spatiotemporal dynamics in the cultivated and built-up land of Guangzhou: Insights from zoning | |
Quan et al. | Local climate zone mapping for energy resilience: a fine-grained and 3D approach | |
CN106407454A (zh) | 一种基于五层十五级的遥感影像瓦片式加载方法 | |
Zhan et al. | Exploring the relationships of between land surface temperature, ground coverage ratio and building volume density in an urbanized environment | |
CN113807008B (zh) | 一种基于深度学习的城市暴雨内涝模拟方法 | |
CN113344291A (zh) | 城市内涝淹没范围的预报方法、装置、介质和设备 | |
CN106446394A (zh) | 通过地形指数提取流域自由水蓄水容量空间分布的方法 | |
Qiu et al. | Disaggregating population data for assessing progress of SDGs: methods and applications | |
CN106780667A (zh) | 一种多图层的混合索引方法 | |
CN104376050A (zh) | 一种在三维场景动态调度并显示海量矢量数据的方法 | |
CN105893590A (zh) | 一种用于数字地形分析建模知识案例化自动处理方法 | |
Han et al. | Spatiotemporal changes in the urban heat island intensity of distinct local climate zones: Case study of Zhongshan District, Dalian, China | |
Yuan et al. | Effects of 2D/3D urban morphology on land surface temperature: Contribution, response, and interaction | |
Ma et al. | XGBoost-based analysis of the relationship between urban 2D/3D morphology and seasonal gradient land surface temperature | |
Zhai et al. | Using spatial heterogeneity to strengthen the neighbourhood effects of urban growth simulation models | |
CN111061729B (zh) | 顾及粒度的矢量瓦片组织方法 | |
Shen et al. | Regional thermal environments (RTEs) and driving forces in six urban agglomerations of China and America | |
Bhatia et al. | Analysing Urban Sprawl of the Mumbai Metropolitan Region Using Remote Sensing and Socioeconomic Data | |
CN116738159B (zh) | 一种基于复杂网络的全球电离层空间天气响应提取方法 | |
CN108984729A (zh) | 一种在WebGIS环境下动态图例的高效显示方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20181225 |
|
CF01 | Termination of patent right due to non-payment of annual fee |