一种栅格数据的存储、读取方法及装置的制作方法

文档序号:6375220阅读:196来源:国知局
专利名称:一种栅格数据的存储、读取方法及装置的制作方法
技术领域
本申请涉 及栅格数据处理的技术领域,特别是涉及到ー种栅格数据的存储、读取方法及装置。
背景技术
栅格数据是以ニ维矩阵的形式来表示空间地物或现象分布的数据组织方式,每个矩阵单位称为ー个栅格单元,栅格的每个数据表示地物或现象的属性数据。随着地理信息系统(GIS、Geographic Information System)应用于各个行业,在实际应用中,大量使用海量栅格数据,带来应用系统的存储空间、性能要求与网络传输以及运算量等技术难点。尤其在ー些GIS软件中,海量栅格数据的存储管理以及网络传输速率往往是性能瓶颈。假设栅格数据是由K行L列个栅格单元组成,每个栅格单元存储的是O到9的整数值。若采用普通方法,每个栅格単元用I字节进行存储,则需要K*L个字节,所需的存储空间非常大,这对系统的存储、性能,以及网络的传输效率都要求很高。因此,本领域技术人员迫切需要解决的ー个技术问题在于,如何节省栅格数据的存储空间,提高栅格数据的处理效率。

发明内容
本申请提供ー种栅格数据的存储、读取方法及装置,用以节省栅格数据的存储空间,提高栅格数据的处理效率。为了解决上述问题,本申请公开了ー种栅格数据的存储方法,包括步骤S101,获取原始栅格数据,所述原始栅格数据包括原始栅格数据基本信息和原始栅格单元的值;所述原始栅格数据基本信息为原始栅格数据包括K*L个栅格単元;其中,所述K为行,L为列;所述原始栅格单元的值都是分布在O到9之间的整数;步骤S102,在所述K*L个栅格单元中依次从第一个未提取的原始栅格单元开始,按照预设提取方式提取9个连续原始栅格单元的值;步骤S103,采用第一目标数值代替所述9个连续原始栅格单元的值并存储在ー个目标栅格単元中;所述第一目标数值为根据9个连续原始栅格单元的值生成的ー个9位整数;所述存储包括将第一目标数值存储为4字节的int型;步骤S104,若提取到的连续原始栅格单元不足9个,则将不足9个连续原始栅格单元的栅格单元数记为N,采用第二目标数值代替所述N个的原始栅格单元的值并存储在ー个目标栅格単元中;所述第二目标数值为根据所述N个连续原始栅格单元的数值补充9-N个特征值后生成的ー个9位整数;所述存储包括将第二目标数值存储为4字节的int型;
步骤S105,判断是否遍历完所述K*L个栅格単元,若是,则执行步骤S106 ;若否,则返回步骤S102 ;步骤S106,将所述目标栅格単元的值和目标栅格数据的基本信息组织为目标栅格数据并存储;所述目标栅格单元的值为第一目标数值和/或第二目标数值;所述目标栅格数据的基本信息包括原始栅格数据基本信息、步骤S102中所述的预设提取方式及步骤S104中所述的9-N个特征值。优选地,所述预设提取方式包括按每行或每列提取;所述按每行提取包括从左到右或从右到左提取;若每行最后提取到的连续原始栅格単元不足9个,则执行步骤S104 ;所述按每列提取包括从上到下或从下到上提取;每列最后提取到的连续原始栅格単元不足9个,则执行步骤S104。
优选地,所述预设提取方式包括按整个栅格数据提取;所述按整个栅格数据提取包括把所有的行连接起来进行顺次提取;整个栅格数据的最后几个连续栅格单元不足9个,则执行步骤S104。优选地,所述步骤S103中根据9个连续原始栅格单元的值生成ー个9位整数包括将所述9个连续原始栅格单元的值,按顺序从高位到低位排列得到ー个9位整数;所述按顺序从高位到低位排列,包括提取到的第一个栅格単元的值放在最高位,最后ー个栅格単元的值放在最低位。优选地,所述特征值为O到9之间的整数。本申请实施例还公开了一种栅格数据读取的方法,包括步骤S201,读取目标栅格数据,所述目标栅格数据包括目标栅格数据基本信息以及目标栅格単元的值;所述目标栅格数据的基本信息包括原始栅格数据基本信息、预设提取方式及9-N个特征值;所述目标栅格单元的值包括第一目标数值和第二目标数值;所述第一目标数值为根据9个连续栅格单元的值生成的ー个9位整数;所述第二目标数值为根据所述N个连续栅格单元的数值补充9-N个特征值后生成的ー个9位整数;所述第一目标数值和第二目标数值均存储为4字节的int型;步骤S202,依据预设提取方式生成预设还原方式;步骤S203,从第一个未解析的目标栅格数据开始依次解析所述目标栅格数据中的栅格单元值,判断是否第一目标数值或第二目标数值;若为第一目标数值,则执行步骤S204,若为第二目标数值,则执行步骤S205 ;步骤S204,将所述每个第一目标数值还原成9个连续原始栅格单元的值,并按照预设还原方式还原到9个原始栅格单元中;步骤S205,将所述每个第二目标数值删去9-N个特征值还原成N个原始连续栅格単元的值,并按照预设还原方式还原到N个原始栅格单元中;步骤S206,判断是否遍历完所述目标栅格数据,若是,则执行步骤S207,若否,则返回步骤S203 ;步骤S207,将所述原始栅格单元的值和原始栅格数据基本信息组织为原始栅格数据并存储;所述原始栅格单元的值为第一目标数值和/或第二目标数值。所述原始栅格数据基本信息为原始栅格数据包括K*L个栅格单元;其中,所述K为行,L为列;所述原始栅格单元的值都是分布在O到9之间的整数。
优选地,所述依据预设提取方式生成的预设还原方式包括若预设提取方式为按每行提取,则预设还原方式为按每行还原;若预设提取方式为按每列提取,则预设还原方式为按每列还原;若预设提取方式为按整个栅格数据提取,则预设还原方式为按整个栅格数据还原。优选地,步骤S203包括
从第一个未解析的目标栅格数据开始依次解析所述目标栅格数据中的栅格单元值,判断当前目标栅格数据是否包含特征值,若是,则判定为第二目标数值,若否,则判定为第一目标数值。本申请实施例还公开了一种栅格数据存储的装置,包括原始栅格数据获取模块,用于获取原始栅格数据,所述原始栅格数据包括原始栅格数据基本信息和原始栅格单元的值;所述原始栅格数据基本信息为原始栅格数据包括K*L个栅格単元;其中,所述K为行,L为列;所述原始栅格单元的值都是分布在O到9之间的整数;栅格单元提取模块,用于在所述K*L个栅格单元中依次从第一个未提取的原始栅格単元开始,按照预设提取方式提取9个连续原始栅格单元的值;第一目标数值生成模块,用于采用第一目标数值代替所述9个连续原始栅格单元的值并存储在ー个目标栅格单元中;所述第一目标数值为根据9个连续原始栅格单元的值生成的ー个9位整数;所述存储包括将第一目标数值存储为4字节的int型;第二目标数值生成模块,用于将不足9个连续原始栅格单元的栅格单元数记为N,采用第二目标数值代替所述N个的原始栅格单元的值并存储在ー个目标栅格单元中;所述第二目标数值为根据所述N个连续原始栅格单元的数值补充9-N个特征值后生成的ー个9位整数;所述存储包括将第二目标数值存储为4字节的int型;遍历判断模块,用于判断是否遍历完所述K*L个栅格単元,若是,则调用目标栅格数据存储模块;若否,则返回栅格单元提取模块;目标栅格数据存储模块,用于将所述目标栅格単元的值和目标栅格数据的基本信息组织为目标栅格数据并存储;所述目标栅格单元的值为第一目标数值和/或第二目标数值;所述目标栅格数据的基本信息包括原始栅格数据基本信息、栅格单元提取模块所述的预设提取方式及第二目标数值生成模块中所述的9-N个特征值。本申请实施例还公开了一种栅格数据读取的装置,包括目标栅格数据读取模块,用于读取目标栅格数据,所述目标栅格数据包括目标栅格数据基本信息以及目标栅格単元的值;所述目标栅格数据的基本信息包括原始栅格数据基本信息、预设提取方式及9-N个特征值;所述目标栅格单元的值包括第一目标数值和第二目标数值;所述第一目标数值为根据9个连续栅格单元的值生成的ー个9位整数;所述第二目标数值为根据所述N个连续栅格单元的数值补充9-N个特征值后生成的ー个9位整数;所述第一目标数值和第二目标数值均存储为4字节的int型;预设还原方式生成模块,用于依据预设提取方式生成预设还原方式;目标数值判断模块,用于从第一个未解析的目标栅格数据开始依次解析所述目标栅格数据中的栅格单元值,判断是为第一目标数值或第二目标数值;若为第一目标数值,则调用第一目标数值还原模块,若为第二目标数值,则调用第二目标数值还原模块;第一目标数值还原模块,用于将所述每个第一目标数值还原成9个连续原始栅格単元的值并按照预设还原方式还原到9个原始栅格单元中;第二目标数值还原模块,用于将所述每个第二目标数值删去9-N个特征值还原成N个原始连续栅格単元的值并按照预设还原方式还原到N个原始栅格单元中;遍历判断模块,用于判断是否遍历完所述目标栅格数据,若是,则调用原始栅格数据获取模块,若否,则返回目标数值判断模块;原始栅格数据获取模块,用于将所述原始栅格单元的值和原始栅格数据基本信息组织为原始栅格数据并存储;所述原始栅格单元的值为第一目标数值和/或第二目标数值。所述原始栅格数据基本信息为原始栅格数据包括K*L个栅格単元;其中,所述K为行, L为列;所述原始栅格单元的值都是分布在O到9之间的整数。
与现有技术相比,本申请包括以下优点第一,本申请对栅格数据中所有栅格单元的值都分布在O到9之间的整数的栅格数据,在原始栅格数据中依次提取9个连续栅格单元,采用占4字节的int型的第一目标数值替代所述9个连续原始栅格单元的值,这样原先需要9个字节的原始栅格数据,采用本申请4个字节即可存储,这样可以大大节省存储空间,而且在进行栅格数据备份时,可以用更少的资源存储同样的信息,充分利用了存储空间。第二,若所取栅格单元为N不足9个,则补充9-N个特征值后产生第二目标数值代替所述9个连续原始栅格单元的值。这种情况下,原先需要9个字节的原始栅格数据,用4字节仍然可以存储。说明本申请不受栅格单元数的影响,在栅格单元不是9的倍数时仍然可以适用。第三,对于存储空间较小的栅格文件,读写该栅格文件的操作也相应变少,可以提高栅格数据的处理效率。第四,现在的GIS软件应用中,客户端一般都是需要通过网络获取远程服务器上的栅格数据,本申请可以用较少的数据量表达同样的栅格单元值信息,这样服务器端相应減少了给客户端的网络数据传输量,从而減少了服务器负担,提高了栅格数据的网络传输效率。第五,在全球化的搜索引擎应用中,搜索引擎的总服务器位于ー个国家,其他国家的服务器需要访问总服务器获取备份数据,采用本申请所述存储方法可以提高获取备份数据的效率,同时存储在本国服务器中也占用较少的存储空间,多个国家存储相同数据,采用本申请中所述存储方法也降低了存储成本。这样当客户端发出捜索信息的请求后,服务器端相应减少给客户端的网络数据传输量,有效改善搜索效率。如果未采用本申请所述方法存储数据,客户端系统一直在忙于等待接收服务器端的栅格数据,这样,系统性能必定下降。使用传统的按每栅格単元最小I字节存储方式,每传输9n个字节,在本申请提的新的方法下,相应的只需要传输4n个字节,大大降低网络传输量,提高系统响应速度,同样,数据量较少的栅格文件,读写文件操作将变少也会提高系统效率。


