一种地形高程数据存储和读取的装置制造方法

文档序号:6525335阅读:268来源:国知局
一种地形高程数据存储和读取的装置制造方法
【专利摘要】本发明涉及一种地形高程数据存储和读取的装置,所述数据存储装置包括:高程数据划分模块,数据压缩处理模块,索引建立模块,索引优化模块。所述的数据读取装置包括:压缩高程文件提取模块,一级索引查找模块,二级索引查找模块,原始高程数据恢复模块,数据输出模块。本发明通过构建两级索引的方式,减少大量重复数据的存储和读取,大大减少了存储数据量,同时也加快了高程数据的读取速度。分级、分块的压缩高程文件存储方式也加快了检索的速度。高程数据的存储采取高程差的数据存储方式,使数据量减少30%—50%,存储数据量的减少十分明显。
【专利说明】—种地形高程数据存储和读取的装置
【技术领域】
[0001]本发明涉及本发明涉及一种地形高程数据存储和读取的装置,是一种计算机数据压缩的装置,是一种区域高程数据的存储和快速读取数据的装置。
【背景技术】
[0002]地理信息系统的数据极为庞大,即便一个相对单一的高程数据(地理位置的海拔高度)一般级别的精度要求的数据量也相当惊人,例如:整个地球的高程从最低点到最高点的高度范围为-154m —8848m,如果以米为单位存储高程,每个高度值应该以2字节存储,那么,30m精度的地球高程数据的存储需要上千G空间。这个存储空间大小对于大多应用来说不可接受。当然在多数情况下,没有必要存储全球的高程数据,但即便是某一地区的高程数据,其数据量也相当大,虽然现代的硬件存储系统的存储量已经相当大,但如何快速的读取这些数据也是一个很重要的课题。

【发明内容】

