一种地图矢量瓦片缓存的方法

文档序号:9304537阅读:630来源:国知局
一种地图矢量瓦片缓存的方法
【技术领域】
[0001] 本发明涉及地理信息技术领域,尤其涉及地图矢量瓦片缓存的方法。
【背景技术】
[0002] 目前大量的互联网地图都使用瓦片缓存来进行地图显示的优化,一般意义的瓦片 缓存是指将矢量的地图数据按固定大小的分块,预先渲染成图片,用于在各种终端(如浏览 器、移动设备)应用中显示。
[0003] 上述方法的目的是提升系统性能,将原先需要动态进行的绘制计算先行在服务端 统一处理,在用户的终端中将对地图的显示转变为只需进行图片显示的场景,提升显示效 率的同时,也降低了地图在各种不同终端中的实现难度。
[0004] 但是,目前的技术生成的是有限比例尺下的图片,因此带来若干显示效率上的缺 点。如:地图缩放过程不连续,地图只能在有限的几个比例尺下进行显示,用户体验较差。
[0005][0006]

【发明内容】

[0007] 为了克服现有技术的上述缺陷,本发明提出一种地图矢量瓦片缓存的方法。
[0008] 该方法包括以下步骤:A步骤:计算地图数据的分辨率范围;B步骤:将每个分辨 率下的地图进行线性分块,确定每个地图数据在各分辨率下的分块序号;C步骤:移除冗余 数据;D步骤:确定所有分辨率下每个分块中需要缓存的数据,将所有数据打包为地图矢量 瓦片缓存数据。
[0009] 本发明提供一种地图矢量瓦片缓存的方法,生成基于分块的、存储有矢量数据的 瓦片缓存,不仅解决了用户只能在若干比例尺下观看地图的问题,还解决了如果文字固定 在了地图上,那么对地图进行旋转时文字也会旋转,导致用户无法识别的问题,而且生成的 缓存比图片缓存体积更小、渲染更灵活,从而保证用户有较好的用户体验。
【附图说明】
[0010] 图1是本发明所提出的地图矢量瓦片缓存方法的示意图;
[0011] 图2是数据与分块相交的示意图;
[0012] 图3是地图数据中点、线、多边形等几何数据的矢量描述;
[0013] 图4是地图数据中文字标注的矢量描述;
[0014] 图5是地图数据中图标标注数据的矢量描述。
[0015] 如图所示,为了能明确实现本发明的实施例的结构,在图中标注了特定的结构和 器件,但这仅为示意需要,并非意图将本发明限定在该特定结构、器件和环境中,根据具体 需要,本领域的普通技术人员可以将这些器件和环境进行调整或者修改,所进行的调整或 者修改仍然包括在后附的权利要求的范围中。
【具体实施方式】
[0016] 下面结合附图和具体实施例对本发明提供的地图矢量瓦片缓存方法进行详细描 述。
[0017] 在以下的描述中,将描述本发明的多个不同的方面,然而,对于本领域内的普通技 术人员而言,可以仅仅利用本发明的一些或者全部结构或者流程来实施本发明。为了解释 的明确性而言,阐述了特定的数目、配置和顺序,但是很明显,在没有这些特定细节的情况 下也可以实施本发明。在其他情况下,为了不混淆本发明,对于一些众所周知的特征将不再 进行详细阐述。
[0018] 本发明提供一种地图矢量瓦片缓存的方法,生成基于分块的、存储有矢量数据的 瓦片缓存,如图1所示,包括:A步骤:计算地图数据的分辨率范围;B步骤:将每个分辨率 下的地图进行线性分块,确定每个地图数据在各分辨率下的分块序号;C步骤:移除冗余数 据;D步骤:确定所有分辨率下每个分块中需要缓存的数据,将所有数据打包为地图矢量瓦 片缓存数据。
[0019] 本发明中需要将地图数据进行分块划分。矢量数据的分块和现有的图片瓦片分块 有所不同。现有从地理数据转化到图片瓦片的方法中,地图的分块以四叉树的算法进行,如 第一级有一个瓦片,第二级则有四个瓦片,第n级有4n1个瓦片,每下一级的瓦片覆盖的地 图范围为上一级瓦片的四分之一。如果不采用这样的分级方法,不同来源的地图瓦片将不 能相互匹配并同时显示。
[0020] 本发明中矢量分块的目的是让矢量数据在各种地图比例尺下均可以很好地和其 他数据相结合,因此,分块并不遵循现有的一般约定。
[0021] 在步骤A中先考察所有进行缓存的地图数据,每个数据都根据其数据精度和最后 需要显示的比例尺范围,计算其应该存在的分辨率值范围,分辨率=地图单位/屏幕像素单 位。
[0022] 例如某地图数据中,其中一行政分界数据精度为1比400万,以96DPI的屏幕作为 标准值,则该数据最适合显示的分辨率为400万X0. 0254 + 96=1058. 33,其中0. 0254代表 每英寸对应的米数。因此可以选择附近的值1000为地图的分级分辨率之一。由于矢量数 据可以在任何分辨率下绘制,故地图分辨率的划分无需和数据本身的精度完全一致。整个 地图根据数据选取若干个适合显示的分辨率,一般来说每两个分辨率值之间的倍数需大于 或等于2倍,结果为Res"Res2...、Res;、…Resn。
[0023] 在步骤B中,首先,需要将地图数据进行分块划分。矢量数据的分块和现有的图片 瓦片分块有所不同。现有从地理数据转化到图片瓦片的方法中,地图的分块以四叉树的算 法进行,如第一级有一个瓦片,第二级则有四个瓦片,第n级有4nl个瓦片,每下一级的瓦片 覆盖的地图范围为上一级瓦片的四分之一。如果不采用这样的分级方法,不同来源的地图 瓦片将不能相互匹配并同时显示。
[0024] 本发明中矢量分块的目的是让矢量数据在各种地图比例尺下均可以很好地和其 他数据相结合,因此,分块并不遵循现有的一般约定,而采用基于分辨率的方法,分辨率= 地图单位/屏幕像素单位,分辨率越小地图越详细。在进行分块前,需要考察所有进行缓存 的地图数据,每个数据都根据其数据精度和最后需要显示的比例尺范围,计算其应该存在 的分辨率值范围,如下:
[0025] 例如某地图数据中,其中一行政分界数据精度为1比400万,以96DPI的屏幕作为 标准值,则该数据最适合显示的分辨率为400万X0. 0254 + 96=1058. 33,其中0. 0254代表 每英寸对应的米数。因此可以选择附近的值1000为地图的分级分辨率之一。由于矢量数 据可以在任何分辨率下绘制,故地图分辨率的划分无需和数据本身的精度完全一致。整个 地图根据数据选取若干个适合显示的分辨率,一般来说每两个分辨率值之间的倍数需大于 或等于2倍,结果为Res"Res2...、Res;、…Resn。
[0026] 在步骤B中,将每个分辨率下的地图进行线性分块。分块的前提是定义分炔基准 点P〇和分块尺寸S。任意一个点P处的分块序号为:
[0027] Ix=(Int)((P.x_Po.x)+ReSi+S)
[0028] Iy=(Int)((Po.y_P.y)+ReSi+S)
[0029] 至此,可以确定每个数据在某分辨率下可能出现的分块序号,从而可以确定在每 个地图分辨率Res;下的分块索引范围,如下所示,其中Xmin、Xmax、Ymin、Ymax分别为分辨 率ReSl下的数据坐标边界值:
[0030] Ixmin=(Int) ((Xmin-Po. x) +ReSi + S)
[0031] Ixmax=(Int) ((Xmax-Po. x) -j-ReSi-j-S)
[0032] Iymmin=(Int)((Po.y-Ymax)+ReSi+S)
[0033]Iymax=(Int)((Po.y-Ymin)+ReSi+S)
[0034] 在步骤C中,对分块中每个数据进行处理,在保证该分辨率下数据的显示质量 的前提下,移除对数据显示没有影响的冗余数据。如对于线状几何对象,其数据结构为 [P1,P2…,Pi,…Pn],Pi为线上的节点。
[0035] 对于除首尾以外的所有节点P2、…、Pn-1,均需进行判断该节点是否影响最终的 显示效果,方法如下:
[0036] (1)计算该分辨率下的地图容差:t=ResiX0.5。
[0037] (2)去除冗余后的新的对象为[NP1,NP2,…,NPm]。
[0038] (3)记录第一个节点P1为NP1。
[0039] (4)对P2和Pn-1间的任意点Pi,计算其和已记录的最后一个NPj的x和y方向 的距离绝对值dx、dy,如dx和dy都小于t,则舍弃该点;否则,记录该点为NPj+1。
[0040](5)记录最后一个节点Pn为NPm。
[0041] 对于多边形几何对象,对其内部每个构成多边形的环数据,也采用上述方法进行 处理。最后缓存的结果中都使用不同地图分辨率下处理后的新的几何对象。
[0042] 在步骤D中,确定所有分辨率下每个分块中需要缓存的数据,并进行缓存。方法如 下:
[0043] (1)遍历所有的分辨率Resl、Res2...、Resi、...Resn,对每个分辨率Resi,
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1