栅格数据访问方法、装置、电子设备及计算机存储介质
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种栅格数据访问方法、装置、电子设备及计算机存储介质。
背景技术
栅格数据是一类数据的总称,其以像元矩阵结构保存数据,通常用于存储地理空间数据,包括遥感影像、DEM(数字高程模型)、GRID等多种数据形态。
所谓栅格数据类型,是除Int(整型)、Varchar(字符串)等常规字段数据类型之外,针对存储栅格数据需求而专门引入的扩展字段类型。
在通过数据库系统存储栅格数据时,用户只要将数据表中的某个列定义为栅格数据类型的字段,就可以在该列中存储栅格数据,且其中的每行存储一个栅格对象对应的栅格数据,并通过执行相应的算子实现对栅格对象的栅格数据进行增加操作、删除操作、改变操作、查找操作。
传统的数据库系统仅支持栅格对象级的多分辨快速访问。对存储于一张数据表中的所有栅格对象中的栅格数据执行多分辨率访问时,会随着访问尺度增大,需要访问多个栅格对象,会出现大量小对象访问而导致访问性能衰减,影响访问速度。
发明内容
有鉴于此,本发明实施例提供一种栅格数据访问方案,以解决上述部分或全部问题。
根据本发明实施例的第一方面,提供了一种栅格数据访问方法,其包括:根据栅格数据访问请求,执行对应的窗口查询输入以确定查询窗口对应的目标像元分辨率;根据所述目标像元分辨率和存储的栅格对象的像元分辨率,计算抽样级别并判断所述抽样级别是否大于阈值;若大于,则根据列级索引访问所述查询窗口对应的栅格数据,所述列级索引为根据列内所述栅格对象的栅格数据通过降采样生成的索引。
根据本发明实施例的第二方面,提供了一种栅格数据访问装置,其包括:确定模块,用于根据栅格数据访问请求,执行对应的窗口查询输入以确定查询窗口对应的目标像元分辨率;判断模块,用于根据所述目标像元分辨率和存储的栅格对象的像元分辨率,计算抽样级别并判断所述抽样级别是否大于阈值;第一访问模块,用于若大于,则根据列级索引访问所述查询窗口对应的栅格数据,所述列级索引为根据列内所述栅格对象的栅格数据通过降采样生成的索引。
根据本发明实施例的第三方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如第一方面所述的栅格数据访问方法对应的操作。
根据本发明实施例的第四方面,提供了一种计算机存储介质,其特征在于,其上存储有空间数据库,所述空间数据库包括空间数据表和列级索引,所述空间数据表的至少一个字段用于存储栅格对象的栅格数据,所述列级索引为根据所述至少一个字段中的栅格数据通过降采样生成的索引。
根据本发明实施例的第五方面,提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面所述的栅格数据访问方法。
根据本发明实施例提供的栅格数据访问方案,根据栅格数据访问请求,确定查询窗口的目标像元分辨率,并根据目标像元分辨率和栅格对象的像元分辨率计算抽样级别,依据抽样级别与阈值的大小关系,确定是否需要访问列级索引,在抽样级别大于阈值时,根据列级索引访问查询窗口对应的栅格数据,提升了列内多栅格数据的访问速度,实现了任意尺度下海量栅格数据的快速访问。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为根据本发明实施例一的一种栅格数据访问方法的步骤流程图;
图2为根据本发明实施例二的一种栅格数据访问方法的步骤流程图;
图3为根据本发明实施例三的一种栅格数据访问方法的步骤流程图;
图4为根据本发明实施例三的一种行级四叉树分块索引的结构示意图;
图5为根据拼接结果矩阵进行降采样生成列级索引的流程示意图;
图6为根据本发明实施例四的一种栅格数据访问方法的步骤流程图;
图7为根据本发明实施例五的一种栅格数据访问装置的结构框图;
图8为根据本发明实施例六的一种栅格数据访问装置的结构框图;
图9为根据本发明实施例七的一种电子设备的结构示意图。
具体实施方式
为了使本领域的人员更好地理解本发明实施例中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明实施例一部分实施例,而不是全部的实施例。基于本发明实施例中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本发明实施例保护的范围。
下面结合本发明实施例附图进一步说明本发明实施例具体实现。
实施例一
参照图1,示出了根据本发明实施例一的一种栅格数据访问方法的步骤流程图。
本实施例的栅格数据访问方法包括以下步骤:
步骤S102:根据栅格数据访问请求,执行对应的窗口查询输入以确定查询窗口对应的目标像元分辨率。
在本实施例中,所述栅格数据访问方法用于空间数据库系统中,以提升对其中的栅格数据的访问效率。在其他实施例中,该方法可以应用在其他任何存储有栅格数据的数据库系统中,例如,应用于存储画作的数据库系统等。
所述空间数据库系统利用栅格数据存储地理空间数据。例如,空间数据库系统中存储有一个空间数据表,空间数据表中的某列的字段类型为栅格数据类型,用于存储栅格对象对应的数据。本领域技术人员可以根据需要选择适当的栅格对象存储方式。
例如,一种存储方式为:数据类型为栅格数据类型的栅格列中的每行用于存储一个栅格对象(如遥感影像),根据需要,可以将栅格对象的元数据(metadata)和索引存储在行内,而栅格对象对应的栅格数据(即像元矩阵)可以直接采用原始栅格文件方式存储,这种存储方式可以降低数据冗余。
又例如,另一种存储方式为:将栅格对象的元数据存储在空间数据表的行内,并根据栅格对象的像元矩阵生成行内索引,将像元矩阵以栅格分块方式存储在基于行内索引的行内索引表中。
在本实施例中,当用户对空间数据表执行窗口查询访问时,触发所述栅格数据访问请求,以请求访问所述查询窗口内的栅格对象的栅格数据。当然,根据不同的业务需求,数据库系统可以配置不同的业务逻辑,采用任意适当的方式触发所述栅格数据访问请求,本实施例对此不作限定。
根据所述栅格数据访问请求,可以执行对应的窗口查询输入,以确定所述查询窗口对应的目标像元分辨率。在不同的业务中,所述目标像元分辨率所指示的含义可能不同。例如,在空间数据表中,所述目标像元分辨率用于指示所述查询窗口中每个像元对应的实际地理面积。
对于本领域技术人员而言,其可以根据需要采用适当的方式根据执行的窗口查询输入确定所述目标像元分辨率,本实施例对此不作限定。
步骤S104:根据所述目标像元分辨率和存储的栅格对象的像元分辨率,计算抽样级别并判断所述抽样级别是否大于阈值。
存储的所述栅格对象的像元分辨率用于指示所述栅格对象中一个像元对应实际地理面积。例如,所述栅格对象的像元分辨率为1米,则表示该像元指示1平方米范围的地物。
根据所述目标像元分辨率(记作f)和所述栅格对象的像元分辨率(记作g),可以计算出抽样级别(记作lv)。在本实施例中,所述抽样级别lv用于指示所述目标像元分辨率f与所述栅格对象的像元分辨率g间的比例关系。所述抽样级别lv可以采用任何适当的方式计算。
例如,计算所述目标像元分辨率f和所述栅格对象的像元分辨率g的比值,并求该比值以2为底的对数值,并将对数值取整作为抽样级别lv,此种方式中,抽样级别lv可以表示为:lv=log2(f_x/g_x),其中,f_x为所述查询窗口x轴的目标像元分辨率,g_x为所述栅格对象x轴的像元分辨率。又或者,抽样级别lv也可以根据查询窗口y轴的目标像元分辨率和栅格对象的y轴的像元分辨率进行计算。
当然,在其他实施例中,针对不同的业务需求,所述抽样级别lv可以指示其他含义,本领域技术人员可以采用其他适当的方式计算所述抽样级别lv。
根据计算的所述抽样级别lv,通过判断其是否大于阈值,可以确定是否需要访问一个以上的所述栅格对象的栅格数据。若所述抽样级别lv大于所述阈值,则执行步骤S106。若所述抽样级别lv不大于所述阈值,则表示仅需要进行栅格对象级的栅格数据访问,此种情况下可以采用现有的方式进行栅格数据的访问,例如直接访问栅格对象的行内存储的栅格数据。
需要说明的是,根据空间数据表的配置不同,所述阈值可以是任何适当的值。例如,若空间数据表中根据行内的所述栅格对象的栅格数据生成了行级索引,则所述阈值可以配置为所述行级索引的层高(层高是指行级索引的层数或级数,例如,行级索引的根节点为1层、叶子节点为1层,若根节点和叶子节点之间有一层中间节点,则其层高为3)。或者,若栅格对象的栅格数据采用原始栅格文件方式进行存储,空间数据表中未设置行级索引,则本领域技术人员可以根据需要将所述阈值配置为任何适当的设定阈值,如设定阈值可以为0。
步骤S106:若大于,则根据列级索引访问所述查询窗口对应的栅格数据,所述列级索引为根据列内所述栅格对象的栅格数据通过降采样生成的索引。
所述列级索引为根据列内所述栅格对象的栅格数据生成的索引。本领域技术人员可以根据需要采用适当的方式生成所述列级索引。通过配置列级索引,可以在需要进行大范围窗口查询(即抽样级别lv大于所述阈值)时,根据列级索引访问查询窗口对应的栅格数据,增加对多栅格对象执行多分辨率访问时的访问速度,减少性能衰减,提升查询访问性能。
在本实施例中,所述根据列内栅格对象的栅格数据,通过降采样生成所述列级索引。降采样是指对维度尺寸较大的像元矩阵进行抽样算法,获得维度尺寸较小的像元矩阵的操作。例如,512像元*512像元的像元矩阵通过抽样算法获得256像元*256像元的像元矩阵。由于采用降采样生成列级索引,因此可以控制列级索引本身的数据量较小,且使列级索引的创建速度较快,使资源开销可控。
通过本实施例,根据栅格数据访问请求,确定查询窗口的目标像元分辨率,并根据目标像元分辨率和栅格对象的像元分辨率计算抽样级别,依据抽样级别与阈值的大小关系,确定是否需要访问列级索引,在抽样级别大于阈值时,根据列级索引访问查询窗口对应的栅格数据,提升了列内多栅格数据的访问速度,实现了任意尺度下海量栅格数据的快速访问。
本实施例的栅格数据访问方法可以由任意适当的具有数据处理能力的电子设备执行,包括但不限于:服务器、移动终端(如平板电脑、手机等)和PC机等。
实施例二
参照图2,示出了根据本发明实施例二的一种栅格数据访问方法的步骤流程图。
本实施例的栅格数据访问方法包括前述的步骤S102~步骤S106。
其中,所述步骤S102包括以下子步骤:
子步骤S1021:根据所述栅格数据访问请求,执行对应的窗口查询输入,获取对应的窗口实地范围和窗口像元数。
在本实施例中,当触发所述栅格数据访问请求时,执行对应的窗口查询输入,获取所述查询窗口的窗口实地范围(记作e)和窗口像元数(记作p)。
其中,窗口实地范围e用于指示所述查询窗口对应的实际地理空间的面积。在本实施例中,以所述查询窗口的左上角点坐标和右下角点坐标表示所述查询窗口的窗口实地范围e,记作e=(ul_x,ul_y),(lr_x,lr_y)。在其他实施例中,可以采用其他方式表示所述查询窗口的窗口实地范围e。
所述窗口像元数p用于指示在显示设备上所述查询窗口对应的像元数。在本实施例中,以x轴方向像元数和y轴方向像元数表示所述查询窗口的窗口像元数p,记作p=(cell_count_x,cell_count_y)。在其他实施例中,可以采用其他方式表示所述查询窗口的窗口像元数p。
当然,在其他实施例中,根据不同的业务需求,执行对应的窗口查询输入可以获取其他能够表征查询窗口的信息,本实施例对此不作限定。
子步骤S1022:根据所述窗口实地范围和所述查询窗口像元数,计算所述查询窗口对应的目标像元分辨率。
在第一种可行方式中,计算所述查询窗口对应的目标像元分辨率f的过程为:根据所述窗口实地范围e计算所述查询窗口的x轴长度,根据所述窗口像元数p确定所述查询窗口x轴的像元数,计算所述查询窗口的x轴的长度与所述查询窗口x轴像元数的比值,并将该比值确定为所述目标像元分辨率f。
在本方式中,所述目标像元分辨率f可以表示为f=(lr_x-ul_x)/cell_count_x。其中,lr_x为所述查询窗口的窗口实地范围e中右下角点的x轴坐标,ul_x为所述查询窗口的窗口实地范围e中左上角点的x轴坐标,cell_count_x为所述查询窗口的x轴像元数。
在第二种可行方式中,可以根据所述查询窗口的y轴高度和所述查询窗口y轴的像元数,计算所述目标像元分辨率f,其计算过程与第一种可行方式中的计算过程类型,故不再赘述。或者,可以分别计算所述查询窗口x轴的目标分辨率和y轴目标分辨率,并取其中较大的一个作为最终的目标分辨率f。
在本实施例中,执行对应的窗口查询输入获取窗口实地范围e和窗口像元数p,通过窗口实地范围e和窗口像元数p可以准确且便捷地计算目标像元分辨率f,提升计算速度。
由上,通过本实施例,根据栅格数据访问请求,确定查询窗口的目标像元分辨率,并根据目标像元分辨率和栅格对象的像元分辨率计算抽样级别,依据抽样级别与阈值的大小关系,确定是否需要访问列级索引,在抽样级别大于阈值时,根据列级索引访问查询窗口对应的栅格数据,提升了列内多栅格数据的访问速度,实现了任意尺度下海量栅格数据的快速访问栅格对象。而且目标分辨率计算快捷准确,有助于提升抽样级别计算的准确性。
本实施例的栅格数据访问方法可以由任意适当的具有数据处理能力的电子设备执行,包括但不限于:服务器、移动终端(如平板电脑、手机等)和PC机等。
实施例三
参照图3,示出了根据本发明实施例三的一种栅格数据访问方法的步骤流程图。
本实施例的栅格数据访问方法包括前述的步骤S102~步骤S106。
所述步骤S102可以采用前述实施例一或实施例二中的方式实现,或者采用其他方式实现。
在本实施例中,在所述步骤S102之前,所述方法还包括以下步骤:
步骤S100:对栅格对象的行级索引的根节点像元矩阵进行拼接操作并对获得的拼接结果矩阵,执行降采样操作,根据降采样结果生成所述列级索引。
在本实施例中,所述行级索引为针对某个栅格对象,根据其栅格数据生成的索引。本领域技术人员可以根据需要为空间数据表中的每个栅格对象均生成对应的行级索引,也可以仅为空间数据表中的部分所述栅格对象生成对应的行级索引。通过配置行级索引可以提升栅格对象级多分辨率栅格数据访问的访问速度。
所述行级索引可以是任意适当类型的索引,针对不同类型的所述行级索引,本领域技术人员可以采用适当的方式生成。例如,所述行级索引为固定大小分块的行级四叉树分块索引其结构如图4所示。用户通过执行ST_BuildPyramid过程函数为空间数据表中的栅格对象创建栅格金字塔,并基于栅格金子塔构建对应的行级索引。
一种具体地构建所述行级索引的过程为:
将原始栅格数据(即像元矩阵)进行分块操作,获得固定大小的栅格分块,并将栅格分块作为叶子节点存储在所述行级索引的底层(如图4所示的L0层)。
以叶子节点为基础,执行倍率为F(F可以根据需要确定,其为大于1的整数,本例中F=2)的逐级降采样,并对应构建出包含N(N可以根据需要确定,其为大于或等于1的整数,本例中N=2)个层级的降分辨率分块对象集合(如图4所述的L1层和L2层)。所述分块对象用于存储所述行级索引的各节点的像元矩阵。
可选地,为了便于检索,所述行级索引可以保存到一个索引表中进行存储,为了便于描述,该索引表记作表1,表1可以为一种行级栅格四叉树分块索引表。
表1中的字段包括但不限于:rid字段、level字段、row字段、column字段和block字段。block字段用于存储栅格分块的分块对象,分块对象由像元矩阵构成,一般同一栅格对象内的像元矩阵大小固定,可以是256像元*256像元等。rid字段为行级索引中栅格分块所属栅格对象的唯一标识。level字段为栅格分块在行级索引中级别。row字段为栅格分块所在行维序号。column字段为栅格分块所在列维的序号。
rid |
level |
row |
column |
block |
1 |
0 |
0 |
0 |
[cell_matrix] |
1 |
0 |
1 |
1 |
[cell_matrix] |
…… |
…… |
…… |
…… |
…… |
表1
在表1中每一元组存储一个栅格分块的分块信息,所述分块信息包括分块对象和分块索引编号。其中:rid字段、level字段、row字段和column字段构成所述栅格分块的分块索引编号。以表1中第2行为例,栅格分块的分块索引编号为1000,该栅格分块所属栅格对象为空间数据表中标识为1的栅格对象,该栅格分块在行级索引中的层级为L0,该栅格分块栅格对象的像元矩阵中的行维序号为0,列维序列为0,该栅格分块的分块对象为block字段存储的像元矩阵。
为进一步加快栅格分块检索速度,可基于分块索引编号进一步构建B树或B+树索引。
在本实施例中,基于上述的行级索引,用户可以执行预设的语句指示创建列级索引,使得列内栅格数据访问速度更快。而且由于列级索引是基于行级索引创建的,因此可以综合利用栅格对象的行级索引和列级索引,加快对栅格数据多分辨率任意尺度下的访问效率。
在一具体实现中,所述步骤S100包括以下子步骤:
子步骤S1001:根据所述根节点像元矩阵对应的栅格对象间的空间位置关系,拼接所述根节点像元矩阵,以获得拼接结果矩阵。
在本实施例中,由于栅格对象中的栅格数据用于指示地理空间数据,故而在拼接根节点像元矩阵时,根据其对应的栅格对象间的空间位置关系确定根节点像元矩阵间的位置关系,进而保证拼接结果矩阵与实际地理空间一致。一种拼接出的拼接结果矩阵的结构如图5中A处所示,其中1-2到16-2指示栅格对象1~16的行级索引的根节点像元矩阵。
子步骤1002:对所述拼接结果矩阵,执行降采样倍率为设定倍率的降采样操作,并根据降采样结果,生成所述列级索引。
所述设定倍率(记作G,在本例中G=2)。当然,本领域技术人员可以根据检索精度和列级索引层数需求,将所述设定倍率G设置为其他值,如4、6等。
在执行降采样操作时,根据拼接出的所述拼接结果矩阵的大小不同,可以执行一次或多次降采样操作,直至降采样结果满足终止条件。例如,终止条件可以为降采样操作获得的栅格分块为1。
当执行多次降采样操作时,首次降采样操作基于拼接结果矩阵执行,非首次降采样操作则基于前次降采样结果执行。执行两次降采样操作的降采样结果如图5中B处和C处所示,其中,B处的1-3到4-3指示基于拼接结果矩阵降采样后的像元矩阵,C处的1-4指示基于B处的降采样结果降采样后的像元矩阵。
生成列级索引时,根据各次降采样操作的降采样结果构建高度为M层的列级索引,本实施例中构建的列级索引如图5中D处所示。其中,M为大于或等于1的整数,且M的取值等于降采样操作的次数。
在本实施例中,所述列级索引为列级四叉树分块索引。该列级索引可以存储到列级栅格四叉树分块索引表中。本领域技术人员可以根据需要配置列级栅格四叉树分块索引表的字段,本实施例对此不作限定。
在其他实施例中,所述列级索引可以是其他类型的索引,本实施例对此不作限定。
通过本实施例,根据栅格数据访问请求,确定查询窗口的目标像元分辨率,并根据目标像元分辨率和栅格对象的像元分辨率计算抽样级别,依据抽样级别与阈值的大小关系,确定是否需要访问列级索引,在抽样级别大于阈值时,根据列级索引访问查询窗口对应的栅格数据,提升了列内多栅格数据的访问速度,实现了任意尺度下海量栅格数据的快速访问栅格对象,而且列级索引数据量较小,不会存在大量数据冗余。
此外,一方面,通过将一幅地理空间影像数据导入到空间数据表的栅格列的一行中,存储为一个栅格对象的方式,可以使用户方便地将外部一幅地理空间影像数据对应到空间数据表中的一个栅格对象,概念对应关系比较清晰,且单个栅格对象的大小不受限。针对每个栅格对象构建行内索引,可以加速行内多分辨率的栅格数据访问。
另一方面,由于创建了列级索引,因此可以满足用户对大范围地理空间影像数据无缝一体化查询需求,而且可以有效解决“像元分辨率过载”问题,解决进行大量小对象的读取以及实时抽样时会大幅降低空间数据库系统访问性能的问题。
所谓像元分辨率过载,即用户对整个空间数据库系统中的空间数据表进行基于窗口查询(即显示出和查询窗口相交的所有栅格对象)时,随着查询窗口覆盖范围的增大,会访问到越来越多的栅格对象,且可能出现查询窗口所需适配的像元分辨率超出栅格对象本身所覆盖的地理范围(即一个栅格对象所覆盖的范围在屏幕地图上显示时不足一个屏幕像素)。
本栅格数据访问方法,既具有以栅格对象为单位存储和管理栅格数据的优势,同时通过列级索引,在需要访问多个栅格对象的栅格数据时,通过直接访问列级索引加快了栅格数据访问效率。列级索引直接在行级索引的根节点像元矩阵的基础上通过降采样操作创建,因此很大程度上控制了列级索引本身的数据量,创建速度也会非常快,资源开销完全可控,具有很好的实用性。
本实施例的栅格数据访问方法可以由任意适当的具有数据处理能力的电子设备执行,包括但不限于:服务器、移动终端(如平板电脑、手机等)和PC机等。
实施例四
参照图6,示出了根据本发明实施例四的一种栅格数据访问方法的步骤流程图。
本实施例的栅格数据访问方法包括前述的步骤S102~步骤S106。
所述步骤S102可以采用前述实施例一或实施例二中的方式实现,或者采用其他方式实现。
在本实施例中,当所述阈值为根据行内的所述栅格对象的栅格数据生成的行级索引的层高时,所述方法还包括步骤S108。
所述步骤S108:若小于或等于所述阈值且不为0,则根据所述行级索引访问所述查询窗口对应的栅格数据。
当空间数据表中的栅格对象具有对应的行级索引,所述阈值为根据行内的所述栅格对象的栅格数据生成的行级索引的层高时,若步骤S104中判断所述抽样级别大于阈值,则执行所述步骤S106;若判断所述抽样级别小于或等于阈值且不等于0,则执行所述步骤S108;若抽样级别等于0,可以直接访问原始像元矩阵。
其中,执行所述步骤S106的过程可以与实施例一至三中所述步骤S106的执行过程相同,故不再赘述。
在执行所述步骤S108时,由于抽样级别lv小于或等于行级索引的层高且不为0,表示需要一个栅格对象内的栅格数据,因而访问行级索引,以保证良好的栅格对象级多分辨率栅格数据访问速率。
根据栅格数据访问请求,确定查询窗口的目标像元分辨率,并根据目标像元分辨率和栅格对象的像元分辨率计算抽样级别,依据抽样级别与阈值的大小关系,确定是否需要访问列级索引,在抽样级别大于阈值时,根据列级索引访问查询窗口对应的栅格数据,提升了列内多栅格数据的访问速度,实现了任意尺度下海量栅格数据的快速访问栅格对象,而且列级索引数据量较小,不会存在大量数据冗余。通过行级索引和列级索引的联合索引机制可以提高查询访问性能。
实施例五
参照图7,示出了根据本发明实施例五的一种栅格数据访问装置的结构框图。
本实施例的栅格数据访问装置包括确定模块702、判断模块704和第一访问模块706。
其中,所述确定模块702,用于根据栅格数据访问请求,执行对应的窗口查询输入以确定查询窗口对应的目标像元分辨率。
在本实施例中,所述栅格数据访问装置用于访问空间数据库系统中的栅格数据。在其他实施例中,该装置可以用于访问其他数据库系统中的栅格数据,例如,访问存储画作的栅格数据的数据库系统中的栅格数据。
所述空间数据库系统利用栅格数据存储地理空间数据。例如,空间数据库系统中存储有一个空间数据表,空间数据表中的某列的字段类型为栅格数据类型,用于存储栅格对象对应的数据。本领域技术人员可以根据需要选择适当的栅格对象存储方式。
例如,一种存储方式为:数据类型为栅格数据类型的栅格列中的每行用于存储一个栅格对象(如遥感影像),根据需要,可以将栅格对象的元数据(metadata)和索引存储在行内,而栅格对象对应的栅格数据(即像元矩阵)可以直接采用原始栅格文件方式存储,这种存储方式可以降低数据冗余。
又例如,另一种存储方式为:将栅格对象的元数据存储在空间数据表的行内,并根据栅格对象的像元矩阵生成行内索引,将像元矩阵以栅格分块方式存储在基于行内索引的行内索引表中。
在本实施例中,当用户对空间数据表执行窗口查询访问时,触发所述栅格数据访问请求,以请求访问所述查询窗口内的栅格对象的栅格数据。当然,根据不同的业务需求,数据库系统可以配置不同的业务逻辑,采用任意适当的方式触发所述栅格数据访问请求,本实施例对此不作限定。
根据所述栅格数据访问请求,可以执行对应的窗口查询输入,以确定所述查询窗口对应的目标像元分辨率。在不同的业务中,所述目标像元分辨率所指示的含义可能不同。例如,在空间数据表中,所述目标像元分辨率用于指示所述查询窗口中每个像元对应的实际地理面积。
对于本领域技术人员而言,其可以根据需要采用适当的方式根据执行的窗口查询输入确定所述目标像元分辨率,本实施例对此不作限定。
所述判断模块,用于根据所述目标像元分辨率和存储的栅格对象的像元分辨率,计算抽样级别并判断所述抽样级别是否大于阈值。
存储的所述栅格对象的像元分辨率用于指示所述栅格对象中一个像元对应实际地理面积。例如,所述栅格对象的像元分辨率为1米,则表示该像元指示1平方米范围的地物。
根据所述目标像元分辨率(记作f)和所述栅格对象的像元分辨率(记作g),可以计算出抽样级别(记作lv)。在本实施例中,所述抽样级别lv用于指示所述目标像元分辨率f与所述栅格对象的像元分辨率g间的比例关系。所述抽样级别lv可以采用任何适当的方式计算。
例如,计算所述目标像元分辨率f和所述栅格对象的像元分辨率g的比值,并求该比值以2为底的对数值,并将对数值取整作为抽样级别lv,此种方式中,抽样级别lv可以表示为:lv=log2(f_x/g_x),其中,f_x为所述查询窗口x轴的目标像元分辨率,g_x为所述栅格对象x轴的像元分辨率。又或者,抽样级别lv也可以根据查询窗口y轴的目标像元分辨率和栅格对象的y轴的像元分辨率进行计算。
当然,在其他实施例中,针对不同的业务需求,所述抽样级别lv可以指示其他含义,本领域技术人员可以采用其他适当的方式计算所述抽样级别lv。
根据计算的所述抽样级别lv,通过判断其是否大于阈值,可以确定是否需要访问一个以上的所述栅格对象的栅格数据。若所述抽样级别lv大于所述阈值,则由第一访问模块706执行对应动作。若所述抽样级别lv不大于所述阈值,则表示仅需要进行栅格对象级的栅格数据访问,此种情况下可以采用现有的方式进行栅格数据的访问,例如直接访问栅格对象的行内存储的栅格数据。
需要说明的是,根据空间数据表的配置不同,所述阈值可以是任何适当的值。例如,若空间数据表中根据行内的所述栅格对象的栅格数据生成了行级索引,则所述阈值可以配置为所述行级索引的层高(层高是指行级索引的层数或级数,例如,行级索引的根节点为1层、叶子节点为1层,若根节点和叶子节点之间有一层中间节点,则其层高为3)。或者,若栅格对象的栅格数据采用原始栅格文件方式进行存储,空间数据表中未设置行级索引,则本领域技术人员可以根据需要将所述阈值配置为任何适当的设定阈值,如设定阈值可以为0。
所述第一访问模块706,用于若大于,则根据列级索引访问所述查询窗口对应的栅格数据,所述列级索引为根据列内所述栅格对象的栅格数据通过降采样生成的索引。
所述列级索引为根据列内所述栅格对象的栅格数据生成的索引。本领域技术人员可以根据需要采用适当的方式生成所述列级索引。通过配置列级索引,可以在需要进行大范围窗口查询(即抽样级别lv大于所述阈值)时,根据列级索引访问查询窗口对应的栅格数据,增加对多栅格对象执行多分辨率访问时的访问速度,减少性能衰减,提升查询访问性能。
在本实施例中,所述根据列内栅格对象的栅格数据,通过降采样生成所述列级索引。降采样是指对维度尺寸较大的像元矩阵进行抽样算法,获得维度尺寸较小的像元矩阵的操作。例如,512像元*512像元的像元矩阵通过抽样算法获得256像元*256像元的像元矩阵。由于采用降采样生成列级索引,因此可以控制列级索引本身的数据量较小,且使列级索引的创建速度较快,使资源开销可控。
通过本实施例,根据栅格数据访问请求,确定查询窗口的目标像元分辨率,并根据目标像元分辨率和栅格对象的像元分辨率计算抽样级别,依据抽样级别与阈值的大小关系,确定是否需要访问列级索引,在抽样级别大于阈值时,根据列级索引访问查询窗口对应的栅格数据,提升了列内多栅格数据的访问速度,实现了任意尺度下海量栅格数据的快速访问。
实施例六
参照图8,示出了根据本发明实施例六的一种栅格数据访问装置的结构框图。
本实施例的栅格数据访问装置包括前述的确定模块702、判断模块704和第一访问模块706。
可选地,所述确定模块702包括获取模块7021和计算模块7022。
所述获取模块7021,用于根据所述栅格数据访问请求,执行对应的窗口查询输入,获取对应的窗口实地范围和窗口像元数。
在本实施例中,当触发所述栅格数据访问请求时,执行对应的窗口查询输入,获取所述查询窗口的窗口实地范围(记作e)和窗口像元数(记作p)。
其中,窗口实地范围e用于指示所述查询窗口对应的实际地理空间的面积。在本实施例中,以所述查询窗口的左上角点坐标和右下角点坐标表示所述查询窗口的窗口实地范围e,记作e=(ul_x,ul_y),(lr_x,lr_y)。在其他实施例中,可以采用其他方式表示所述查询窗口的窗口实地范围e。
所述窗口像元数p用于指示在显示设备上所述查询窗口对应的像元数。在本实施例中,以x轴方向像元数和y轴方向像元数表示所述查询窗口的窗口像元数p,记作p=(cell_count_x,cell_count_y)。在其他实施例中,可以采用其他方式表示所述查询窗口的窗口像元数p。
当然,在其他实施例中,根据不同的业务需求,执行对应的窗口查询输入可以获取其他能够表征查询窗口的信息,本实施例对此不作限定。
所述计算模块7022,用于根据所述窗口实地范围和所述查询窗口像元数,计算所述查询窗口对应的目标像元分辨率。
在第一种可行方式中,计算所述查询窗口对应的目标像元分辨率f的过程为:根据所述窗口实地范围e计算所述查询窗口的x轴长度,根据所述窗口像元数p确定所述查询窗口x轴的像元数,计算所述查询窗口的x轴的长度与所述查询窗口x轴像元数的比值,并将该比值确定为所述目标像元分辨率f。
在本方式中,所述目标像元分辨率f可以表示为f=(lr_x-ul_x)/cell_count_x。其中,lr_x为所述查询窗口的窗口实地范围e中右下角点的x轴坐标,ul_x为所述查询窗口的窗口实地范围e中左上角点的x轴坐标,cell_count_x为所述查询窗口的x轴像元数。
在第二种可行方式中,可以根据所述查询窗口的y轴高度和所述查询窗口y轴的像元数,计算所述目标像元分辨率f,其计算过程与第一种可行方式中的计算过程类型,故不再赘述。或者,可以分别计算所述查询窗口x轴的目标分辨率和y轴目标分辨率,并取其中较大的一个作为最终的目标分辨率f。
在本实施例中,执行对应的窗口查询输入获取窗口实地范围e和窗口像元数p,通过窗口实地范围e和窗口像元数p可以准确且便捷地计算目标像元分辨率f,提升计算速度。
可选地,当所述阈值为根据行内的所述栅格对象的栅格数据生成的行级索引的层高时,所述装置还包括第二访问模块708。所述第二访问模块708用于若小于或等于所述阈值且不为0,则根据所述行级索引访问所述查询窗口对应的栅格数据。
当空间数据表中的栅格对象具有对应的行级索引,所述阈值为根据行内的所述栅格对象的栅格数据生成的行级索引的层高时,若判断模块704判断所述抽样级别大于阈值,则由第一访问模块706动作;若判断所述抽样级别小于或等于阈值且不等于0,则由第二访问模块708动作;若抽样级别等于0,可以直接访问原始像元矩阵。
在所述第二访问模块708动作时,由于抽样级别lv小于或等于行级索引的层高且不为0,表示需要一个栅格对象内的栅格数据,因而访问行级索引,以保证良好的栅格对象级多分辨率栅格数据访问速率。
可选地,所述装置还包括列索引生成模块700,所述列索引生成模块用于,在根据栅格数据访问请求,执行对应的窗口查询输入以确定所述查询窗口对应的目标像元分辨率之前,对栅格对象的行级索引的根节点像元矩阵进行拼接操作并对获得的拼接结果矩阵,执行降采样操作,根据降采样结果生成所述列级索引。
在本实施例中,所述行级索引为针对某个栅格对象,根据其栅格数据生成的索引。本领域技术人员可以根据需要为空间数据表中的每个栅格对象均生成对应的行级索引,也可以仅为空间数据表中的部分所述栅格对象生成对应的行级索引。通过配置行级索引可以提升栅格对象级多分辨率栅格数据访问的访问速度。
所述行级索引可以是任意适当类型的索引,针对不同类型的所述行级索引,本领域技术人员可以采用适当的方式生成。例如,所述行级索引为固定大小分块的行级四叉树分块索引其结构如图4所示。用户通过执行ST_BuildPyramid过程函数为空间数据表中的栅格对象创建栅格金字塔,并基于栅格金子塔构建对应的行级索引。
一种具体地构建所述行级索引的过程为:
将原始栅格数据(即像元矩阵)进行分块操作,获得固定大小的栅格分块,并将栅格分块作为叶子节点存储在所述行级索引的底层(如图4所示的L0层)。
以叶子节点为基础,执行倍率为F(F可以根据需要确定,其为大于1的整数,本例中F=2)的逐级降采样,并对应构建出包含N(N可以根据需要确定,其为大于或等于1的整数,本例中N=2)个层级的降分辨率分块对象集合(如图4所述的L1层和L2层)。所述分块对象用于存储所述行级索引的各节点的像元矩阵。
可选地,为了便于检索,所述行级索引可以保存到一个索引表中进行存储,下述表1示出了一种行级栅格四叉树分块索引表。表1中的字段包括但不限于:rid字段、level字段、row字段、column字段和block字段。
rid |
level |
row |
column |
block |
1 |
0 |
0 |
0 |
[cell_matrix] |
1 |
0 |
1 |
1 |
[cell_matrix] |
…… |
…… |
…… |
…… |
…… |
表1
在表1中每一元组存储一个栅格分块的分块信息,所述分块信息包括分块对象和分块索引编号。
其中:rid字段值、level字段值、row字段值和column字段值构成所述栅格分块的分块索引编号。block字段用于存储栅格分块的分块对象,分块对象由像元矩阵构成,一般同一栅格对象内的像元矩阵大小固定,可以是256像元*256像元等。rid字段为行级索引中栅格分块所属栅格对象的唯一标识。level字段为栅格分块在行级索引中级别。row字段为栅格分块所在行维序号。column字段为栅格分块所在列维的序号。
为进一步加快栅格分块检索速度,可基于分块索引编号进一步构建B树或B+树索引。
在本实施例中,基于上述的行级索引,用户可以执行预设的语句指示创建列级索引,使得列内栅格数据访问速度更快。而且由于列级索引是基于行级索引创建的,因此可以综合利用栅格对象的行级索引和列级索引,加快对栅格数据多分辨率任意尺度下的访问效率。
可选地,所述列索引生成模块700包括拼接模块7001和降采样模块7002。
所述拼接模块7001,用于根据所述根节点像元矩阵对应的栅格对象间的空间位置关系,拼接所述根节点像元矩阵,以获得拼接结果矩阵。
在本实施例中,由于栅格对象中的栅格数据用于指示地理空间数据,故而在拼接根节点像元矩阵时,根据其对应的栅格对象间的空间位置关系确定根节点像元矩阵间的位置关系,进而保证拼接结果矩阵与实际地理空间一致。一种拼接出的拼接结果矩阵的结构如图5中A处所示。
所述降采样模块7002,用于对所述拼接结果矩阵,执行降采样倍率为设定倍率的降采样操作,并根据降采样结果,生成所述列级索引。
所述设定倍率(记作G,在本例中G=2)。当然,本领域技术人员可以根据检索精度和列级索引层数需求,将所述设定倍率G设置为其他值,如4、6等。
在执行降采样操作时,根据拼接出的所述拼接结果矩阵的大小不同,可以执行一次或多次降采样操作,直至降采样结果满足终止条件。例如,终止条件可以为降采样操作获得的栅格分块为1。
当执行多次降采样操作时,首次降采样操作基于拼接结果矩阵执行,非首次降采样操作则基于前次降采样结果执行。执行两次降采样操作的降采样结果如图5中B处和C处所示。
生成列级索引时,根据各次降采样操作的降采样结果构建高度为M层的列级索引,本实施例中构建的列级索引如图5中D处所示。其中,M为大于或等于1的整数,且M的取值等于降采样操作的次数。
在本实施例中,所述列级索引为列级四叉树分块索引。该列级索引可以存储到列级栅格四叉树分块索引表中。本领域技术人员可以根据需要配置列级栅格四叉树分块索引表的字段,本实施例对此不作限定。
在其他实施例中,所述列级索引可以是其他类型的索引,本实施例对此不作限定。
通过本实施例,根据栅格数据访问请求,确定查询窗口的目标像元分辨率,并根据目标像元分辨率和栅格对象的像元分辨率计算抽样级别,依据抽样级别与阈值的大小关系,确定是否需要访问列级索引,在抽样级别大于阈值时,根据列级索引访问查询窗口对应的栅格数据,提升了列内多栅格数据的访问速度,实现了任意尺度下海量栅格数据的快速访问栅格对象,而且列级索引数据量较小,不会存在大量数据冗余。
此外,一方面,通过将一幅地理空间影像数据导入到空间数据表的栅格列的一行中,存储为一个栅格对象的方式,可以使用户方便地将外部一幅地理空间影像数据对应到空间数据表中的一个栅格对象,概念对应关系比较清晰,且单个栅格对象的大小不受限。针对每个栅格对象构建行内索引,可以加速行内多分辨率的栅格数据访问。
另一方面,由于创建了列级索引,因此可以满足用户对大范围地理空间影像数据无缝一体化查询需求,而且可以有效解决“像元分辨率过载”问题,解决进行大量小对象的读取以及实时抽样时会大幅降低空间数据库系统访问性能的问题。
所谓像元分辨率过载,即用户对整个空间数据库系统中的空间数据表进行基于窗口查询(即显示出和查询窗口相交的所有栅格对象)时,随着查询窗口覆盖范围的增大,会访问到越来越多的栅格对象,且可能出现查询窗口所需适配的像元分辨率超出栅格对象本身所覆盖的地理范围(即一个栅格对象所覆盖的范围在屏幕地图上显示时不足一个屏幕像素)。
本栅格数据访问装置,既具有以栅格对象为单位存储和管理栅格数据的优势,同时通过列级索引,在需要访问多个栅格对象的栅格数据时,通过直接访问列级索引加快了栅格数据访问效率。列级索引直接在行级索引的根节点像元矩阵的基础上通过降采样操作创建,因此很大程度上控制了列级索引本身的数据量,创建速度也会非常快,资源开销完全可控,具有很好的实用性。
实施例七
参照图9,示出了根据本发明实施例七的一种电子设备的结构示意图,本发明具体实施例并不对电子设备的具体实现做限定。
如图9所示,该电子设备可以包括:处理器(processor)902、通信接口(Communications Interface)904、存储器(memory)906、以及通信总线908。
其中:
处理器902、通信接口904、以及存储器906通过通信总线908完成相互间的通信。
通信接口904,用于与其它电子设备如终端设备或服务器进行通信。
处理器902,用于执行程序910,具体可以执行上述栅格数据访问方法实施例中的相关步骤。
具体地,程序910可以包括程序代码,该程序代码包括计算机操作指令。
处理器902可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器906,用于存放程序910。存储器906可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
程序910具体可以用于使得处理器902执行以下操作:获取待下载应用的图标;根据所述图标,获取所述待下载应用的下载地址;从所述下载地址下载所述待下载应用。
在一种可选的实施方式中,程序910还用于使得处理器902根据栅格数据访问请求,执行对应的窗口查询输入以确定查询窗口对应的目标像元分辨率;根据所述目标像元分辨率和存储的栅格对象的像元分辨率,计算抽样级别并判断所述抽样级别是否大于阈值;若大于,则根据列级索引访问所述查询窗口对应的栅格数据,所述列级索引为根据列内所述栅格对象的栅格数据通过降采样生成的索引。
在一种可选的实施方式中,程序910还用于使得处理器902在根据栅格数据访问请求,执行对应的窗口查询输入以确定查询窗口对应的目标像元分辨率时,根据所述栅格数据访问请求,执行对应的窗口查询输入,获取对应的窗口实地范围和窗口像元数;根据所述窗口实地范围和所述查询窗口像元数,计算所述查询窗口对应的目标像元分辨率。
在一种可选的实施方式中,所述阈值为设定阈值,或者,所述阈值为根据行内的所述栅格对象的栅格数据生成的行级索引的层高。
在一种可选的实施方式中,程序910还用于使得处理器902在所述阈值为根据行内的所述栅格对象的栅格数据生成的行级索引的层高时,若小于或等于所述阈值且不为0,则根据所述行级索引访问所述查询窗口对应的栅格数据。
在一种可选的实施方式中,程序910还用于使得处理器902在所述根据栅格数据访问请求,执行对应的窗口查询输入以确定所述查询窗口对应的目标像元分辨率之前,对栅格对象的行级索引的根节点像元矩阵进行拼接操作并对获得的拼接结果矩阵,执行降采样操作,根据降采样结果生成所述列级索引。
在一种可选的实施方式中,程序910还用于使得处理器902在对栅格对象的行级索引的根节点像元矩阵进行拼接操作并对获得的拼接结果矩阵,执行降采样操作,根据降采样结果生成所述列级索引时,根据所述根节点像元矩阵对应的栅格对象间的空间位置关系,拼接所述根节点像元矩阵,以获得拼接结果矩阵;对所述拼接结果矩阵,执行降采样倍率为设定倍率的降采样操作,并根据降采样结果,生成所述列级索引。
程序910中各步骤的具体实现可以参见上述栅格数据访问方法实施例中的相应步骤和单元中对应的描述,在此不赘述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。
通过本实施例的电子设备,根据栅格数据访问请求,确定查询窗口的目标像元分辨率,并根据目标像元分辨率和栅格对象的像元分辨率计算抽样级别,依据抽样级别与阈值的大小关系,确定是否需要访问列级索引,在抽样级别大于阈值时,根据列级索引访问查询窗口对应的栅格数据,提升了列内多栅格数据的访问速度,实现了任意尺度下海量栅格数据的快速访问。
实施例八
在本实施例中,提供一种计算机存储介质,其上存储有空间数据库,所述空间数据库包括空间数据表和列级索引,所述空间数据表的至少一个字段用于存储栅格对象的栅格数据,所述列级索引为根据所述至少一个字段中的栅格数据通过降采样生成的索引。
该空间数据表例如为前述的实施例一所述的空间数据表。空间数据表中的某列的字段类型为栅格数据类型,用于存储栅格对象对应的数据。本领域技术人员可以根据需要选择适当的栅格对象存储方式。
一种存储方式为:将栅格对象的元数据存储在空间数据表的行内,并根据栅格对象的像元矩阵生成行内索引,将像元矩阵以栅格分块方式存储在基于行内索引的行内索引表中。
该列级索引可以是独立于空间数据表的索引表。该列级索引可以采用前述的实施例三所述的根据空间数据表中的至少一个字段中的栅格数据通过降采样方式生成。
由于该空间数据库中包含列级索引,因此在访问空间数据表中存储的栅格数据时,若抽样级别大于阈值,即发生像元过载的情况,则可以通过列级索引快速访问查询窗口对应的栅格数据,从而提升访问速度。
需要指出,根据实施的需要,可将本发明实施例中描述的各个部件/步骤拆分为更多部件/步骤,也可将两个或多个部件/步骤或者部件/步骤的部分操作组合成新的部件/步骤,以实现本发明实施例的目的。
上述根据本发明实施例的方法可在硬件、固件中实现,或者被实现为可存储在记录介质(诸如CD ROM、RAM、软盘、硬盘或磁光盘)中的软件或计算机代码,或者被实现通过网络下载的原始存储在远程记录介质或非暂时机器可读介质中并将被存储在本地记录介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件(诸如ASIC或FPGA)的记录介质上的这样的软件处理。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件(例如,RAM、ROM、闪存等),当所述软件或计算机代码被计算机、处理器或硬件访问且执行时,实现在此描述的栅格数据访问方法。此外,当通用计算机访问用于实现在此示出的栅格数据访问方法的代码时,代码的执行将通用计算机转换为用于执行在此示出的栅格数据访问方法的专用计算机。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明实施例的范围。
以上实施方式仅用于说明本发明实施例,而并非对本发明实施例的限制,有关技术领域的普通技术人员,在不脱离本发明实施例的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明实施例的范畴,本发明实施例的专利保护范围应由权利要求限定。