[0003]为解决现有技术的问题,本发明提出一种全球地形高程数据存储和读取的装置。所述的装置可以极大的压缩高程数据的存储空间,并且可以实现高速读取。
[0004]本发明的目的是这样实现的:一种地形高程数据存储的装置,所述装置包括:高程数据划分模块,数据压缩处理模块,索引建立模块,索引优化模块。其中:
高程数据划分模块:用于将原始高程数据按不同地区划分为一个或多个部分,将每个部分存储为一个高程文件;针对每个部分的原始高程数据文件提交给数据压缩处理模块处理,并由索引建立模块建立索引,由索引优化模块完成索引优化处理;
数据压缩处理模块:用于将每个高程文件中所包括的地区按纬度和经度划分为若干个更小的纵向排列和横向排列的地块,为每个高程文件对应生成一个压缩高程文件,生成压缩高程文件过程中对每个地块的原始高程数据进行压缩处理和存储,数据压缩处理模块包括:地块划分子模块、基准值获取子模块,种类划分子模块,数据块存储子模块,其中:
地块划分子模块:将每个高程文件中所包括的地区按纬度和经度划分为若干个更小的纵向排列和横向排列的地块,对每一个地块的原始高程数据送下列三个模块处理;
基准值获取子模块:用于比较和计算该地块的各点的原始高程数据,取最小值作为基准值;
种类划分子模块:用于将该地块原始高程数据中各点的高程值与基准值比较,计算得到各点的高程值与基准值之间的差值,将该地块内所有差值的最大值作为本地块的最大差值,根据最大差值为本地块确定一个差值存储的种类值;
数据块存储子模块:用于将该地块高程数据按如下格式存储到压缩高程文件中:
种类值,占用一个字节;基准值,占用两个字节;差值,差值是根据种类值的不同按不同的数据长度存储,差值所占用的字节数根据差值存储的种类值的大小变化,同一个地块的每个差值占用同样的字节数存储; 索引建立模块:对每个压缩高程文件建立两级索引,所述两级索引的第一级索引为指针,所述指针指向一纵列或一横列地块的第二级索引的起始地址,所述两级索引的第二级索引为该地块的高程数据在本压缩高程文件中的存储地址;
索引优化模块:用于将高程值全部为无效值的地块的高程数据存储地址修正为-1,将一纵列或一横列中全部地块的高程值都为无效值的一级索引指针修正为-1。
[0005]进一步的,所述的高程文件通过将经过地图投影的地区高程数据按照经度方向或者纬度方向划分为若干份来得到,其中每一份对应于一个高程文件。
[0006]进一步的,所述的最大差值分为大于255、大于15并且小于或等于255、大于零并且小于或等于15、等于零的四个种类,分别定义差值存储的种类值为ZL1,ZL2,ZL3,ZL4 ;所述四个种类的差值的存储方式为:将种类值为ZLl的地块的所有差值采用16bit存储、将种类值为ZL2的地块的所有差值采用8bit存储、将种类值为ZL3的地块的所有差值采用4bit存储,对于种类值为ZL4的地块的所有差值则不储存。
[0007]进一步的,所述的划分,是按照2n数量确定的。
[0008]进一步的,每个部分的相应的两级索引可以和处理后的高程数据存储在带有索引的压缩高程文件中。
[0009]进一步的,每个部分的相应的两级索引和处理后的高程数据分别存储在索引文件和压缩高程文件中。
[0010]进一步的,全部高程数据各个部分的两级索引可以存储在一个总的索引文件中。
[0011]一种读取上述存储高程数据装置存储的高程数据的读取装置,所述的装置包括:压缩高程文件提取模块,一级索引查找模块,二级索引查找模块,原始高程数据恢复模块,数据输出模块,其中:
压缩高程文件提取模块:用于根据要查找高程数据的位置找到对应的压缩高程文件;一级索引查找模块:用于读取位置所在的一纵列或一横列地块的一级索引,判断该一级索引的值是否为“-1”,如果“是”则将该纵列或横列的所有地块的所有高程数据的值置为默认值,并提交数据输出模块输出,如果“否”则由二级索引查找模块进行二级索引的读取查找;
二级索引查找模块:用于读取位置所在地块的二级索弓丨,判断该二级索引是否为“-1”,如果“是”则将该地块所有高程数据的值置为默认值,并提交数据输出模块输出,如果“否”则由原始高程数据恢复模块进行高程数据恢复;
原始高程数据恢复模块用于从压缩高程文件中,读取并恢复该地块的原始高程数据,原始高程数据恢复模块又包括:高程数据存储位置查找子模块、种类读取子模块、基准值读取子模块、差值读取子模块、原始高程数据计算子模块,其中:
高程数据存储位置查找子模块:用于根据二级索引的地址,找到本地块高程数据在本压缩高程文件中所在的存储位置;
种类读取子模块:用于读取本地块高程数据种类值,获得差值的存储方式;
基准值读取子模块:用于读取基准值;
差值读取子模块:用于根据差值的存储方式读取差值数据;
原始高程数据计算子模块:用于将基准值与差值相加,得到原始高程数据;
数据输出模块:用于将恢复出的高程数据输出,此处的高程数据可以是计算后恢复出的原始高程数据,也可以是根据索引为-1的信息直接填充的无效值。本发明产生的有益效果是:本发明通过构建两级索引的方式,排除大量重复数据的存储和读取,大大减少读取数据量,加快了读取数据的速度。分级、分块的高程文件存储方式也加快了读取的速度。高程数据的存储采取高程差的数据存储方式,使数据量减少30% — 50%,存储数据量的减少十分明显。
【专利附图】

