具体实施方式
图1是根据本发明的实施例的多时相数据集的逻辑组织的示意图。
根据本发明的一个实施例,多时相瓦片数据集是由多个具有时间属性的瓦片数据集逻辑组成的,如图1所示。多时相瓦片数据集本身也是一种瓦片数据集,具有瓦片数据集的特点。瓦片数据集可以通过注册成为多时相瓦片数据集的一部分。一个时相数据集也称为数据集的一个版本,这样,多时相数据集就是由多个版本的数据集组成的,每个版本可以包括多个数据集。具体地,多时相瓦片数据集的组织方法如下。
多时相瓦片数据集由数据集元信息(MetaData)和若干不同时相的瓦片数据集信息组成,其信息描述如图2所示。
所述的数据集元信息包括:多时相数据集名称(DataSetName)、多时相数据集类型(DataSetType)、西边界值(West)、东边界值(East)、南边界值(South)、北边界值(North)、瓦片顶层层级(ValidTopLevel)、瓦片底层层级(ValidBottomLevel)、瓦片金字塔(Pyramid)、空间参考(GeographyReference)、像素数(PixelNums)、地形类型(DEMValueType)、无效值(InvalidValue)、层级描述(LevelInfoDetail)。所述的边界值的范围是所有时相数据集范围的并集,所述的瓦片层级范围(瓦片顶层层级(ValidTopLevel)-瓦片底层层级(ValidBottomLevel))也是所有时相数据集瓦片层级范围的并集。
所述的不同时相的瓦片数据集信息包括:时相标识(TemporalID)、时相名称(TemporalName)、时相开始时间(TemporalStart)、时相结束时间(TemporalEnd)、时相描述(TemporalDescribe)、数据集名称(DatasetName)、数据集范围(DatasetRange)、数据集类型(DatasetType)、与数据集范围对应的游程编码索引(DatasetIndex)、数据集路径(Connection)。
下面举例说明多时相瓦片数据集的描述。
多时相瓦片数据集由数据集元信息和若干瓦片数据集信息组成,由XML文件描述,示例如下。
在Oracle数据库中,数据集元信息用表结构如表1所示的一个元表GEOGLOBE_DATASETEX_BASEMETA、以及若干瓦片数据集表组成,瓦片数据集表的命名规则为“GG_VER_多时相数据集名称”,瓦片数据集表的表结构如表2所示。
表1数据集元信息表:GEOGLOBE_DATASETEX_BASEMETA
表2多时相瓦片数据集表:GG_VER_多时相数据集名称图3是示出根据本发明的实施例的瓦片数据的栅格化表示方法的示意图。
根据本发明的一个实施例,以行为单位按照列的顺序将连续的瓦片用开始的列号和结束的列号表示,如图3所示,浅色的格网可以使用两段游程编码(run-length encoding,简称RLE)表示,即:[5,9][12,14]。
图4是示出根据本发明的实施例的瓦片数据的多行瓦片数据的游程码构成形式的示意图。
由于瓦片数据存在多行,因此多行的瓦片数据由多段游程码组成。以每组RLE为单位,多行瓦片数据的游程码构成形式如图4所示。
任意RLE单元可以由Start和End两个值构成,分别表示开始的列编号和结束的列编号。RLE的特性如下:
1)RLE长度:就是RLE跨的列个数,实际值为End-Start+1;
2)RLE与任意列号的距离:对于任意列号可以和RLE计算一个距离值,这个距离值可以是0,表示该列号落入在RLE单元内(该列号大于等于Start列号、且小于等于End列号),也可以是负数,表示该列号在Start列号之前,或者可以是正数,表示该列号在End列号之后。如果该距离值为-1或者1,则表示该列号与Start列号或End列号相连,从而该列可以和该RLE单元合并。
3)可以判断RLE和另外一个RLE是否相连:相连的判断条件就是一个RLE的Start列或者End列与另外一个RLE的距离的绝对值为1。相连的两个RLE是可以合并的。
4)RLE之间的距离:这个距离与任意列号与RLE单元的距离概念一样。在某些情况下瓦片数据可能是非常离散的方式分布的。比如某种极端的情况下任意两个瓦片之间都不相邻,这种情况下需要两个整数64字节方能表示一个瓦片是否存在。对于十几万、甚至于上百万的瓦片来说,基本无法用内存来存储上述信息。可以采用一种较模糊的方式来处理这样的情况,即设置一个容差,同一行上两个瓦片间的空白瓦片少于N个,则认为这两个瓦片之间不存在空隙。由此可以应用到RLE上,如果连续两个RLE的距离小于某个容差,则两个RLE可以合并。
5)有效长度:一个RLE构成的锯齿数组表达了若干的行列分布的数据的情况,这个数据的有效长度实际上就是锯齿数组中所有RLE单元的长度之和。
6)最大包围盒范围:说明锯齿数组记录的最小和最大的行列号范围。行的最大和最小值可由锯齿数组的长度和开始的行号决定。列的最大和最小则可以通过计算锯齿数组中所有行的第一个RLE和最后一个RLE得出最大和最小的列范围。
瓦片数据通常由多个级别构成,不同级别上的行列号会代表不同的意义,因此,对于一个具有多个级别的瓦片数据集来说,必须使用多个锯齿数组构成RLE索引。每个索引代表某个级别的瓦片行列分布情况。
下面举例说明游程编码索引文件格式。
游程编码索引文件格式如下:
1)文件头四个字节,RLE\0目的是识别该文件的格式。
2)元数据长度4个字节整数,说明文件附加的元数据信息的长度。
3)元数据长度N个字节,和前面元数据长度对应。
4)第一个游程编码索引数据。
N)第N个游程编码索引数据。
其中,一个游程编码索引代表一个级别的所有游程编码数据,存储结构如下:
1)整个游程编码索引的长度四个字节整数,标示该游程编码索引的字节长度
2)四个保留字节,为将来预留
3)游程编码索引的级别(Level),四个字节
4)游程编码索引的开始行编号,StartRow(四个字节)
5)游程编码索引的总行数,TotalRow(四个字节),代表要创建的锯齿数组的行数
6)游程编码索引第一行数据
N+5)游程编码索引第N行数据
其中,游程编码索引每行的索引数据记录多个游程编码索引对。每行的游程编码索引存储结构为:
1)RLE对的个数,四个字节
2)第一个RLE对,Start,End,8个字节
N+1)第N个RLE对,Start,End,8个字节
RLE索引创建过程就是将瓦片的层级(Level)、行号(Row)、列号(Col)根据游程编码规则追加到RLE数组中,其过程如下:
1)判断该层级是否在级别范围内,如果不在范围内,则需要对这个层级建立一个新的索引。
2)如果该层级在级别范围内,则在该层级对应的索引中,判断该行号是否存在于对应的行数组中,如果否,则需要追加一个行数组。
其中,行数组是一个连续的数组,游程编码索引会记录这个索引的开始行,在行数组中第0行就是对应的行编号的数组,依次类推。在某些数据并不一定连续分布的情况下,例如某个行并不存在。那么锯齿数组中可能存在某行的数组为0个元素的情况。
3)如果该行号存在于对应的行数组中,则在该行号对应的行数组中遍历RLE单元,判断应该添加列号的位置。
任意的列号在一个行数组中RLE单元的位置是通过将其和RLE单元的距离进行比较来决定的。具体地,有以下四种情况:
情况A:距离小于-1,此时,列号在某个RLE单元之前超过一个空格以上,那么这个列号应该被插入到该RLE单元之前,成为[Col,Col]长度为1的RLE单元。
情况B:距离的绝对值为1,那么列号将直接被并入该RLE单元,并入该RLE单元之后,应该检查该RLE单元与之后(如果存在的话)的RLE单元是否相连,如果相连,则将后面的RLE单元并入该RLE单元并删除后面的RLE单元。
情况C:距离为0,说明该列号已经被记录,此时不用做任何动作。
情况D:如果遍历所了所有RLE之后,上述情况均不符合,则说明该列是该行之后的一个新的RLE单元(距离大于1),直接在该行RLE数组的最后添加一个新的RLE单元[Col,Col]。
图5是示出根据本发明的实施例的判断瓦片是否存在的流程的流程图。
根据瓦片的层级(Level)、行号(Row)、列号(Col)检索瓦片是否存在的流程如图5所示。
首先,比较给定的级别是否在级别范围内,如果在范围内,则使用对应级别的RLE锯齿数组索引;
其次,判断Row是否落入RLE索引的行范围内,如果落入则使用对应行的RLE数组;
最后,顺次计算Col和RLE的距离,如果距离为0则表示瓦片存在,反之则不存在。
图6是示出根据本发明的实施例的表示游程编码索引的二维数组的示意图。
下面举例说明根据游程编码索引检索瓦片的算法。
将有符号整数的最高位,即表示正负的位,作为是否存在瓦片的标志。例如,-5最的高位为1,则表示存在5个有瓦片的区域;5的最高位为0,则表示存在5个没有瓦片的区域。因此,游程编码索引的一行可以简单认为是一个变长的有符号整数数组。整个游程索引可以使用一个二维锯齿数组来表示。由于二维锯齿数组的创建和维护都比较困难,因此,采用二维数组表示,数组的列长度由最长的一行数据决定,其他行数据不足则用0补齐,如图6所示。
根据游程编码索引检索瓦片的算法简要描述如下:
1)根据传入的Row确定相对的行数组
RelRow=Row–MinRow
2)根据传入的Col确定相对的开始列
StartCol=Col–MinCol
3)遍历行数组计算瓦片是否存在
图7是示出根据本发明的实施例的多时相瓦片数据集管理系统构架的示意图。
多时相瓦片数据集管理系统提供多时相数据集管理组件与多时相数据集管理工具,通过工具可实现对多时相数据集的创建、删除、注册、注销、浏览等功能,系统架构如图7所示。
其中各层的说明如下。
数据层:包括多时相数据集的元表结构,多时相数据集的数据表结构以及多时相数据集的索引表结构。
组件层:实现多时相数据集的创建管理和浏览等功能。
应用层:多时相数据集管理工具,通过调用组件层的多时相数据集管理组件实现多时相数据集的浏览、查询、管理功能。
图8是示出根据本发明的实施例的多时相数据集的创建流程的流程图。图9是示出根据本发明的实施例的多时相数据集的浏览流程的流程图。
多时相瓦片数据集管理系统的处理流程主要有两个:一个为多时相数据集的创建流程,如图8所示,一个为多时相数据集的浏览流程,如图9所示。
图10是示出根据本发明的实施例的多时相瓦片数据集管理工具主界面的示意图。多时相瓦片数据集管理工具主界面如图10所示。系统工具包括创建、注册、删除、注销多时相瓦片数据集,创建、更新多时相瓦片数据集索引,浏览、追溯不同时相的多时相瓦片数据集等功能。