一种大规模栅格数据集的瓦片金字塔快速构建方法
【技术领域】
[0001]本发明属于地理信息处理技术领域,涉及一种地理信息系统中大规模栅格影像数据集的瓦片金字塔快速构建方法。
【背景技术】
[0002]随着地理空间数据获取技术的发展,国内外许多职能机构、研究团体已经可以比较便利地获得较高分辨的影像地图。尤其是无人机航拍技术的突飞猛进,使得获取县域、地区域范围的高分辨率影像数据集成为可能。高分辨率影像数据一般以地理分布上连续、文件存储上分立的大量相同格式的栅格数据存储在磁盘文件系统中,而数据的大规模特性限制了其在传统关系数据库中的高效组织与索引访问,成为其快速可视化的效率瓶颈。
[0003]现阶段大规模栅格数据集的可视化通常需要大量数据预处理时间,主要消耗在影像拼接、构建影像金字塔和瓦片金字塔等数据可视化准备工作,实现可视化的速度已远远落后数据获取速度。高效瓦片金字塔构建是实现影像数据快速可视化的关键技术,ArcGIS、MapGIS、Baidu Map、Google Map等地理信息系统或地理数据服务均使用了瓦片技术来提高其地图服务效率。但是业界现有的针对大规模栅格数据集的瓦片生成方法效率较低,已经远不能适应当前地理数据集规模日益增大的趋势。因此,如何在地理信息系统(GIS)中提供大规模栅格数据集的快速可视化服务成为亟待解决的技术难题。
[0004]前人的研究逐渐形成一套大规模数据集瓦片金字塔构建的通用流程,主要包括影像拼接、构建金字塔、瓦片切分等基本步骤,需要使用地理信息系统或其他影像处理工具。在GIS和各种地图应用中进行地图缩放是极为常见的用户操作场景,为了能快速显示不同缩放尺度下的地图结果,GIS最常见的做法就是建立影像金字塔缓存结构,用户端发送请求后直接调用影像金字塔相应层级的数据,以达到快速绘制的目的。
[0005]影像金字塔是由原始图像按一定重采样规则生成的由细到粗、数据量由大到小不同分辨率层次的影像集,是一种典型的分层数据结构形式,适合于栅格数据的多分辨率组织,影像显示时只需进行少量的计算和少量的查询,可以显著减小影像绘制时间,所以成为地理信息系统提高可视化速率广泛采用的数据结构。如果地图覆盖地理范围过大,当视口范围很小,需要调用分辨率较高的金字塔层级数据时,遍历整层数据,按像素粒度来查询视口范围内的数据将会消耗很长的时间。而在大量用户并发访问数据的应用场景中,直接使用原始影像金字塔绘制地图的性能变得十分缓慢。为克服遍历检索的低效性,瓦片切分技术应运而生。在构建好的影像金字塔基础上,再对大幅影像数据维护一个瓦片金字塔缓存,访问时只需要调用相应分辨率的瓦片数据即可,极大地提高了绘制地图的高并发性能,使基于Web的GIS地图服务满足大规模的用户需求成为可能。
[0006]从研究现状来看,现有的GIS系统需要进行图像拼接、金字塔构建等预处理流程才能生成完整的瓦片金字塔,以提供地图瓦片服务,增加了数据集可视化的总体时间。而且在数据处理的过程中,较少采用并行化的思路,不能有效利用硬件计算资源。按照这一套传统流程处理大规模栅格数据集时,需要漫长的数据预处理时间,尤其是切分瓦片金字塔的效率极其低下,而针对构建瓦片金字塔的构建所做的优化研究较少。
【发明内容】
[0007]为解决上述技术问题,本发明提供了一种多层级自适应的大规模栅格数据瓦片金字塔快速构建方法。首先对发明中涉及的概念进行说明,显示层级是指视口内地图缩放的级数,不同层级显示不同尺度级别的地图视图。层级数越小,显示范围越大,分辨率越低;层级数越大,显示范围越小,分辨率越高,一般最高层级视图显示分辨率所能达到的最高水平就是源数据的分辨率,即视口范围内的显示原始影像数据。本发明是基于开源绘制渲染引擎Mapnik实现的。具体技术方案为一种大规模栅格数据集的瓦片金字塔快速构建方法,包括以下步骤:
[0008](SI)获取包含影像文件的数据集;所述影像文件均为栅格形式。
[0009](S2)遍历数据集中的栅格影像文件,读取所有影像文件的最小外包框,建立空间索引文件,并将空间索引文件存储至文件系统中;
[0010](S3)初始化,设定瓦片金字塔最大层级数为MaX_LeVel,设定影像文件数量阈值;定义迭代变量k,初始值为Max_Level;其中,Max_Level,k为整数;
[0011](S4)比较当前层级单个瓦片范围检索到的影像文件数量与设定阈值的大小关系;
[0012]若小于等于设定阈值,遍历该层级的每一个瓦片,以其范围为查询窗,通过步骤
(S2)建立的空间索引文件检索相交的影像文件,生成每个瓦片的xml样式字符串传递给Mapnik绘制引擎,绘制该层级的所有瓦片数据,存入瓦片金字塔的相应层级;
[0013]若大于设定阈值,调用瓦片金字塔缓存中已生成的k+Ι层级的瓦片数据,隔行隔列重采样生成k层级的瓦片数据,存入瓦片金字塔的相应层级;
[0014](S5)将当前层级数k减I,如果当前层级数大于0,则返回步骤(S4);如果当前层级数不大于O,则完整的瓦片金字塔已构建完毕。
[0015]进一步地,所述步骤(S2)建立空间索引文件的具体过程为:
[0016](S21)遍历数据集,根据每个影像文件的最小包围矩形大小选取合适的网格大小,网格边长记为Gr i d_S ize;
[0017](S22)建立网格索引结构,声明一个覆盖整个数据集范围的二维数组,逻辑上对应一个单元边长为Grid_Size的网格;
[0018](S23)根据每个影像文件的最小包围矩形与网格的相交情况将影像文件作为各自所属网格的成员注册到索引结构的网格中,即建立了空间索引文件。
[0019]进一步地,所述网格边长为最小影像文件的最小包围矩形的较小边长的一半。
[0020]进一步地,所述设定阈值等于30。
[0021]为更好的理解本发明,现将有关原理作进一步说明,本发明中根据视口显示层级动态切换绘制策略的自适应瓦片构建方法,一般的GIS显示层级数为20级,从中选择一个中间门限层级视图,记为Level N。即满足上述设定的影像文件数量阈值对应的层级;level N的确立是以每个层级的一个瓦片范围相交的影像文件数量为参考依据的。
[0022]层级数高于levelN的部分,即金字塔低层的瓦片:调用开源切片工具MapnikJg据每个瓦片的最小外包矩形(Minimum Boundary Rectangular,简称MBR,也称为最小包围框)检索其空间覆盖范围相交的栅格影像数据文件,随着视口查询窗的改变动态生成xml样式字符串,提供给Mapnik进行切片(Mapnik是一个用来开发GIS应用程序的工具包),生成本层级相应的瓦片数据。
[0023]层级数低于level N的部分,即金字塔高层的瓦片:以level N为基础进行间隔采样合成,生成更高层级的瓦片切分数据,建立起类金字塔结构数据层,存于缓存中以待取用,当缩小到低层次视图时,只要调用相应层级的切片数据即可快速显示。
[0024]进一步地,在遍历数据集生成网格索引、查询相交数据文件以及通过底层瓦片重采样生成高层瓦片数据的过程中,各自采用并行化编程方法,使用多个进程处理数据,例如,并行遍历数据集建立索引、分区域划块并行查询相交文件、分区域划块并行重采样,以最大化地利用多核硬件环境,极大地提高了数据处理效率。
[0025]采用本发明获得的有益效果是:(I)本发明所生成的影像瓦片金字塔缓存文件与地理空间数据抽象库GDAL(Geospatial Data Abstract Library,地理数据抽象库)和ArcGIS地图服务生成的瓦片文件格式一致。GDAL是一个被广泛应用的地理信息处理开源库,许多知名的地理地图服务底层算法都是基于GDAL实现的;ArcGIS是业界领先的商业GIS软件,广泛应用于各类影像处理和空间分析。(2)本发明构建瓦片金字塔效率高。在物理上跳过了传统的构建影像金字塔步骤,直接通过根据不同层级采用不同策略的方式,高效建立瓦片金字塔,极大缩短了发布地图可视化服务的时间周期。(3)本发明提出的在不同层级采用的两种瓦片构建策略均具有创新性。通过低层瓦片数据采样生成高层瓦片数据是传统构建影像金字塔方法的迀移应用;使用空间索引检索瓦片范围相交的影像文件极大减小了绘制引擎所需样式文件的规模,适应了大规模影像数据集中影像文件数量巨大的特点。(4)在遍历数据集生成索引、查询相交数据文件以及通过底层瓦片重采样生成高层瓦片数据的全流程中,均采用并行化编程思想,使用多个进程处理数据,更好地利用了当前普遍部署的多核硬件环境,极大地提高了数据处理效率。
【附图说明】
[0026]图1是本发明的总体流程示意图;
[0027]图2是本发明建立的空间索引示意图和网格索引数据结构;
[0028]图3是生成低层瓦片时一个查询场景的示例;
[0029]图4是重采样生成高层瓦片的示意图;
[0030]图5是本发明完成构建瓦片金字塔任务时间消耗与ArcGIS的对比。
【具体实施方式】
[0031 ]结合附图和具体实施例对本发明作进一步说明。
[0032]图1为本发明总体流程示意图。具体过程如下:
[0033](SI)获取包含影像文件的数据集;向地图服务平台注册想要实现可视化的栅格影像数据集。
[0034](S2)遍历数据集中的影像文件,读取所有影像文件的最小外包框,建立空间