【附图说明】
[0012]下面结合附图和实施例对本发明作进一步说明。
[0013]图1是本发明实施例一所述地形高程数据存储装置的原理示意图;
图2是发明实施例一的举例I的原始高程数据矩阵;
图3是本发明实施例一的举例I的差值数据矩阵;
图4是本发明实施例一的举例2的原始高程数据矩阵;
图5是本发明实施例一的是举例2的差值数据矩阵;
图6是本发明实施例一所述地形高程数据读取装置的原理示意图。
【具体实施方式】
[0014]实施例一:
本实施例是一种地形高程数据存储装置。对于地球高程而言,存在两个明显的特点,一个是有大量高程为无效值的地区,这是因为地球高程数据通常是通过卫星针对陆地区域进行采集,地球上很多地方无法采到有效数据,比如在高纬度地区,北纬83度和南纬83度以上通常都没有有效数据;对于海洋部分、内陆的大湖等部分也没有有效数据,通常认为这些地方的值是无效值,对于海洋部分和内陆大湖的高程一般会有另外的手段提供。某地的高程值为无效值时,一般将该点的高程记为一个固定的地球上不可能存在的高程值,如9999米,或者-250米等,这样当软件读取到这样不可能实际存在的高程值时就可以判断为该点的高程值为无效值,本实施例无效高程值设置为-250米。另一个是在地表有大量的平原,在一定区块范围内有大量的高程落差不超过255m,甚至不超过16m或者4m。本实施例正是利用了地球高程数据的这两个特点对高程数据进行处理。首先用定义索引的方式排除大量高程为无效值的数据。对于第二个特点采取的方式是:取得一个区块中的最小高度值作为基础,然后计算出该区块中其他点相对于最小高度值的差值,同时根据差值的大小选择不同的存储空间,因差值较小,可以较多的节约存储空间,提高存取速度。在此基础上,还可对于全球的高程数据以不同级别的方式存储,不同级别代表了不同的数据详细等级。对于每一级的数据,分割为多个文件按照上述方案存储。本实施例所述装置的具体实现原理如下:
本实施例所述方法包括两个方面:地形高程数据存储的装置和地形高程数据读取的装
置。其中:。
[0015]地形高程数据存储的装置包括:高程数据划分模块,数据压缩处理模块,索引建立模块,索引优化模块。其中:
高程数据划分模块:用于将原始高程数据按不同地区划分为一个或多个部分,将每个部分存储为一个高程文件针对每个部分的原始高程数据高程文件提交给数据压缩处理模块处理,并由索引建立模块建立索引,由索引优化模块完成索引优化处理;
数据压缩处理模块:用于将每个文件中所包括的地区按纬度和经度划分为若干个更小的纵向排列和横向排列的地块,为每个高程文件对应生成一个压缩高程文件,生成压缩高程文件过程中对每个地块的原始高程数据进行压缩处理和存储。数据压缩处理模块包括:地块划分子模块、基准值获取子模块,种类划分子模块,数据块存储子模块。
[0016]高程数据划分模块用于将全球的高程数据按地球表面不同地区划分为一个或多个部分,将每个部分存储为一个文件。存储全球的高程,首先遇到的问题是如何划分区域进行数据存储。为提高检索速度,一般不会将所有数据都存储在一个文件中,科学而适当的划分区域,会取得事半功倍的效果。本实施例在文件划分着重考虑文件大小应当比较平均的问题。根据球形物体表面面积的特点,同一纬度区间的地球表面积在接近两极时会越来越小,而接近赤道时同一纬度区间的地球表面积会越来越大;而沿经线方向等分得到的表面积是一致的。因此,将按经度方向排列的区块的数据放在一个高程文件中,由于是根据经度划分的,所以可以称为经度文件,根据各个经度划分的经度文件中的所存储的地表面积大体相同,不同经度的经度文件大小差别不大。但如果将同纬度等分的区块放在一个纬度文件中,接近赤道的纬度文件中所存储的地表面积就会十分巨大,而在高纬度区域所存储的地表面积就会很少,不同纬度的纬度文件中的所存储的地表面积差距较大。因此,本实施例按照经度划分存储高程数据的高程文件,其目的在于使文件大小差距不太大,有利于提高检索和提取速度。
[0017]本实施例所述的高程文件是存储一个地区高程数据的文件。这里所述的地区指的是经过地图投影的地球表面按经度方向或者纬度方向分割为若干个长条状的地区,投影方式采用的是等角投影。本实施例将沿经度方向排列的区块放在一个高程文件,即在一个高程文件中存储两条经线之间区块的高程数据,并称两条经线之间区块为“地区”,将存储两条经线之间区块高程数据的高程文件称为:经度文件。经度文件的数量按2n确定,如:16、32、64等。即将全球按经度方向划分为16或者32或者64等分。需要说明的是由于现代高程的测量,主要依据卫星或航拍的3D数字化照片结合实测形成的,数字化照片的清晰度是根据像素确定的,而像素量通常是按照计算机内的寻址位宽2n确定的,因此,可以按照计算机寻址位宽的大小确定高程文件的数量,而不是按照传统分割球形体的经纬度的度、分、秒划分区域文件。在实践中证明这样的划分,效率更高,对计算机运算和程序编制更加方便,可以更加便捷的找到所需要读取地块的数据存储在哪个文件中。当然,也可以按照度分秒的单位划分经度文件的个数,但需要比较复杂的换算,占用更多的运算资源,而且意义不大。
[0018]数据压缩处理模块:用于将每个高程文件中所包括的地区按纬度和经度划分为若干个更小的纵向排列和横向排列的地块,为每个高程文件对应生成一个压缩高程文件,生成压缩高程文件过程中对每一个地块的原始高程数据作压缩处理。数据压缩处理模块包括:地块划分子模块、基准值获取子模块,种类划分子模块,数据块存储子模块。
[0019]地块划分子模块:前面所述的高程数据划分模块建立经度文件只是将全球分区的第一步,还要把长条形的地区再分为区域,再将各个区域再细分为地块。本实施例是将长条状的地区分为“区域”。如果是以经线划分的长条形的经度地区,就要用纬线将长条状的经度地区划分割为区域。如果用纬线划分的长条状的纬度地区,就要用经线划把长条状的纬度地区分割为区域。再将各个区域纵横划分为“地块”,高程数据按地块存储为“数据块”。区域和数据块的数量同样可以按照2"数量确定,例如可以将一个地区划分为32个或者64个或者128个区域,再将区域划分为32个或者64个或者128个地块。数据块纵横排列形成数据块矩阵。此模块同时还为每个高程文件对应生成一个压缩高程文件,生成的压缩高程文件的内容由基准值获取子模块,种类划分子模块,数据块存储子模块产生和写入。基准值获取子模块:用于计算地块的原始高程数据,取最小值作为基准值。如果直接存储所有的高程数据,则数据值可能会很大,占用较多的字节。本实施例则采用差值储存的方式:首先在一个地块的原始高程数据中找到最小值,以这个最小值为基准值,将地块的原始高程数据值与基准值比较,获得差值。或者说,所有原始高程数据值是基准值与差值之和。基准值通常情况下是一个数据块中的最小值,也就是说差值都是正值。存储差值的好处在于,根据对高程数据的研究发现,一个区块中高程数据的差值多数都比较小,较大的差值只占很小一部分。差值小则占用的字节较少,这样只要存储一个基准值,就可以将整个数据块中所有数据的值的存储需求减小许多,有效的减少了存储所占用的空间。
[0020]种类划分子模块:用于将原始高程数据中的高程值与基准值比较,获得高程值与基准值之间差值,将该地块内所有差值的最大值作为本地块的最大差值,根据最大差值为本地块确定一个差值存储的种类值。为提高存储速度减少存储占用的空间,仅仅采用差值存储还不够,本实施例还采用了分类存储的方式:将差值按一个地块内所有差值的最大差值的大小分为几类,每一类的地块,该地块的所有差值按照相同的字节长度存储;最大差值不同的地块以不同的字节长度存储该地块的差值,以此节约存储空间。
[0021]数据块存储子模块:用于将数据块按如下格式存储:
种类值,占用一个字节;基准值,占用两个字节;差值,差值是根据种类值的不同按不同的数据长度存储,差值所占用的字节数根据差值存储的种类值的大小变化,同一个地块的每个差值占用同样的字节数存储;差值按不同的字节长度存储的好处在于可以节约存储空间。因为随着地球表面地形的变化,高度的起伏程度并不相同,例如北美地区大面积的平原和我国中西部地区的丘陵地带,前者的起伏程度很小,差值的取值范围可能在2、3米之内,而后者的起伏相对较大,差值的取值范围可能超过了几十米。如果不分类而采用每个差值都用相同的字节长度来存储,为保证能存储下差值数值的上限,那就意味着需要选取数值最大的差值的字节长度作为存储字节长度,对于类似于前者的平原地带来说用这么长的字节来存储,则大部分的存储位为零,浪费了大量的存储空间。
[0022]索引建立模块:对每个压缩高程文件建立两级索引,所述两级索引的第一级索引为指针,所述指针指向一纵列或一横列地块的第二级索引的起始地址,所述两级索引的第二级索引为该地块的高程数据在本压缩高程文件中的存储地址;为快速的从压缩高程文件中找到数据块,本步骤定义了对数据块的两级索引。由于本实施例所建立的压缩高程文件是以经线切割的区域,相当于是一个纵列,所以第一级索引的指针相当于是指向一个横列地块的二级索引,而第二级索引则是压缩后的数据块在压缩高程文件中的地址,也就是相对于文件头的偏移量。
[0023]索引优化模块:用于将高程值全部为无效值的地块的高程数据存储地址修正为-1,将一横列中全部地块的高程值都为无效值的一级索引指针修正为-1;对于全球的高程数据,最突出的特点就是存在大量高程为无效值的海洋地区,在存储高程数据时排除这些无效值的数据是有效减少数据量存储的途径之一。为此本实施例提供了一个十分有效的方式:将全部高程数据都是无效值的地块用-1作索引,不需要用真正的数据块来存储,也就是说用来存储单一一个海洋地块的高程数据只用一个索引(其值为-1)就可以了。当区域内的一横列上的所有地块的二级索引都是-1的时候,将这一横列的一级索引指针定义为-1,不再记录这一横列里的所有地块的索引,同时也不需要真正的高程数据块。这样做的好处在于可以大大降低高程数据存储的容量,同时也降低了索引数据的容量,而且随着海洋地块的相连数量的增大,降低的效果更加明显;同时还加快读出高程数据的速度。因为如果是要读出的高程数据位于海洋,只读取索引信息将可以显示了,不需要再进一步检索和读取数据了,直接输出高程为无效值的数据就可以了。
[0024]最后,对于每个压缩高程文件对应的建立一个两级索引文件,专门存储两级索引信息。
[0025]地形高程数据读取装置包括:压缩高程文件提取模块,一级索引查找模块,二级索引查找模块,原始高程数据恢复模块,数据输出模块,其中:
压缩高程文件提取模块:用于根据要查找高程数据的位置找到对应的压缩高程文件;要提取一个地点的高程数据,通常情况下要指出该地点的经纬度,在本实施例中,根据经度找到压缩高程文件。
[0026]一级索弓I查找模块:用于读取位置所在的一纵列或一横列地块的一级索引,判断该一级索引的值是否为“-1”,如果“是”则将该纵列或横列的所有地块的所有高程数据的值置为默认值,并提交数据输出模块输出,如果“否”则由二级索引查找模块进行二级索引的读取查找;
二级索引查找模块:用于读取位置所在地块的二级索弓丨,判断该二级索引是否为“-1”,如果“是”则将该地块所有高程数据的值置为默认值,并提交数据输出模块输出,如果“否”则由原始高程数据恢复模块进行高程数据恢复;
以上两个模块快速的读取和恢复了海洋地区的高程数据,快速进入陆地高程数据的提取,以此简化读取数据的过程,提高读取数据的速度。此处的默认值,通常设置为一个稍低于全球有效陆地高程的值,例如-200米'500米。本实施例默认值设置为-250米,这个值实际上也是高程值为无效值时该位置标记的无效高程,这样高程为无效值的海洋地区的陆地高程就会在水面之下,不会对显示结果造成影响。
[0027]原始高程数据恢复模块用于从压缩高程文件中,读取并恢复该地块的原始高程数据。原始高程数据恢复模块又包括:高程数据存储位置查找子模块、种类读取子模块、基准值读取子模块、差值读取子模块、原始高程数据计算子模块。其中:
高程数据存储位置查找子模块:用于根据二级索引的地址,找到本地块高程数据在本压缩高程文件中所在的存储位置;
种类读取子模块:用于读取本地块高程数据种类值,获得差值的存储方式;
基准值读取子模块:用于读取基准值;
差值读取子模块:用于根据差值的存储方式读取差值数据;在本实施例中,差值的存储方式为:按照该地块的最大差值划分:最大差值分为大于255、大于15并且小于或等于255、大于零并且小于或等于15、等于零的四个种类,分别定义差值存储的种类值为ZL1,ZL2,ZL3,ZL4 ;所述四个种类的差值的存储方式为:将种类值为ZLl的地块的所有差值采用16bit存储、将种类值为ZL2的地块的所有差值采用8bit存储、将种类值为ZL3的地块的所有差值采用4bit存储,对于种类值为ZL4的地块的所有差值则不储存。所以读取时对应的读取方式将根据元时写入方式将各高程差值恢复出来,即为:ZLl每16个bit作为一个差值读取,ZL2每8个bit作为一个差值读取,ZL3每4个bit作为一个差值读取,ZL4将所有的差值置为O ;
原始高程数据计算子模块:用于将基准值与差值相加,得到原始高程数据;
数据输出模块:用于将恢复出的高程数据输出。实际上,当一级索引为-1时,该模块直接输出本横列地块的所有高程数据均为无效值的-250米,当二级索引为-1时,本模块直接输出当前地块的所有高程数据均为无效值的-250米。只有一级索引和二级索引都不是-1时,才真正根据基准值和差值计算每个点的实际高程(即原始高程)并输出。由上可知,此处的高程数据可以是计算后恢复出的原始高程数据,也可以是根据索引为-1的信息直接填充的无效值。
[0028]下面以两个具体例子说明本实施例使用差值的优势:
举例1:
图2是一个经纬度在55.77473,101.584557附近地块的原始高程数据矩阵,海拔都在3000米左右,如果存储原始高程数据,每一个数据都必须用16bit数据存储。
[0029]图3则是通过求差值,得到的差值数据矩阵,其基准值为3330。在矩阵中可以看出每一个节点的数据都不超过255,所以,该数据可以通过存储一个基本数据3330,和一系列的8bit高程数据来完成存储,数据存储量为原始数据的50%左右。
[0030]举例2:
图4是一个地块的原始高程数据矩阵,其中的多数高程均大于16m,最小高程值为
23m。
[0031]图5是经差值计算的高程数据矩阵,其中数据均小于15,这个数据块可以用4位数据存储。
[0032]因为地表有大量的平原,或者高原,所以,对于一个局部区域,落差低于255米地区很多,所以,通过这个方式可以把数据存储容量减少一半以上。
[0033]实施例二:
本实施例是实施例一的改进,是实施例一关于经度文件、区域和数据块的划分的细化。本实施例所述的经度文件为32个,一个经度文件中设置1024个横向的区域,一个区域内分割为32个数据块。按照这样划分后,每个经度文件内存储的数据的精度跨度为:360/32=11.25,第一个文件存储东经0°?东经11.25°地区的高程数据,第二个文件存储东经11.25°?东经22.50°地区的高程数据,其余以此类推。那么如果我们需要读取东经110°地区的高程数据,可以很方便的从上述分析得到110/11.25=9.7778,取9.778的整数部分,就可以得到该地区的高程数据存储在9+1=10,也即第十个经度文件中。这样可以直接读取第十个文件中的数据。在第十个文件中,读到相应数据块的方式与此类似。这样就可以通过一个简单的算法直接找到所需要读取的位置在哪个压缩高程文件中存储,是第几个横向的区域,是该区域的第几个地块。
[0034]实施例三:
本实施例是上述实施例的改进,是上述实施例关于差值种类划分的细化。本实施例所述的本地块最大差值分为大于255、大于15小于或等于255、大于零小于或等于15、等于零的四个种类,分别定义种类值ZLl,ZL2,ZL3,ZL4,所述四个种类的差值的寻址空间存储方式为:将最大差值大于255的ZLl地块的所有差值采用16位存储、将最大差值大于15小于或等于255的ZL2地块的所有差值采用8位存储、将最大差值大于零小于或等于15的ZL3地块的所有差值采用4位存储,对于最大差值等于零的ZL4地块的所有差值则不储存。这种划分的好处为,所得到的种类数量不是很多,可以减少区分不同种类读取的复杂度,同时,按照16bit (2字节),8bit (I字节),4bit (0.5个字节)和不存储四种方式存储和读取差值数据,能较好的对齐数据文件的字节长度,又能最大限度的节约每一种类型的存储空间。
[0035]种类值有多种定义方式,例如按照该地块的最大差值划分:最大差值分为大于255、大于15并且小于或等于255、大于4并且小于或等于15、大于O并且小于等于4、等于零的五个种类,分别定义差值存储的种类值为ZZL1,ZZL2,ZZL3,ZZL4,ZZL5 ;所述五个种类的差值的存储方式为:将种类值为ZZLl的地块的所有差值采用16bit存储、将种类值为ZZL2的地块的所有差值采用8bit存储、将种类值为ZZL3的地块的所有差值采用4bit存储,对于种类值为ZZL4的地块的所有差值采用2bit存储,对于种类值为ZZL5的地块的所有差值则不储存。这样可以进一步节约一定空间,但是由于最大差值小于4米的地块不多,这种划分实际产生的节省存储空间的效果不大。
[0036]实施例四:
本实施例是上述实施例的改进,是上述实施例关于索引文件存储方式的细化。对于每个压缩高程文件对应的建立一个两级索引文件,专门存储两级索引信息。该索引文件的文件名与压缩高程文件的文件名前半部分相同,仅后缀名不同,这样可以用实施例一中查找压缩高程文件的方式,方便的计算出某个位置对应的索引信息在哪个索引文件中。
[0037]作为一种优化的方式,还可以将全部高程数据各个部分的所有两级索引信息存储在同一个专门的索引文件中,这时需要根据索引的结构去定义索引的查找算法;
作为另外一种优化的方式,针对每个部分的相应的两级索引可以和处理后的压缩高程数据也可以存储在同一压缩高程文件中,索引信息既可以存储在压缩高程文件的开始部分,亦可以附加在压缩高程文件的末尾。通常情况下,存储在高程数据之前是更为优选的存储办法,这种情况下,需要在生成压缩后的高程数据存储时,预先在每一个压缩高程文件前预留索引信息的存储空间。
[0038]最后应说明的是,以上仅用以说明本发明的技术方案而非限制,尽管参照较佳布置方案对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案(比如地区、区域和地块的划分方式,寻址空间的使用方式,索引的级别,最大差值种类的不同划分方式,多种差值存储时的字节长度等)进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。本发明所述的方法可编制为应用于计算机系统的程序,并运行于本发明所述的计算机网络系统中。
【权利要求】
1.一种地形高程数据存储的装置,其特征在于,所述装置包括:高程数据划分模块,数据压缩处理模块,索引建立模块,索引优化模块,其中: 高程数据划分模块:用于将原始高程数据按不同地区划分为一个或多个部分,将每个部分存储为一个高程文件;针对每个部分的原始高程文件提交给数据压缩处理模块处理,并由索引建立模块建立索引,由索引优化模块完成索引优化处理; 数据压缩处理模块:用于将每个高程文件中所包括的地区按纬度和经度划分为若干个更小的纵向排列和横向排列的地块,为每个高程文件对应生成一个压缩高程文件,生成压缩高程文件过程中对每个地块的原始高程数据进行压缩处理和存储,数据压缩处理模块包括:地块划分子模块、基准值获取子模块,种类划分子模块,数据块存储子模块,其中: 地块划分子模块:将每个高程文件中所包括的地区按纬度和经度划分为若干个更小的纵向排列和横向排列的地块,对每一个地块的原始高程数据送下列三个子模块处理; 基准值获取子模块:用于比较和计算该地块的各点的原始高程数据,取最小值作为基准值; 种类划分子模块:用于将该地块原始高程数据中各点的高程值与基准值比较,计算得到各点的高程值与基准值之间的差值,将该地块内所有差值的最大值作为本地块的最大差值,根据最大差值为本地块确定一个差值存储的种类值; 数据块存储子模块:用于将该地块高程数据按如下格式存储到压缩高程文件中: 种类值,占用一个字节;基准值,占用两个字节;差值,差值是根据种类值的不同按不同的数据长度存储,差值所占用的字节数根据差值存储的种类值的大小变化,同一个地块的每个差值占用同样的字节数存储; 索引建立模块:对每个压缩`高程文件建立两级索引,所述两级索引的第一级索引为指针,所述指针指向一纵列或一横列地块的第二级索引的起始地址,所述两级索引的第二级索引为该地块的高程数据在本压缩高程文件中的存储地址; 索引优化模块:用于将高程值全部为无效值的地块的高程数据存储地址修正为-1,将一纵列或一横列中全部地块的高程值都为无效值的一级索引指针修正为-1。
2.根据权利要求1所述的装置,其特征在于,所述的高程文件通过将经过地图投影的地区高程数据按照经度方向或者纬度方向划分为若干份来得到,其中每一份对应于一个高程文件。
3.根据权利要求1所述的装置,其特征在于,所述的最大差值分为大于255、大于15并且小于或等于255、大于零并且小于或等于15、等于零的四个种类,分别定义差值存储的种类值为ZLl,ZL2,ZL3,ZL4 ;所述四个种类的差值的存储方式为:将种类值为ZLl的地块的所有差值采用16bit存储、将种类值为ZL2的地块的所有差值采用Sbit存储、将种类值为ZL3的地块的所有差值采用4bit存储,对于种类值为ZL4的地块的所有差值则不储存。
4.根据权利要求1或2所述的装置,其特征在于,所述的划分,是按照2n数量确定的。
5.根据权利要求1或2所述的装置,其特征在于,所述索引和处理后的高程数据存储在带有索引的压缩高程文件中。
6.根据权利要求1或2所述的装置,其特征在于,所述的索引和处理后的高程数据分别存储在索引文件和压缩高程文件中。
7.根据权利要求6所述的装置,其特征在于,所述的全部高程数据各个部分的两级索引信息存储在总索引文件中。
8.一种读取权利要求1所述存储装置所存储的地形高程数据的装置,其特征在于,所述的装置包括:压缩高程文件提取模块,一级索引查找模块,二级索引查找模块,原始高程数据恢复模块,数据输出模块,其中:压缩高程文件提取模块:用于根据要查找高程数据的位置找到对应的压缩高程文件;一级索引查找模块:用于读取位置所在的一纵列或一横列地块的一级索引,判断该一级索引的值是否为“-1”,如果“是”则将该纵列或横列的所有地块的所有高程数据的值置为默认值,并提交数据输出模块输出,如果“否”则由二级索引查找模块进行二级索引的读取查找; 二级索引查找模块:用于读取位置所在地块的二级索弓丨,判断该二级索引是否为“-1”,如果“是”则将该地块所有高程数据的值置为默认值,并提交数据输出模块输出,如果“否”则由原始高程数据恢复模块进行高程数据恢复; 原始高程数据恢复模块用于从压缩高程文件中,读取并恢复该地块的原始高程数据,原始高程数据恢复模块又包括:高程数据存储位置查找子模块、种类读取子模块、基准值读取子模块、差值读取子模块、原始高程数据计算子模块,其中: 高程数据存储位置查找子模块:用于根据二级索引的地址,找到本地块高程数据在本压缩高程文件中所在的存储位置; 种类读取子模块:用于读取本地块高程数据种类值,获得差值的存储方式; 基准值读取子模块:用于读取基准值; 差值读取子模块:用于根据差值的存储方式读取差值数据;` 原始高程数据计算子模块:用于将基准值与差值相加,得到原始高程数据; 数据输出模块:用于将恢复出的高程数据输出。
【文档编号】G06F12/02GK103678658SQ201310720760
【公开日】2014年3月26日 申请日期:2013年12月24日 优先权日:2013年12月24日
【发明者】吴黎明, 黄建超, 张士广 申请人:北京中科大洋科技发展股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1