图I是本申请实施例一种栅格数据存储的方法流程图2是本申请实施例中原始栅格数据部分栅格单元的示意图;图3是本申请对应图2实施例的栅格数据转换示意图;图4是本申请对应图2实施例使用本申请处理后的部分目标栅格单元示意图;图5是本申请实施例一种栅格数据读取的方法流程图;图6是本申请对应图3实施例的栅格数据还原示意图;
图7是本申请实施例一种栅格数据存储的装置结构框图;图8是本申请实施例一种栅格数据读取的装置结构框图。
具体实施例方式为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式
对本申请作进一步详细的说明。本申请的核心构思之ー在于,针对ー类特定类型的栅格数据,即所有栅格单元值都分布在O到9之间的整数的栅格数据,传统做法是,将每个栅格単元的数值用I字节的byte类型来保存,将所有的栅格单元数值写到ー个文件中存数。本申请就是改进此类栅格数据的存储方法,对此栅格数据进行存储结构的重新设计,将原始栅格数据依次提取9个栅格单元的值,用占4字节的int型的第一目标数值替代,大大节省了存储空间。当所取栅格单元为N不足9个时,则补充9-N个特征值,用占4字节的int型第二目标数值替代。保证了本申请在栅格単元不是9的倍数时仍然可以适用。而且,原先需要9个字节的原始栅格数据,用4字节仍然可以存储。以下实施例的描述中,都有本申请实施例实施例一參照图1,示出了本申请ー种栅格数据存储的方法实施例的步骤流程图,本申请针对ー类特定类型的栅格数据,即所有栅格单元值都分布在O到9之间的整数的栅格数据(比如描述全国56个民族分布情况的栅格数据),本实施例具体可以包括如下步骤步骤S101,获取原始栅格数据;所述原始栅格数据包括原始栅格数据基本信息和原始栅格单元的值;所述原始栅格数据基本信息为原始栅格数据包括K*L个栅格単元;其中,所述K为行,L为列;所述原始栅格単元的值都是分布在O到9之间的整数;图2原始栅格数据部分栅格单元的示意图。原始神栅格数据的每个栅格単元用byte类型来存储,即每个栅格单元用一字节的大小来存储;连续9个栅格単元,共需要9个字节来存储。步骤S102,在所述K*L个栅格单元中依次从第一个未提取的原始栅格单元开始,按照预设提取方式提取9个连续原始栅格单元的值;步骤S103,采用第一目标数值代替所述9个连续原始栅格单元的值并存储在ー个目标栅格単元中;所述第一目标数值为根据9个连续原始栅格单元的值生成的ー个9位整数;所述存储包括将第一目标数值存储为4字节的int型;在具体实现中,可以将所述9个连续原始栅格单元的值,按顺序从高位到低位排列得到ー个9位整数;所述按顺序从高位到低位排列,包括提取到的第一个栅格単元的值放在最高位,最后ー个栅格単元的值放在最低位。以图3为例,分别得到的9个栅格単元值为“3,4,5,7,0,2,5,6,9”,然后将得到的这9个数值,按顺序从高位到地位排列,即“345702569”,第I个栅格単元的值放在最高位,最后ー个栅格単元的值放在最低的“个位”上,这样得到一个新的整数345702569。因为任意的9位数都在int类型的表达范围之内,所以我们用4字节的int类型来存储这个新的整数,即将该9位数345702569存储为4字节的int型。这里需要说明的是,根据在32位或64位系统上,4字节的int所能表达的数值范围是-231至231-1,即-2147483648到2147483647。因此本申请中得到的任意9位数都在int类型的表达范围之内,所以我们用4字节的int类型来存储这个9位整数。在这种情况下,原先需要9字节存储空间的数据,现在只需要4字节的存储空间即可,在进行栅格数据备份时,可以充分利用存储资源,大大节省存储空间。步骤S104,若提取到的连续原始栅格单元不足9个,则将不足9个连续原始栅格单元的栅格单元数记为N,采用第二目标数值代替所述N个原始栅格单元的值并存储在ー个 目标栅格単元中;所述第二目标数值为根据所述N个连续原始栅格单元的数值补充9-N个特征值后生成的ー个9位整数;所述存储包括将第二目标数值存储为4字节的int型;
步骤S105,判断是否遍历完所述K*L个栅格単元,若是,则执行步骤S106 ;若否,则返回步骤S102 ;步骤S106,将所述目标栅格単元的值和目标栅格数据的基本信息组织为目标栅格数据并存储;所述目标栅格单元的值为第一目标数值和/或第二目标数值;所述目标栅格数据的基本信息包括原始栅格数据基本信息、步骤S102中所述的预设提取方式及步骤S104中所述的9-N个特征值。用本申请处理后的目标栅格数据部分栅格单元如图4所示。应用本申请实施例,对原始栅格数据进行组装后再进行存储,可减少存储空间,尤其是对于原始栅格数据中,栅格单元的值大部分分布在O到9之间,并且分布很集中,其他范围数值为所占比重很小时,则可以很大程度的減少存储占用空间。比如全国范围内人口的民族分布情況,以数值O代表汉族,I代表壮族,2代表满族,...,在这种情况下,范围在O到9之间的数据占非常高的比重,也很集中,对这类数据应用本申请实施例能有效利用存储空间,节省栅格数据的存储空间,提高栅格数据的处理效率。实施例ニ 需要说明的是,本申请对提取栅格数据的具体顺序不做要求,只要能按顺序提取完所有的栅格单元就可以,可以按每行对原始栅格数据进行提取,也可以按每列对原始栅格数据进行提取,还可以按整个栅格数据提取,本申请对此不加限定。下面详细说明提取和解析的具体过程。按每行对原始栅格数据进行提取时,假设栅格的列数为L列,行数为K行;对于每一行χ(0<=χ<=Κ),当L是9的倍数时候,姆行处理后得到L/9个整数,第i (i > = O且i <= L/9-丨,编号从0开始)个处理后的整数是由原栅格单元的第9*i个栅格単元到第9* (i+1)-I个栅格单元的共9个栅格单元连续排列构成ー个新的int数值。如此循环处理,直到处理完这一整行的栅格单元。然后再处理下一行,直到处理完所有行的数据。当L不是9的倍数时,每行处理最后一定会剩下N个栅格単元,O < N < 9。对此处理方法是不足9个的补充特征值。所述特征值是O到9之间的整数。这里以O为例,当提取到不足9个栅格单元3、5、7、9、2,则可以补充4个O值栅格单元,最后补充所得的9个连续栅格单元为 3、5、7、9、2、0、0、0、0。与提取相对应的解析过程当L是9的倍数吋,获取原栅格单元的第j (j > = O且j < = L-1)个栅格単元的值办法读第[j/9](符号[]表示j除9然后取最大整数)个int值,这肯定是个9位数,从左到右以编号I开始取其第(j%9+l)位的数字,即为此行的第j个栅格単元的值。当L不是9的倍数时,在解析时候最后ー个整数的前L% 9位数分别对应原栅格数据此行的的最后L% 9个栅格単元值。按每列处理时和按每行处理时类似,在此不作赘述。按整个栅格数据提取吋,一共K*L个栅格単元,把所有的行连接起来进行顺次处理,当K*L是9的倍数时,可以得到K*L/9个整数,第i(i > = O且i <= K*L/9-l,编号从 O开始)个处理后的整数是由原栅格单元的第[(9*i)/L]行,第9*i-[(9*i)/L]*L列栅格单元开始起,连续9个栅格单元按顺序排列得到ー个9位的int型整数。当K*L不是9的倍数时,把所有的行“串”起来,从第一个栅格単元开始,每9个原始栅格单元的值生成ー个9位整数,直到整个栅格単元数据的最后几个栅格単元,再按缺少的补充特征的方法进行处理。与提取相对应的解析过程当K*L是9的倍数吋,获取原栅格单元的第i行((O< =i < = K-1)第j列(j > = O且j < = L-1)个栅格单元的值办法读处理后的第[(i*L+j)/9]个整数,这是个9位的整数,从左到右,编号从I开始,取其第((i*L+j) % 9+1)位数字,即为此原栅格单元的值。当K*L不是9的倍数时,可以得到[K*L/9]+l个整数,其前[K*L/9]个整数的读取与当K*L = 9的倍数时候相同处理方法,只有最后ー个整数,在写的时候需要最后补充(9-K*L% 9)个O以凑够9位;在解析时候最后ー个整数的前K*L% 9位数分别对应原栅格数据的最后K*L% 9个栅格単元值。实施例三以实际项目中的全国地形地貌栅格数据为例,按本申请所述的方法与其他方法生成的栅格数据比较在全国范围内,同一分辨率为30米的条件下,栅格象素大小为161360*134724的栅格单元中以O到9的值分别代表各种山地,平原的地貌类型。在这种情况下,若采用普通的每个栅格単元用byte类型来存储数据的栅格数据组织方法,则需要的存储空间约为20. 25Gb,如果采用本申请所述的方法进行组装存储,则需要的存储空间约为9Gb,节省了 IlGb的存储空间,使用约原先一半的存储资源即可存储同样的栅格单元信息,这样不但节省了存储空间,減少了文件读写的数据量,同时也减少了栅格数据的网络传输量,大大提高了系统的性能及用户体验感。需要说明的是,本申请之所以限制栅格单元的是指,是因为4字节的int型所能表达的数值范围为-2147483648到2147483647,如果栅格单元的值有取值为10的,此时将连续9个栅格単元的值连在一起得到的就不是9位数,并且这个值很可能不在int范围内,也就是大于2147483647。例如,这样的9个栅格单元值10,10,10,10,10,9,9,9,9 ;连在一起得到“ 10101010109999”,显然这个数已经超过int的最大值2147483647。但是,如果栅格单元的值在O到9范围之间,任意取9个连续栅格单元并连在一起,并且得到的值绝对不大于2147483647。显然最大的也就是这样的9个连续的栅格单元“9,9,9,9,9,9,9,9,9”,依然可以连在一起,得到“999999999”,而且它明显小于2147483647,所以可行。故本申请实施例仅针对ー类特定类型的栅格数据,即所有栅格单元值都分布在O到9之间的整数的栅格数据。显然本申请同样适用于栅格单元的值在

,
,
,
, [O,3],

范围内的整数,因为在上述范围内的连续9个栅格単元的值组成的9位数在4字节的int型所能表达的范围内。需要进ー步说明的是,在32位计算机系统上,按本专利方法,可以将普通的9字节減少到只需要4字节;还有一种理论上可行的最小内存布局方式,即以ニ进制位相连,取代普通的每个栅格単元用I字节相连。数值9需要4位ニ进制来表示,所以,4字节的32位最可存储8个栅格単元,弱于本专利提出的方法,而且,以4位ニ进制将8个连续的栅格单元处理成一个新的4字节大整数,存取复杂度远高于本方法。除此之外,理论上没有比本方法更节省存储空间的方法了。实施例四
參照图5,示出了本申请的ー种栅格数据读取的方法实施例的步骤流程图,本实施例具体可以包括如下步骤步骤S201,读取目标栅格数据,所述目标栅格数据包括目标栅格数据基本信息以及目标栅格単元的值;所述目标栅格数据的基本信息包括原始栅格数据基本信息、预设提取方式及9-N个特征值;所述目标栅格单元的值包括第一目标数值和第二目标数值;所述第一目标数值为根据9个连续栅格单元的值生成的ー个9位整数;所述第二目标数值为根据所述N个连续栅格単元的数值补充9-N个特征值后生成的ー个9位整数;所述第一目标数值和第二目标数值均存储为4字节的int型;步骤S202,依据预设提取方式生成预设还原方式;所述依据预设提取方式生成的预设还原方式包括若预设提取方式为按每行提取,则预设还原方式为按每行还原;若预设提取方式为按每列提取,则预设还原方式为按每列还原;若预设提取方式为按整个栅格数据提取,则预设还原方式为按整个栅格数据还原;例如,目标栅格数据为“345702569”,预设提取方式是按每行提取,则对应的预设还原方式是按每行还原,即将目标栅格数据还原为一行,具体还原结果參见图6.步骤S203,从第一个未解析的目标栅格数据开始依次解析所述目标栅格数据中的栅格单元值,判断是否第一目标数值或第二目标数值;若为第一目标数值,则执行步骤S204,若为第二目标数值,则执行步骤S205 ;在本申请的ー种优选实施例中,所述步骤S203可以包括从第一个未解析的目标栅格数据开始依次解析所述目标栅格数据中的栅格单元值,判断当前目标栅格数据是否包含特征值,若是,则判定为第二目标数值,若否,则判定为第一目标数值。步骤S204,将所述每个第一目标数值还原成9个连续原始栅格单元的值并按照预设还原方式还原到9个原始栅格单元中;步骤S205,将所述每个第二目标数值删去9-N个特征值还原成N个原始连续栅格単元的值并按照预设还原方式还原到N个原始栅格单元中;例如,所述第二目标数值为365780000,当读取到的特征值为9-5即特征为4个时,还原后对应的原始栅格数据为3,6,5,7,8。当读取到的特征值为9-7即特征为2个时,还原后对应的原始栅格数据为3,6,5,7,8,0,O.步骤S206,判断是否遍历完所述目标栅格数据,若是,则执行步骤S207,若否,则返回步骤S203 ;步骤S207,将所述原始栅格单元的值和原始栅格数据基本信息组织为原始栅格数据并存储;所述原始栅格单元的值为第一目标数值和/或第二目标数值。所述原始栅格数据基本信息为原始栅格数据包括K*L个栅格单元;其中,所述K为行,L为列;所述原始栅格单元的值都是分布在O到9之间的整数。需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组 合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。实施例五在GIS广泛应用于各个行业形式下,越来越多的系统都涉及到分类型栅格数据的处理,非常适合使用本申请进行存取处理,下面以搜索引擎Google为例进行说明。Google的总部在加利福尼亚,其他国家的服务器访问的是本国的服务器,但是本国服务器需要访问总部的服务器获得备份数据。采用本申请提供的存储方法,原先占用9字节存储空间的数据现在只需要4字节就可以存储,这样大大減少了存储空间。当各国服务器访问总部服务器时,采用本申请所述的方法,由于访问的数据存储空间减少,所以相应的访问时间也会減少,同时备份数据进行远程传输的速率加快,提高了数据远程传输的效率,提高了数据服务的质量。当各国服务器都选用本申请所述方法存储备份数据后,数据备份节省了大量空间,客户端进行搜索时,通过访问本国服务器,本国服务器提供给客户端的数据存储量也相应减少,这样加快了捜索响应的时间,大大加快了搜索结果数据的传输。使用传统的按每栅格単元最小I字节存储方式,每传输9n个字节,在本申请提的新的方法下,相应的只需要传输4n个字节,大大降低网络传输量,提高系统响应速度,同样,数据量较少的栅格文件,读写文件操作将变少,读取相同数据量36η个字节的的栅格文件,传统方法需要读取9次,使用本申请所述方法只需要读取4次,这样减少了读写文件的操作次数,避免了不必要的读取操作,同时提高了系统效率。最后,需要补充说明的是现在的GIS软件应用中,客户端一般都是需要通过网络获取远程服务器上的栅格数据,这样,对栅格数据,用越少的数据量表达越多的栅格单元值信息,就意味着服务器端可以减少给客户端的网络数据传输量,从而有效的改善用户的体验感。相反,客户端系统一直在忙于等待接受服务器端的栅格数据,这样,系统性能必定下降。使用传统的按每栅格単元最小I字节存储方式,每传输9η个字节,在本专利提的新的方法下,相应的只需要传输4η个字节,大大降低网络传输量,提高系统响应速度,同样,数据量较少的栅格文件,读写文件操作将变少也会提高系统效率。实施例六
參照图7,示出了本申请的ー种栅格数据存储的装置实施例的结构框图,本实施例具体可以包括如下模块原始栅格数据获取模块301,用于获取原始栅格数据,所述原始栅格数据包括原始栅格数据基本信息和原始栅格单元的值;所述原始栅格数据基本信息为原始栅格数据包括K*L个栅格単元;其中,所述K为行,L为列;所述原始栅格单元的值都是分布在O到9之间的整数;栅格单元提取模块302,用于在所述K*L个栅格单元中依次从第一个未提取的原始栅格単元开始,按照预设提取方式提取9个连续原始栅格单元的值;第一目标数值生成模块303,用于采用第一目标数值代替所述9个连续原始栅格単元的值并存储在ー个目标栅格单元中;所述第一目标数值为根据9个连续原始栅格单元的值生成的ー个9位整数;所述存储包括将第一目标数值存储为4字节的int型; 第二目标数值生成模块304,用于将不足9个连续原始栅格单元的栅格单元数记为N,采用第二目标数值代替所述N个的原始栅格单元的值并存储在ー个目标栅格单元中;所述第二目标数值为根据所述N个连续原始栅格单元的数值补充9-N个特征值后生成的一个9位整数;所述存储包括将第二目标数值存储为4字节的int型;遍历判断模块305,用于判断是否遍历完所述K*L个栅格単元,若是,则调用目标栅格数据存储模块306 ;若否,则返回栅格单元提取模块302 ;目标栅格数据存储模块306,用于将所述目标栅格単元的值和目标栅格数据的基本信息组织为目标栅格数据并存储;所述目标栅格单元的值为第一目标数值和/或第二目标数值;所述目标栅格数据的基本信息包括原始栅格数据基本信息、栅格单元提取模块所述的预设提取方式及第二目标数值生成模块中所述的9-N个特征值。对于图7所示的装置实施例而言,由于其与图I所示的方法实施例基本相似,所以描述的比较简单,相关之处參见方法实施例的部分说明即可。实施例七參照图8,示出了本申请的ー种栅格数据读取的装置实施例的结构框图,本实施例具体可以包括如下模块目标栅格数据读取模块401,用于读取目标栅格数据,所述目标栅格数据包括目标栅格数据基本信息以及目标栅格単元的值;所述目标栅格数据的基本信息包括原始栅格数据基本信息、预设提取方式及9-N个特征值;所述目标栅格单元的值包括第一目标数值和第二目标数值;所述第一目标数值为根据9个连续栅格单元的值生成的ー个9位整数;所述第二目标数值为根据所述N个连续栅格单元的数值补充9-N个特征值后生成的ー个9位整数;所述第一目标数值和第二目标数值均存储为4字节的int型;预设还原方式生成模块402,用于依据预设提取方式生成预设还原方式;目标数值判断模块403,用于从第一个未解析的目标栅格数据开始依次解析所述目标栅格数据中的栅格单元值,判断是为第一目标数值或第二目标数值;若为第一目标数值,则调用第一目标数值还原模块,若为第二目标数值,则调用第二目标数值还原模块;在本申请的ー种优选实施例中,所述目标数值判断模块403包括判断子模块4031,用于依次解析所述目标栅格数据中的栅格单元值,判断当前的栅格单元值是否包含特征值,若是,则判定为目第二目标数值,若否,则判定为第一目标数值。第一目标数值还原模块405,用于将所述每个第一目标数值还原成9个连续原始栅格单元的值并按照预设还原方式还原到9个原始栅格单元中;第二目标数值还原模块406,用于将所述每个第二目标数值删去9-N个特征值还原成N个原始连续栅格単元的值并按照预设还原方式还原到N个原始栅格单元中;遍历判断模块407,用于判断是否遍历完所述目标栅格数据,若是,则调用原始栅格数据获取模块408,若否,则返回目标数值判断模块403 ;原始栅格数据获取模块408,用于将所述原始栅格单元的值和原始栅格数据基本信息组织为原始栅格数据并存储;所述原始栅格单元的值 为第一目标数值和/或第二目标数值。所述原始栅格数据基本信息为原始栅格数据包括K*L个栅格単元;其中,所述K为行,L为列;所述原始栅格单元的值都是分布在O到9之间的整数。对于图8所示的装置实施例而言,由于其与图6所示的方法实施例基本相似,所以描述的比较简单,相关之处參见方法实施例的部分说明即可。本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相參见即可。本领域内的技术人员应明白,本申请的实施例可提供为方法、装置、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另ー个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。以上对本申请所提供的ー种栅格数据的存储、读取方法及装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
权利要求
1.ー种栅格数据的存储方法,其特征在于,包括 步骤S101,获取原始栅格数据,所述原始栅格数据包括原始栅格数据基本信息和原始栅格单元的值;所述原始栅格数据基本信息为原始栅格数据包括K*L个栅格単元;其中,所述K为行,L为列;所述原始栅格单元的值都是分布在O到9之间的整数; 步骤S102,在所述K*L个栅格単元中依次从第一个未提取的原始栅格单元开始,按照预设提取方式提取9个连续原始栅格单元的值; 步骤S103,采用第一目标数值代替所述9个连续原始栅格单元的值并存储在ー个目标栅格单元中;所述第一目标数值为根据9个连续原始栅格单元的值生成的ー个9位整数;所述存储包括将第一目标数值存储为4字节的int型; 步骤S104,若提取到的连续原始栅格单元不足9个,则将不足9个连续原始栅格单元的栅格单元数记为N,采用第二目标数值代替所述N个的原始栅格单元的值并存储在ー个目标栅格単元中;所述第二目标数值为根据所述N个连续原始栅格单元的数值补充9-N个特征值后生成的ー个9位整数;所述存储包括将第二目标数值存储为4字节的int型; 步骤S105,判断是否遍历完所述K*L个栅格単元,若是,则执行步骤S106 ;若否,则返回步骤S102 ; 步骤S106,将所述目标栅格単元的值和目标栅格数据的基本信息组织为目标栅格数据并存储;所述目标栅格单元的值为第一目标数值和/或第二目标数值;所述目标栅格数据的基本信息包括原始栅格数据基本信息、步骤S102中所述的预设提取方式及步骤S104中所述的9-N个特征值。
2.根据权利要求I所述的方法,其特征在于,所述预设提取方式包括 按每行或每列提取; 所述按每行提取包括从左到右或从右到左提取;若每行最后提取到的连续原始栅格单元不足9个,则执行步骤S104; 所述按每列提取包括从上到下或从下到上提取;每列最后提取到的连续原始栅格单元不足9个,则执行步骤S104。
3.根据权利要求I所述的方法,其特征在于,所述预设提取方式包括 按整个栅格数据提取;所述按整个栅格数据提取包括把所有的行连接起来进行顺次提取;整个栅格数据的最后几个连续栅格单元不足9个,则执行步骤S104。
4.根据权利要求I所述的方法,其特征在于,所述步骤S103中根据9个连续原始栅格单元的值生成ー个9位整数包括 将所述9个连续原始栅格单元的值,按顺序从高位到低位排列得到ー个9位整数; 所述按顺序从高位到低位排列,包括提取到的第一个栅格単元的值放在最高位,最后一个栅格单兀的值放在最低位。
5.根据权利要求I所述的方法,其特征在于,所述特征值为O到9之间的整数。
6.一种栅格数据的读取方法,其特征在于,包括 步骤S201,读取目标栅格数据,所述目标栅格数据包括目标栅格数据基本信息以及目标栅格単元的值;所述目标栅格数据的基本信息包括原始栅格数据基本信息、预设提取方式及9-N个特征值;所述目标栅格单元的值包括第一目标数值和第二目标数值;所述第一目标数值为根据9个连续栅格单元的值生成的ー个9位整数;所述第二目标数值为根据所述N个连续栅格单元的数值补充9-N个特征值后生成的ー个9位整数;所述第一目标数值和第二目标数值均存储为4字节的int型; 步骤S202,依据预设提取方式生成预设还原方式; 步骤S203,从第一个未解析的目标栅格数据开始依次解析所述目标栅格数据中的栅格単元值,判断是否第一目标数值或第二目标数值;若为第一目标数值,则执行步骤S204,若为第二目标数值,则执行步骤S205 ; 步骤S204,将所述每个第一目标数值还原成9个连续原始栅格单元的值,并按照预设还原方式还原到9个原始栅格单元中; 步骤S205,将所述每个第二目标数值删去9-N个特征值还原成N个原始连续栅格単元的值,并按照预设还原方式还原到N个原始栅格单元中; 步骤S206,判断是否遍历完所述目标栅格数据,若是,则执行步骤S207,若否,则返回步骤S203 ; 步骤S207,将所述原始栅格单元的值和原始栅格数据基本信息组织为原始栅格数据并存储;所述原始栅格单元的值为第一目标数值和/或第二目标数值。所述原始栅格数据基本信息为原始栅格数据包括K*L个栅格单元;其中,所述K为行,L为列;所述原始栅格单元的值都是分布在O到9之间的整数。
7.根据权利要求6所述的方法,其特征在干, 所述依据预设提取方式生成的预设还原方式包括 若预设提取方式为按每行提取,则预设还原方式为按每行还原; 若预设提取方式为按每列提取,则预设还原方式为按每列还原; 若预设提取方式为按整个栅格数据提取,则预设还原方式为按整个栅格数据还原。
8.根据权利要求6所述的方法,其特征在于,步骤S203包括 从第一个未解析的目标栅格数据开始依次解析所述目标栅格数据中的栅格单元值,判断当前目标栅格数据是否包含特征值,若是,则判定为第二目标数值,若否,则判定为第一目标数值。
9.ー种特殊分类型栅格数据的存储装置,其特征在于,包括 原始栅格数据获取模块,用于获取原始栅格数据,所述原始栅格数据包括原始栅格数据基本信息和原始栅格单元的值;所述原始栅格数据基本信息为原始栅格数据包括K*L个栅格単元;其中,所述K为行,L为列;所述原始栅格单元的值都是分布在O到9之间的整数; 栅格单元提取模块,用于在所述K*L个栅格単元中依次从第一个未提取的原始栅格单元开始,按照预设提取方式提取9个连续原始栅格单元的值; 第一目标数值生成模块,用于采用第一目标数值代替所述9个连续原始栅格单元的值并存储在一个目标栅格单元中;所述第一目标数值为根据9个连续原始栅格单元的值生成的ー个9位整数;所述存储包括将第一目标数值存储为4字节的int型; 第二目标数值生成模块,用于将不足9个连续原始栅格单元的栅格单元数记为N,采用第二目标数值代替所述N个的原始栅格单元的值并存储在ー个目标栅格単元中;所述第二目标数值为根据所述N个连续原始栅格单元的数值补充9-N个特征值后生成的ー个9位整数;所述存储包括将第二目标数值存储为4字节的int型;遍历判断模块,用于判断是否遍历完所述K*L个栅格単元,若是,则调用目标栅格数据存储模块;若否,则返回栅格单元提取模块; 目标栅格数据存储模块,用于将所述目标栅格单元的值和目标栅格数据的基本信息组织为目标栅格数据并存储;所述目标栅格单元的值为第一目标数值和/或第二目标数值;所述目标栅格数据的基本信息包括原始栅格数据基本信息、栅格单元提取模块所述的预设提取方式及第二目标数值生成模块中所述的9-N个特征值。
10.ー种特殊分类型栅格数据的读取装置,其特征在于,包括 目标栅格数据读取模块,用于读取目标栅格数据,所述目标栅格数据包括目标栅格数据基本信息以及目标栅格単元的值;所述目标栅格数据的基本信息包括原始栅格数据基本信息、预设提取方式及9-N个特征值;所述目标栅格单元的值包括第一目标数值和第二目标数值;所述第一目标数值为根据9个连续栅格单元的值生成的ー个9位整数;所述第二目标数值为根据所述N个连续栅格单元的数值补充9-N个特征值后生成的ー个9位整数;所述第一目标数值和第二目标数值均存储为4字节的int型; 预设还原方式生成模块,用于依据预设提取方式生成预设还原方式; 目标数值判断模块,用于从第一个未解析的目标栅格数据开始依次解析所述目标栅格数据中的栅格单元值,判断是为第一目标数值或第二目标数值;若为第一目标数值,则调用第一目标数值还原模块,若为第二目标数值,则调用第二目标数值还原模块; 第一目标数值还原模块,用于将所述每个第一目标数值还原成9个连续原始栅格单元的值并按照预设还原方式还原到9个原始栅格单元中; 第二目标数值还原模块,用于将所述每个第二目标数值删去9-N个特征值还原成N个原始连续栅格単元的值并按照预设还原方式还原到N个原始栅格单元中; 遍历判断模块,用于判断是否遍历完所述目标栅格数据,若是,则调用原始栅格数据获取模块,若否,则返回目标数值判断模块; 原始栅格数据获取模块,用于将所述原始栅格单元的值和原始栅格数据基本信息组织为原始栅格数据并存储;所述原始栅格单元的值为第一目标数值和/或第二目标数值。所述原始栅格数据基本信息为原始栅格数据包括K*L个栅格単元;其中,所述K为行,L为列;所述原始栅格单元的值都是分布在O到9之间的整数。
全文摘要
本申请提供了一种栅格数据的存储、读取方法及装置,其中,所述栅格数据存储的方法包括步骤S101,获取原始栅格数据;步骤S102,依次提取9个连续栅格单元的值;步骤S103,采用第一目标数值代替所述9个连续栅格单元的值并存储在一个目标栅格单元中;步骤S104,若提取到的连续栅格单元不足9个,则将不足9个连续原始栅格单元的栅格单元数记为N,采用第二目标数值代替所述N个原始栅格单元的值并存储在一个目标栅格单元中;步骤S105,判断是否遍历完K*L个栅格单元,若是,则执行步骤S106;若否,则返回步骤S102。本申请可以节省栅格数据的存储空间,提高栅格数据的处理效率。
文档编号G06F17/30GK102867023SQ201210291599
公开日2013年1月9日 申请日期2012年8月15日 优先权日2012年8月15日
发明者孙成宝, 郑国柱 申请人:北京地拓科技发展有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1