專利名稱:包含無數(shù)據(jù)的柵格數(shù)據(jù)寫入及讀取的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本申請涉及空間數(shù)據(jù)技術(shù)領(lǐng)域,特別是涉及一種包含無數(shù)據(jù)的柵格數(shù)據(jù)寫入的方法,一種包含無數(shù)據(jù)的柵格數(shù)據(jù)寫入的裝置,一種包含無數(shù)據(jù)的柵格數(shù)據(jù)讀取的方法,一種包含無數(shù)據(jù)的柵格數(shù)據(jù)讀取的裝置。
背景技術(shù):
柵格數(shù)據(jù)模型用規(guī)則的正方形或者矩形柵格組成,每個柵格點位置由柵格所在的行列號來定義,柵格的數(shù)值為柵格所表達(dá)的內(nèi)容的屬性值。從這種意義上來講,柵格數(shù)據(jù)可以稱為“屬性明顯,位置隱含”空間數(shù)據(jù)表達(dá)方式。每個柵格點代表了實際地表上的一個區(qū)域,如果一個柵格點代表的地表區(qū)域越小,數(shù)據(jù)越精確,但是數(shù)據(jù)量也越大。柵格點的大小通常叫做數(shù)據(jù)的分辨率(resolution),例如,有兩份柵格數(shù)據(jù),前者分辨率為250mX250m,那么I平方千米的范圍需要用16(4X4)個柵格點來表達(dá);但如果分辨率為IkmX lkm,那么只需要一個柵格點就夠了。很明顯,前者表達(dá)更加精確,但是占用存儲空間大。在柵格數(shù)據(jù)模型中,柵格點的數(shù)值含義由用戶指定。一般來講,其含義有兩種類型其一,指實際的測量數(shù)值,如溫度、數(shù)字高程模型等;其二,代表某種類別的編碼,如土地利用等。這里,就會發(fā)生某些柵格點不應(yīng)該具有數(shù)值或者無法得到具體數(shù)值的情況,例如,在描述全國土地利用類型的柵格數(shù)據(jù)模型中,凡是空間范圍對應(yīng)在水面的那些柵格點都不應(yīng)該具有代表某種土地利用類型的代碼值;還有些可能因為自然條件的限制,人類無法測量或得不到該柵格點的具體土地利用類型等情況,或者是在利用衛(wèi)星獲取數(shù)據(jù)時候,因云霧或其他因素導(dǎo)致結(jié)果柵格出現(xiàn)黑色斑塊,這些柵格點沒有測量到實際數(shù)據(jù)等。對這些情況的柵格點,我們用“無數(shù)據(jù)值”來記錄該柵格點的數(shù)值,在實際應(yīng)用中,可以用O或者-32768或者-9999999等等表示,方式很靈活,完全由具體的實際應(yīng)用確定?!盁o數(shù)據(jù)柵格塊”指的含義是柵格數(shù)據(jù)中含有大量的“無數(shù)據(jù)”的柵格點并且分布比較集中,形成空間上的某局部區(qū)域全是“無數(shù)據(jù)”柵格點組成的柵格塊,如果按照一般做法,存儲每個柵格塊的柵格點的數(shù)據(jù),則需要大量的存儲空間。因此,本領(lǐng)域技術(shù)人員要解決的技術(shù)問題之一在于對柵格數(shù)據(jù)中包含一定數(shù)量的“無數(shù)據(jù)柵格塊”情況下,提出一種能高效并避免存儲空間浪費的柵格數(shù)據(jù)寫入及讀取方法。
發(fā)明內(nèi)容
本申請所要解決的技術(shù)問題是提供一種包含無數(shù)據(jù)的柵格數(shù)據(jù)寫入的方法及裝置,以及,一種包含無數(shù)據(jù)的柵格數(shù)據(jù)讀取的方法及裝置。用以在柵格數(shù)據(jù)中包含一定數(shù)量的無數(shù)據(jù)柵格塊時,能高效讀取柵格數(shù)據(jù)并避免存儲空間浪費。為了解決上述問題,本申請公開了一種包含無數(shù)據(jù)的柵格數(shù)據(jù)寫入的方法,所述柵格數(shù)據(jù)包括M*N個柵格點,所述M為行,N為列,包括按預(yù)置大小對所述柵格數(shù)據(jù)劃分柵格塊;在柵格數(shù)據(jù)文件中針對所述柵格塊寫入相應(yīng)的數(shù)據(jù),具體包括
當(dāng)所述柵格塊為無數(shù)據(jù)的柵格塊時,則針對該柵格塊分配第一標(biāo)識,并按照所述第一標(biāo)識生成塊數(shù)據(jù)偏移信息;當(dāng)所述柵格塊為有數(shù)據(jù)的柵格塊時,則針對該柵格塊分配第二標(biāo)識以及塊數(shù)據(jù)存儲編號,并按照所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號生成塊數(shù)據(jù)偏移信息;根據(jù)所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號,寫入所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。優(yōu)選地,所述柵格塊的大小為m*n個柵格點,所述為m行,η為列;所述按預(yù)置大小對柵格數(shù)據(jù)劃分柵格塊的步驟包括當(dāng)M不能整除m時,則補充對應(yīng)柵格數(shù)據(jù)的行數(shù)令M能整除m ;當(dāng)N不能整除η時,則補充對應(yīng)柵格數(shù)據(jù)的列數(shù)令N能整除η?!?br>
優(yōu)選地,所述方法還包括將所述柵格數(shù)據(jù)的基本信息寫入柵格數(shù)據(jù)文件,所述柵格數(shù)據(jù)的基本信息包括柵格塊的大小。優(yōu)選地,所述根據(jù)所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號,寫入所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)的步驟包括讀取柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中的塊數(shù)據(jù)存儲編號以及基本信息中柵格塊的大小;依據(jù)所述塊數(shù)據(jù)存儲編號以及柵格塊的大小計算得出所述柵格塊的實際存儲起始位;從所述實際存儲起始位寫入所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。優(yōu)選地,所述方法還包括在將有數(shù)據(jù)的柵格塊修改為無數(shù)據(jù)的柵格塊時,則在所述有數(shù)據(jù)柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中,將第二標(biāo)識修改為第一標(biāo)識,并添加第三標(biāo)識,保留該柵格塊原有數(shù)據(jù)所占的存儲空間。優(yōu)選地,所述方法還包括在針對在先為有數(shù)據(jù)柵格塊,被修改為無數(shù)據(jù)的柵格塊中寫入新數(shù)據(jù)時,在所述無數(shù)據(jù)柵格塊的塊數(shù)據(jù)偏移信息中,將第一標(biāo)識修改為第二標(biāo)識,將新數(shù)據(jù)寫入保留的存儲空間中。優(yōu)選地,所述方法還包括在無數(shù)據(jù)的柵格塊中寫入數(shù)據(jù)時,則對所述柵格塊分配相應(yīng)大小的存儲空間,針對該柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中添加塊數(shù)據(jù)存儲編號并將第一標(biāo)識修改為第二標(biāo)識。本申請實施例還公開了一種包含無數(shù)據(jù)的柵格數(shù)據(jù)讀取的方法,柵格數(shù)據(jù)文件中包含基本信息,塊數(shù)據(jù)偏移信息,以及有數(shù)據(jù)的柵格塊中各柵格點對應(yīng)的數(shù)據(jù);其中,所述基本信息包括柵格塊的大小;所述塊數(shù)據(jù)偏移信息中包含第二標(biāo)識以及塊數(shù)據(jù)存儲編號;所述方法包括獲取柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息以及基本信息中柵格塊的大??;判斷所述柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中是否為第二標(biāo)識;若為第二標(biāo)識,則依據(jù)所述塊數(shù)據(jù)偏移信息中的塊數(shù)據(jù)存儲編號以及柵格塊的大小,計算解析得到該柵格塊的實際存儲起始位;
從所述實際存儲起始位讀取所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。本申請實施例還公開了一種包含無數(shù)據(jù)的柵格數(shù)據(jù)寫入的裝置,所述柵格數(shù)據(jù)包括M*N個柵格點,所述M為行,N為列,包括柵格數(shù)據(jù)劃分模塊,用于按預(yù)置大小對所述柵格數(shù)據(jù)劃分柵格塊;柵格數(shù)據(jù)寫入模塊,用于在柵格數(shù)據(jù)文件中針對所述柵格塊寫入相應(yīng)的數(shù)據(jù),具體包括無數(shù)據(jù)柵格塊處理子模塊,用于當(dāng)所述柵格塊為無數(shù)據(jù)的柵格塊時,則針對該柵格塊分配第一標(biāo)識,并按照所述第一標(biāo)識生成塊數(shù)據(jù)偏移信息;有數(shù)據(jù)柵格塊處理子模塊,用于當(dāng)所述柵格塊為有數(shù)據(jù)的柵格塊時,則針對該柵格塊分配第二標(biāo)識以及塊數(shù)據(jù)存儲編號,并按照所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號生成塊數(shù)據(jù)偏移信息;柵格塊數(shù)據(jù)寫入子模塊,用于根據(jù)所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號,寫入所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。優(yōu)選地,所述柵格塊的大小為m*n個柵格點,所述為m行,η為列;所述柵格數(shù)據(jù)劃分模塊包括柵格數(shù)據(jù)行補充子模塊,用于當(dāng)M不能整除m時,則補充對應(yīng)柵格數(shù)據(jù)的行數(shù)令M能整除m ;柵格數(shù)據(jù)列補充子模塊,用于當(dāng)N不能整除η時,則補充對應(yīng)柵格數(shù)據(jù)的列數(shù)令N能整除η。 優(yōu)選地,所述裝置還包括基本信息寫入模塊,用于將所述柵格數(shù)據(jù)的基本信息寫入柵格數(shù)據(jù)文件,所述柵格數(shù)據(jù)的基本信息包括柵格塊的大小。優(yōu)選地,所述柵格塊數(shù)據(jù)寫入子模塊包括塊數(shù)據(jù)偏移信息讀取子模塊,用于讀取柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中的塊數(shù)據(jù)存儲編號以及基本信息中柵格塊的大小;存儲起始位計算子模塊,用于依據(jù)所述塊數(shù)據(jù)存儲編號以及柵格塊的大小計算得出所述柵格塊的實際存儲起始位;柵格塊數(shù)據(jù)寫入子模塊,用于從所述實際存儲起始位寫入所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。優(yōu)選地,其特征在于,所述裝置還包括第一修改模塊,用于在將有數(shù)據(jù)的柵格塊修改為無數(shù)據(jù)的柵格塊時,則在所述有數(shù)據(jù)柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中,將第二標(biāo)識修改為第一標(biāo)識,并添加第三標(biāo)識,保留該柵格塊原有數(shù)據(jù)所占的存儲空間。優(yōu)選地,所述裝置還包括第二修改模塊,用于在針對在先為有數(shù)據(jù)柵格塊,被修改為無數(shù)據(jù)的柵格塊中寫入新數(shù)據(jù)時,在所述無數(shù)據(jù)柵格塊的塊數(shù)據(jù)偏移信息中,將第一標(biāo)識修改為第二標(biāo)識,將新數(shù)據(jù)寫入保留的存儲空間中。 優(yōu)選地,所述裝置還包括第三修改模塊,用于在無數(shù)據(jù)的柵格塊中寫入數(shù)據(jù)時,則對所述柵格塊分配相應(yīng)大小的存儲空間,針對該柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中添加塊數(shù)據(jù)存儲編號并將第一標(biāo)識修改為第二標(biāo)識。本申請實施例還公開了一種包含無數(shù)據(jù)的柵格數(shù)據(jù)讀取的裝置,其特征在于,柵格數(shù)據(jù)文件中包含基本信息,塊數(shù)據(jù)偏移信息,以及有數(shù)據(jù)的柵格塊中各柵格點對應(yīng)的數(shù)據(jù);其中,所述基本信息包括柵格塊的大??;所述塊數(shù)據(jù)偏移信息中第二標(biāo)識以及塊數(shù)據(jù)存儲編號;所述方法包括柵格塊信息獲取模塊,用于獲取柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息以及基本信息中柵格塊的大??;判斷模塊,用于判斷所述柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中是否為第二標(biāo)識;
處理模塊,用于若為第二標(biāo)識,則依據(jù)所述塊數(shù)據(jù)偏移信息中的塊數(shù)據(jù)存儲編號以及柵格塊的大小,計算解析得到該柵格塊的實際存儲起始位;柵格塊數(shù)據(jù)讀取模塊,用于從所述實際存儲起始位讀取所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。與現(xiàn)有技術(shù)相比,本申請包括以下優(yōu)點本申請通過將柵格數(shù)據(jù)按照預(yù)置大小進(jìn)行劃分柵格塊,然后判斷所述柵格塊是有數(shù)據(jù)的柵格塊還是無數(shù)據(jù)的柵格塊,若為無數(shù)據(jù)的柵格塊時,則可以針對該柵格塊分配第一標(biāo)識,并按照所述第一標(biāo)識生成塊數(shù)據(jù)偏移信息;若為有數(shù)據(jù)的柵格塊時,則可以針對該柵格塊分配第二標(biāo)識以及塊數(shù)據(jù)存儲編號,并按照所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號生成塊數(shù)據(jù)偏移信息;最后根據(jù)所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號,在柵格數(shù)據(jù)文件中寫入所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。本申請只針對有數(shù)據(jù)的柵格塊分配對應(yīng)的存儲空間,避免了存儲空間的浪費,提高柵格數(shù)據(jù)文件的讀寫效率。
圖I是本申請的一種包含無數(shù)據(jù)的柵格數(shù)據(jù)寫入的方法實施I的步驟流程圖;圖2是本申請一種示例中柵格數(shù)據(jù)的柵格點組成示意圖;圖3是本申請一種示例中柵格數(shù)據(jù)劃分為柵格塊后的示意圖;圖4是本申請一種示例中柵格數(shù)據(jù)文件中塊數(shù)據(jù)偏移信息結(jié)構(gòu)示意圖;圖5是本申請一種示例中柵格數(shù)據(jù)文件Raster, rd存儲結(jié)構(gòu)示意圖;圖6是本申請一種示例中柵格數(shù)據(jù)文件Raster, rd初始存儲結(jié)構(gòu)示意圖;圖7是本申請一種示例中柵格數(shù)據(jù)文件Raster, rd中塊數(shù)據(jù)偏移信息結(jié)構(gòu)示意圖;圖8是本申請一種示例中柵格數(shù)據(jù)文件Raster, rd寫入一塊單元后存儲結(jié)構(gòu)示意圖;圖9是本申請一種示例中柵格數(shù)據(jù)文件Raster, rd存儲結(jié)構(gòu)示意圖;圖10是本申請一種示例中土地利用類型柵格數(shù)據(jù)示意圖;圖11是本申請的一種包含無數(shù)據(jù)的柵格數(shù)據(jù)的寫入方法實施例2的步驟流程圖;圖12是本申請的一種包含無數(shù)據(jù)的柵格數(shù)據(jù)的讀取方法實施例的步驟流程圖;圖13是本申請的一種包含無數(shù)據(jù)的柵格數(shù)據(jù)的寫入裝置實施例的結(jié)構(gòu)框圖14是本申請的一種包含無數(shù)據(jù)的柵格數(shù)據(jù)的讀取裝置實施例的結(jié)構(gòu)框圖。
具體實施例方式為使本申請的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖和具體實施方式
對本申請作進(jìn)一步詳細(xì)的說明。本申請實施例的核心構(gòu)思之一在于通過將柵格數(shù)據(jù)按照預(yù)置大小進(jìn)行劃分柵格塊,然后判斷所述柵格塊是有數(shù)據(jù)的柵格塊還是無數(shù)據(jù)的柵格塊,若為無數(shù)據(jù)的柵格塊時,則可以針對該柵格塊分配第一標(biāo)識,并按照所述第一標(biāo)識生成塊數(shù)據(jù)偏移信息;若為有數(shù)據(jù)的柵格塊時,則可以針對該柵格塊分配第二標(biāo)識以及塊數(shù)據(jù)存儲編號,并按照所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號生成塊數(shù)據(jù)偏移信息;最后根據(jù)所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號,在柵格數(shù)據(jù)文件中寫入所述柵格塊中 各柵格點對應(yīng)的數(shù)據(jù)。本申請只針對有數(shù)據(jù)的柵格塊分配對應(yīng)的存儲空間,避免了存儲空間的浪費,提高柵格數(shù)據(jù)文件的讀寫效率。參照圖1,示出了本申請一種包含無數(shù)據(jù)的柵格數(shù)據(jù)的寫入方法的實施例I的步驟流程圖,所述柵格數(shù)據(jù)包括M*N個柵格點,所述M為行,N為列,包括步驟101,按預(yù)置大小對所述柵格數(shù)據(jù)劃分柵格塊;在本申請的一種優(yōu)選實施例中,所述柵格塊的大小可以為m*n個柵格點,所述為m行,η為列;所述按預(yù)置大小對柵格數(shù)據(jù)劃分柵格塊的步驟包括按照所述m*n個柵格點的大小,在柵格數(shù)據(jù)的M*N個柵格點中依次劃分柵格塊;當(dāng)M不能整除m時,則補充對應(yīng)柵格數(shù)據(jù)的行數(shù)令M能整除m ;當(dāng)N不能整除η時,則補充對應(yīng)柵格數(shù)據(jù)的列數(shù)令N能整除η ;基于補充后的行數(shù)和列數(shù),按預(yù)置大小對柵格數(shù)據(jù)文件劃分柵格塊。參照圖2所示的本申請一種示例中柵格數(shù)據(jù)的柵格點組成的示意圖,圖中的柵格數(shù)據(jù)包括Μ*Ν個柵格點,其中,M為柵格數(shù)據(jù)的行,N為柵格數(shù)據(jù)的列。參照圖3所示的本申請一種示例中柵格數(shù)據(jù)劃分為柵格塊后的示意圖,設(shè)置柵格塊的大小為T = m*n個柵格點,按此對柵格數(shù)據(jù)進(jìn)行劃分。對于M不能整除m和(或)N不能整除η時,補充柵格數(shù)據(jù)的行數(shù)和(或)列數(shù),使柵格數(shù)據(jù)可以劃分成r*c個柵格塊,其中,r = [M/m], C= [N/n]。步驟102,在柵格數(shù)據(jù)文件中針對所述柵格塊寫入相應(yīng)的數(shù)據(jù),具體可以包括子步驟11,當(dāng)所述柵格塊為無數(shù)據(jù)的柵格塊時,則可以針對該柵格塊分配第一標(biāo)識,并按照所述第一標(biāo)識生成塊數(shù)據(jù)偏移信息;子步驟12,當(dāng)所述柵格塊為有數(shù)據(jù)的柵格塊時,則可以針對該柵格塊分配第二標(biāo)識以及塊數(shù)據(jù)存儲編號,并按照所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號生成塊數(shù)據(jù)偏移信息;假設(shè)塊數(shù)據(jù)偏移信息是由r*c個4字節(jié)的整型數(shù)組成,初始值均為0,每個柵格塊對應(yīng)存儲一個整型數(shù),具體構(gòu)成方法如下柵格塊對應(yīng)的整型數(shù)的二進(jìn)制數(shù)最高位(第31位)表示此柵格塊是屬于無數(shù)據(jù)柵格塊或者有數(shù)據(jù)的柵格塊,如果是無數(shù)據(jù)的柵格塊(即此柵格塊的m*n個柵格點都是無數(shù)據(jù)柵格點),則對此柵格塊分配第一標(biāo)識,例如可以用最高位取O表示第一標(biāo)識;如果是有數(shù)據(jù)柵格塊,則對此柵格塊分配第二標(biāo)識,例如可以用最高位取I表示第二標(biāo)識,表示此柵格塊含有正常柵格點數(shù)值,其余下的31位用來記錄此柵格塊的塊數(shù)據(jù)存儲編號,例如可以從O開始按序記錄。塊數(shù)據(jù)偏移信息總共占用TilesOffsetInfoSize = r*c*4字節(jié)大小的存儲空間。
參照圖4所示的本申請一種示例中塊數(shù)據(jù)偏移信息的結(jié)構(gòu)示意圖,柵格塊A的塊數(shù)據(jù)偏移信息a為4字節(jié)的整型數(shù),用二進(jìn)制可以表示為1+余下的31位,即表示此塊的塊數(shù)據(jù)存儲編號;同樣,當(dāng)柵格塊B的塊數(shù)據(jù)偏移信息b的二進(jìn)制表示為00+余下的30位,即表示此塊為無數(shù)據(jù)值,未曾為此塊分配存儲空間;當(dāng)柵格塊C的塊數(shù)據(jù)偏移信息c用二進(jìn)制表示為01+余下的30位,即表示此塊為無數(shù)據(jù)值,但曾經(jīng)是有數(shù)值的柵格塊,分配過存儲空間,后來被編輯修改為無數(shù)據(jù)柵格塊。在本申請的一種優(yōu)選實施例中,還可以包括如下步驟將所述柵格數(shù)據(jù)的基本信息寫入柵格數(shù)據(jù)文件,所述柵格數(shù)據(jù)的基本信息可以包括柵格塊的大小。具體的,所述基本信息可以包括柵格數(shù)據(jù)的柵格寬度,高度,柵格塊寬度,柵格塊高度,柵格投影信息,柵格邊界范圍等,具體內(nèi)容可以由本領(lǐng)域技術(shù)人員根據(jù)實際應(yīng)用進(jìn)行設(shè)置,其所占用的存儲空間可以設(shè)置為基本信息中的全部信息所占的字節(jié)個數(shù)。參考圖5 所示的本申請一種示例中柵格數(shù)據(jù)文件Raster, rd存儲結(jié)構(gòu)示意圖,應(yīng)用本實施例,所述柵格數(shù)據(jù)文件可以包括基本信息、塊數(shù)據(jù)偏移信息、柵格塊的數(shù)據(jù)三部分。子步驟13,根據(jù)所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號,寫入所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。在本申請的一種優(yōu)選實施例中,所述根據(jù)所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號,寫入所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)的步驟包括子步驟SI,讀取柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中的塊數(shù)據(jù)存儲編號以及基本信息中柵格塊的大小;子步驟S2,依據(jù)所述塊數(shù)據(jù)存儲編號以及柵格塊的大小計算得出所述柵格塊的實際存儲起始位;子步驟S3,從所述實際存儲起始位寫入所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。例如,當(dāng)需要寫入柵格塊i (I <=r*c)數(shù)據(jù)時,先從塊數(shù)據(jù)偏移信息中讀取柵格塊i的塊數(shù)據(jù)存儲編號,也即塊數(shù)據(jù)偏移信息中第i個整型數(shù)a。若整型數(shù)a的二進(jìn)制數(shù)的最高位(第31位)是1,表示其已經(jīng)在文件中為其分配了存儲空間,則取其O位到31位表示的數(shù)值,進(jìn)行b = a&0x7FFF運算,將最高位置0,得到該柵格塊的塊數(shù)據(jù)存儲編號b,然后再套用公式f = BaseInfoSize+r*c*sizeof (int)+m*n* 每柵格點字節(jié)大小 *b ;其中,BaseInfoSize表示基本信息占用的空間大小。從柵格數(shù)據(jù)的文件頭按偏移量f偏移相應(yīng)的字節(jié),就可以得到該柵格塊的數(shù)據(jù)的實際存儲起始位置。假設(shè)設(shè)置的柵格塊的大小為T = m*n個柵格點,從基本信息中得到每個柵格塊數(shù)據(jù)所占的存儲空間為TileSize = m*n*每柵格點字節(jié)大小,在柵格數(shù)據(jù)文件中從計算得出的實際存儲起始位置寫入柵格塊i的數(shù)據(jù)。假設(shè)預(yù)置柵格塊的大小為m*n = 256*256 ;每個柵格點的數(shù)據(jù)為4字節(jié)的浮點型數(shù),柵格數(shù)據(jù)文件的基本信息中包含柵格點寬度RW,高度RH,柵格塊單元寬度TW以及高度TH,每個數(shù)值均用4字節(jié)整型數(shù)存儲;假設(shè)柵格數(shù)據(jù)由r*c = 512*512個柵格塊組成,寫入柵格塊數(shù)據(jù)之前,參照圖6所示的本申請一種示例中柵格數(shù)據(jù)文件Raster, rd初始存儲結(jié)構(gòu),包括基本信息以及塊數(shù)據(jù)偏移信息,其中,塊數(shù)據(jù)偏移信息的初始值為O。參照圖7所示的本申請一種示例中柵格數(shù)據(jù)文件Raster, rd寫入第一個柵格塊后的存儲結(jié)構(gòu)示意圖,在柵格數(shù)據(jù)文件Raster, rd寫入第一個柵格塊的數(shù)據(jù)后,柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息a為a = 2147483648,轉(zhuǎn)換為二進(jìn)制表示后則為a = 10000000000000000000000000000000,a的最高位為I表示此柵格塊為有數(shù)據(jù)的柵格塊,其余31位表示此塊真實塊數(shù)據(jù)存儲編號。參照圖8所示的本申請一種示例中在柵格數(shù)據(jù)文件中寫入無數(shù)據(jù)的柵格塊存儲結(jié)構(gòu)示意圖,b是無數(shù)據(jù)柵格塊的塊數(shù)據(jù)偏移信息,對于無數(shù)據(jù)的柵格塊不進(jìn)行存儲空間分配,b的二進(jìn)制表示為00+余下30位O,用整型數(shù)表示則b = 0。參照圖9所示的本申請一種示例中柵格數(shù)據(jù)文件Raster, rd存儲結(jié)構(gòu)示意圖,圖中的a,c,h均為有數(shù)據(jù)的柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息,故最高位都為I且對應(yīng)的塊數(shù)據(jù)存儲編號,并且分配了對應(yīng)的存儲空間。b為無數(shù)據(jù)的柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息,故最高位為0,不分配塊數(shù)據(jù)存儲編號,且沒有分配存儲空間。應(yīng)用本申請實施例,如果柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息的第31位、第30位是00,則表示該上塊是未曾分配存儲空間的無數(shù)據(jù)的柵格塊,假設(shè)現(xiàn)在需要往此塊寫入實際數(shù)據(jù),以CurFileSize表示當(dāng)前文件字節(jié)大小,就從柵格數(shù)據(jù)文件末尾開始為其分配 TileSize = m*n*每柵格點字節(jié)大小的空間來存儲柵格塊的數(shù)據(jù),則先需要計算分配的塊數(shù)據(jù)存儲編號 j = (CurFileSize-BaseInfoSize_r*c*sizeof (int))/(m*n* 每柵格點字節(jié)大小),假設(shè)將當(dāng)前的塊數(shù)據(jù)存儲編號j寫入塊數(shù)據(jù)偏移信息中第i個整型數(shù)中低31位中去,這個整型數(shù)的第31位為I ;如果其第31位、第30位是01,則表示該塊曾經(jīng)在文件里為其分配過存儲空間,塊數(shù)據(jù)存儲編號為c = a&0x3FFF(將前兩位置O);現(xiàn)在無需再分配存儲空間,直接往其分配過的存儲空間寫入數(shù)據(jù)即可。按本申請實施例的方法,存儲的柵格數(shù)據(jù)文件數(shù)據(jù)量可達(dá)到海量級別;假設(shè)柵格柵格點的數(shù)據(jù)為I字節(jié)的數(shù),柵格塊的大小為256*256,則理論上本方法可存儲文件大小為256*256*1*1073741824 = 64Tb。足夠滿足一般應(yīng)用需求。同時,根據(jù)上面所敘述方法,本方法對無數(shù)據(jù)的柵格塊沒有實際分配存儲空間進(jìn)行存儲,只針對有數(shù)據(jù)的柵格塊進(jìn)行分配存儲空間,可以很大程度上避免存儲空間的浪費。在實際項目中,以土地利用類型柵格數(shù)據(jù)為例,參照圖10所示的本申請一種示例中土地利用類型柵格數(shù)據(jù)示意圖,其中所示白色區(qū)域表示的是水域范圍,不屬于土地利用類型屬性范疇,在柵格點上視其為無數(shù)據(jù)值處理,可以用數(shù)值O來存儲表示。該柵格數(shù)據(jù)分辨率為30米,柵格數(shù)據(jù)的大小為6304*5529 ;柵格塊的個數(shù)為256*256 ;柵格點以I字節(jié)保存數(shù)值。圖10中可以明顯看出,柵格數(shù)據(jù)中含有大量的無數(shù)據(jù)的柵格點并且分布比較集中,形成很多的柵格塊都是無數(shù)據(jù)的柵格塊,按普通做法,每個柵格塊都分配存儲空間進(jìn)行存儲,則大約需要33. 2M空間,而應(yīng)用本申請實施例,動態(tài)地對有數(shù)據(jù)的柵格塊進(jìn)行分配存儲空間,則只需要1.3M的空間。尤其對數(shù)據(jù)量非常大的柵格,存儲空間的利用效率提高的更為明顯。參照圖11,示出了本申請一種包含無數(shù)據(jù)的柵格數(shù)據(jù)的寫入方法的實施例2的步驟流程圖,所述柵格數(shù)據(jù)包括M*N個柵格點,所述M為行,N為列,包括步驟201,按預(yù)置大小對所述柵格數(shù)據(jù)劃分柵格塊;步驟202,在柵格數(shù)據(jù)文件中針對所述柵格塊寫入相應(yīng)的數(shù)據(jù);步驟203,在將有數(shù)據(jù)的柵格塊修改為無數(shù)據(jù)的柵格塊時,則在所述有數(shù)據(jù)柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中,將第二標(biāo)識修改為第一標(biāo)識,并添加第三標(biāo)識,保留該柵格塊原有數(shù)據(jù)所占的存儲空間。若要將有數(shù)據(jù)的柵格塊修改為無數(shù)據(jù)的柵格塊,則只需要修改此柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息a,保留該柵格塊原有數(shù)據(jù)所占的存儲空間,將a第二標(biāo)識修改為第一標(biāo)識,所述第一標(biāo)識可以為塊數(shù)據(jù)偏移信息的最高位取0,所述第二標(biāo)識可以為塊數(shù)據(jù)偏移信息的最高位取1,具體的,將a的最高位由第一標(biāo)識I改為第二標(biāo)識0,由于此柵格塊已經(jīng)分配過存儲空間,所以為在a中添加第三標(biāo)識,所述第三標(biāo)識可以為塊數(shù)據(jù)偏移信息的30位取I,具體地,將a的第30位取值為1,其余第O到29位全為0,轉(zhuǎn)換整型數(shù)為a = 23° =1073741824。步驟204,在針對在先為有數(shù)據(jù)柵格塊,被修改為無數(shù)據(jù)的柵格塊中寫入新數(shù)據(jù)時,在所述無數(shù)據(jù)柵格塊的塊數(shù)據(jù)偏移信息中,將第一標(biāo)識修改為第二標(biāo)識,將新數(shù)據(jù)寫入保留的存儲空間中。在具體實現(xiàn)中,第一標(biāo)識可以為塊數(shù)據(jù)偏移信息的最高位取0,第二標(biāo)識可以為塊數(shù)據(jù)偏移信息的最高位取1,第三標(biāo)識可以為塊數(shù)據(jù)偏移信息的30位取I。若要在柵格數(shù)據(jù)文件中將數(shù)據(jù)寫入原先為有數(shù)據(jù)的柵格塊,后來被修改為無數(shù)據(jù)的柵格塊中,首先通過讀取此柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息a得知其第31位、第30位為01,表示現(xiàn)在該柵格塊為無數(shù)據(jù)柵格塊,但是曾經(jīng)為該塊分配過存儲空間,所以,可以直接定位到之前為此柵格塊的實際塊數(shù)據(jù)地址,在所述實際塊數(shù)據(jù)地址寫入新的數(shù)據(jù)即可,同時,將a的第一標(biāo)識修改為第二標(biāo)識,即將a的最高位修改為I。步驟205,在無數(shù)據(jù)的柵格塊中寫入數(shù)據(jù)時,則對所述柵格塊分配相應(yīng)大小的存儲空間,針對該柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中添加塊數(shù)據(jù)存儲編號并將第一標(biāo)識修改為第二標(biāo)識。若要在無數(shù)據(jù)的柵格塊中寫入數(shù)據(jù),則需要對柵格塊分配存儲空間,若柵格點占用的存儲空間大小為4字節(jié),則在當(dāng)前文件末尾分配大小為256*256*4字節(jié)的柵格塊數(shù)據(jù)存儲空間,并改寫在此柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息b的值,將第一標(biāo)識修改為第二標(biāo)識,即將b最高位修改為1,用余下的31位表示剛剛分配的塊數(shù)據(jù)存儲編號。參照圖12,示出了本申請一種包含無數(shù)據(jù)的柵格數(shù)據(jù)的讀取方法的實施例的步驟流程圖,柵格數(shù)據(jù)文件中包含基本信息,塊數(shù)據(jù)偏移信息,以及有數(shù)據(jù)的柵格塊中各柵格點對應(yīng)的數(shù)據(jù);其中,所述基本信息包括柵格塊的大??;所述塊數(shù)據(jù)偏移信息中包含第二標(biāo)識以及塊數(shù)據(jù)存儲編號;所述方法包括步驟301,獲取柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息以及基本信息中柵格塊的大??;步驟302,判斷所述柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中為第一標(biāo)識或第二標(biāo)識;步驟303,若為第二標(biāo)識,則依據(jù)所述塊數(shù)據(jù)偏移信息中的塊數(shù)據(jù)存儲編號以及柵格塊的大小,計算解析得到該柵格塊的實際存儲起始位;若柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中為第二標(biāo)識,表示此柵格塊為有數(shù)據(jù)的柵格塊,柵格數(shù)據(jù)文件中對其分配對應(yīng)的存儲空間。步驟304,從所述實際存儲起始位讀取所述柵格塊中各柵格點對應(yīng)的數(shù)。應(yīng)用本申請實施例,所述第二標(biāo)識可以為塊數(shù)據(jù)偏移信息中的整型數(shù)最高位取1,例如,當(dāng)需要讀取柵格塊k數(shù)據(jù)時,先從柵格塊k對應(yīng)的塊數(shù)據(jù)偏移信息,也即第k個柵格塊對應(yīng)的整型數(shù)a。若整型數(shù)a的二進(jìn)制數(shù)的最高位是1,即塊數(shù)據(jù)偏移信息中的為第二標(biāo)識,表示其已經(jīng)在文件中為其分配了存儲空間,則取其O位到31位表示的數(shù)值,進(jìn)行b =a&0x7FFF運算,將最高位置O,得到該柵格塊的塊數(shù)據(jù)存儲編號b,然后再套用公式f = BaseInfoSize+r*c*sizeof (int)+m*n* 每柵格點字節(jié)大小 *b ;其中,BaseInfoSize表示基本信息占用的空間大小。從柵格數(shù)據(jù)的文件頭按偏移量f偏移相應(yīng)的字節(jié),就得到柵格塊k的數(shù)據(jù)的實際存儲起始位置。假設(shè)設(shè)置的柵格塊的大小為T = m*n個柵格點,從基本信息中得到每個柵格塊數(shù)據(jù)所占的存儲空間為TileSize =m*n*每柵格點字節(jié)大小,在柵格數(shù)據(jù)文件中從計算得出的實際存儲起始位置讀取該柵格塊k的各柵格點對應(yīng)的數(shù)據(jù)。參照圖13,示出了本申請一種包含無數(shù)據(jù)的柵格數(shù)據(jù)的寫入裝置的實施例的結(jié)構(gòu)框圖,所述柵格數(shù)據(jù)包括M*N個柵格點,所述M為行,N為列,包括柵格數(shù)據(jù)劃分模塊401,用于按預(yù)置大小對所述柵格數(shù)據(jù)劃分柵格塊;·在本申請的一種優(yōu)選實施例中,所述柵格塊的大小為m*n個柵格點,所述為m行,η為列;所述柵格數(shù)據(jù)劃分模塊包括柵格數(shù)據(jù)行補充子模塊,用于當(dāng)M不能整除m時,則補充對應(yīng)柵格數(shù)據(jù)的行數(shù)令M能整除m ;柵格數(shù)據(jù)列補充子模塊,用于當(dāng)N不能整除η時,則補充對應(yīng)柵格數(shù)據(jù)的列數(shù)令N能整除η。柵格數(shù)據(jù)寫入模塊402,用于在柵格數(shù)據(jù)文件中針對所述柵格塊寫入相應(yīng)的數(shù)據(jù),具體包括無數(shù)據(jù)柵格塊處理子模塊41,用于當(dāng)所述柵格塊為無數(shù)據(jù)的柵格塊時,則針對該柵格塊分配第一標(biāo)識,并按照所述第一標(biāo)識生成塊數(shù)據(jù)偏移信息;有數(shù)據(jù)柵格塊處理子模塊42,用于當(dāng)所述柵格塊為有數(shù)據(jù)的柵格塊時,則針對該柵格塊分配第二標(biāo)識以及塊數(shù)據(jù)存儲編號,并按照所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號生成塊數(shù)據(jù)偏移信息;柵格塊數(shù)據(jù)寫入子模塊43,用于根據(jù)所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號,寫入所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。在本申請的一種優(yōu)選實施例中,所述裝置還包括基本信息寫入模塊,用于將所述柵格數(shù)據(jù)的基本信息寫入柵格數(shù)據(jù)文件,所述柵格數(shù)據(jù)的基本信息包括柵格塊的大小。在本申請的一種優(yōu)選實施例中,所述柵格塊數(shù)據(jù)寫入子模塊43包括塊數(shù)據(jù)偏移信息讀取子模塊,用于讀取柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中的塊數(shù)據(jù)存儲編號以及基本信息中柵格塊的大?。淮鎯ζ鹗嘉挥嬎阕幽K,用于依據(jù)所述塊數(shù)據(jù)存儲編號以及柵格塊的大小計算得出所述柵格塊的實際存儲起始位;柵格塊數(shù)據(jù)寫入子模塊,用于從所述實際存儲起始位寫入所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。在本申請的一種優(yōu)選實施例中,所述裝置還包括第一修改模塊,用于在將有數(shù)據(jù)的柵格塊修改為無數(shù)據(jù)的柵格塊時,則在所述有數(shù)據(jù)柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中,將第二標(biāo)識修改為第一標(biāo)識,并添加第三標(biāo)識,保留該柵格塊原有數(shù)據(jù)所占的存儲空間。第三修改模塊,用于在無數(shù)據(jù)的柵格塊中寫入數(shù)據(jù)時,則對所述柵格塊分配相應(yīng)大小的存儲空間,針對該柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中添加塊數(shù)據(jù)存儲編號并將第一標(biāo)識修改為第二標(biāo)識。第二修改模塊,用于在針對在先為有數(shù)據(jù)柵格塊,被修改為無數(shù)據(jù)的柵格塊中寫入新數(shù)據(jù)時,在所述無數(shù)據(jù)柵格塊的塊數(shù)據(jù)偏移信息中,將第一標(biāo)識修改為第二標(biāo)識,將新數(shù)據(jù)寫入保留的存儲空間中。對于圖13所示的裝置實施例而言,由于其與圖I和圖11所示的方法實施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。參照圖14,示出了本申請一種包含無數(shù)據(jù)的柵格數(shù)據(jù)的讀取裝置的實施例的結(jié)構(gòu)框圖,柵格數(shù)據(jù)文件中包含基本信息,塊數(shù)據(jù)偏移信息,以及有數(shù)據(jù)的柵格塊中各柵格點對應(yīng)的數(shù)據(jù);其中,所述基本信息包括柵格塊的大小;所述塊數(shù)據(jù)偏移信息中包含第二標(biāo)識以及塊數(shù)據(jù)存儲編號;所述方法包括柵格塊信息獲取模塊501,用于獲取柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息以及基本信息中柵格塊的大小;判斷模塊502,用于判斷所述柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中為第一標(biāo)識或第二標(biāo)識;第二標(biāo)識模塊503,用于若為第二標(biāo)識,則依據(jù)所述塊數(shù)據(jù)偏移信息中的塊數(shù)據(jù)存儲編號以及柵格塊的大小,計算解析得到該柵格塊的實際存儲起始位;柵格塊數(shù)據(jù)讀取模塊504,用于從所述實際存儲起始位讀取所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。對于圖14所示的裝置實施例而言,由于其與圖12所示的方法實施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。本說明書中的各個實施例均采用遞進(jìn)的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請的實施例可提供為方法、裝置、或計算機程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。本申請是參照根據(jù)本申請實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能·的裝置。這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。盡管已描述了本申請的優(yōu)選實施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例做出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實施例以及落入本申請范圍的所有變更和修改。最后,還需要說明的是,在本文中,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些 要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)
備所固有的要素。在沒有更多限制的情況下,由語句“包括一個......”限定的要素,并不
排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。以上對本申請所提供的一種包含無數(shù)據(jù)的柵格數(shù)據(jù)寫入的方法及裝置,以及,一種包含無數(shù)據(jù)的柵格數(shù)據(jù)讀取的方法及裝置,進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個例對本申請的原理及實施方式進(jìn)行了闡述,以上實施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請的思想,在具體實施方式
及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本申請的限制。
權(quán)利要求
1.一種包含無數(shù)據(jù)的柵格數(shù)據(jù)寫入的方法,其特征在于,所述柵格數(shù)據(jù)包括M*N個柵格點,所述M為行,N為列,包括 按預(yù)置大小對所述柵格數(shù)據(jù)劃分柵格塊; 在柵格數(shù)據(jù)文件中針對所述柵格塊寫入相應(yīng)的數(shù)據(jù),具體包括 當(dāng)所述柵格塊為無數(shù)據(jù)的柵格塊時,則針對該柵格塊分配第一標(biāo)識,并按照所述第一標(biāo)識生成塊數(shù)據(jù)偏移信息; 當(dāng)所述柵格塊為有數(shù)據(jù)的柵格塊時,則針對該柵格塊分配第二標(biāo)識以及塊數(shù)據(jù)存儲編號,并按照所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號生成塊數(shù)據(jù)偏移信息; 根據(jù)所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號,寫入所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述柵格塊的大小為m*n個柵格點,所述為m行,η為列;所述按預(yù)置大小對柵格數(shù)據(jù)劃分柵格塊的步驟包括 當(dāng)M不能整除m時,則補充對應(yīng)柵格數(shù)據(jù)的行數(shù)令M能整除m ; 當(dāng)N不能整除η時,則補充對應(yīng)柵格數(shù)據(jù)的列數(shù)令N能整除η。
3.根據(jù)權(quán)利要求I或2所述的方法,其特征在于,還包括 將所述柵格數(shù)據(jù)的基本信息寫入柵格數(shù)據(jù)文件,所述柵格數(shù)據(jù)的基本信息包括柵格塊的大小。
4.根據(jù)權(quán)利要求I或2所述的方法,其特征在于,所述根據(jù)所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號,寫入所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)的步驟包括 讀取柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中的塊數(shù)據(jù)存儲編號以及基本信息中柵格塊的大小; 依據(jù)所述塊數(shù)據(jù)存儲編號以及柵格塊的大小計算得出所述柵格塊的實際存儲起始位; 從所述實際存儲起始位寫入所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。
5.根據(jù)權(quán)利要求I或2所述的方法,其特征在于,還包括 在將有數(shù)據(jù)的柵格塊修改為無數(shù)據(jù)的柵格塊時,則在所述有數(shù)據(jù)柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中,將第二標(biāo)識修改為第一標(biāo)識,并添加第三標(biāo)識,保留該柵格塊原有數(shù)據(jù)所占的存儲空間。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,還包括 在針對在先為有數(shù)據(jù)柵格塊,被修改為無數(shù)據(jù)的柵格塊中寫入新數(shù)據(jù)時,在所述無數(shù)據(jù)柵格塊的塊數(shù)據(jù)偏移信息中,將第一標(biāo)識修改為第二標(biāo)識,將新數(shù)據(jù)寫入保留的存儲空間中。
7.根據(jù)權(quán)利要求I或2所述的方法,其特征在于,還包括 在無數(shù)據(jù)的柵格塊中寫入數(shù)據(jù)時,則對所述柵格塊分配相應(yīng)大小的存儲空間,針對該柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中添加塊數(shù)據(jù)存儲編號并將第一標(biāo)識修改為第二標(biāo)識。
8.—種包含無數(shù)據(jù)的柵格數(shù)據(jù)讀取的方法,其特征在于,柵格數(shù)據(jù)文件中包含基本信息,塊數(shù)據(jù)偏移信息,以及有數(shù)據(jù)的柵格塊中各柵格點對應(yīng)的數(shù)據(jù);其中,所述基本信息包括柵格塊的大??;所述塊數(shù)據(jù)偏移信息中包含第二標(biāo)識以及塊數(shù)據(jù)存儲編號;所述方法包括 獲取柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息以及基本信息中柵格塊的大?。慌袛嗨鰱鸥駢K對應(yīng)的塊數(shù)據(jù)偏移信息中是否為第二標(biāo)識; 若為第二標(biāo)識,則依據(jù)所述塊數(shù)據(jù)偏移信息中的塊數(shù)據(jù)存儲編號以及柵格塊的大小,計算解析得到該柵格塊的實際存儲起始位; 從所述實際存儲起始位讀取所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。
9.一種包含無數(shù)據(jù)的柵格數(shù)據(jù)寫入的裝置,其特征在于,所述柵格數(shù)據(jù)包括M*N個柵格點,所述M為行,N為列,包括 柵格數(shù)據(jù)劃分模塊,用于按預(yù)置大小對所述柵格數(shù)據(jù)劃分柵格塊; 柵格數(shù)據(jù)寫入模塊,用于在柵格數(shù)據(jù)文件中針對所述柵格塊寫入相應(yīng)的數(shù)據(jù),具體包括 無數(shù)據(jù)柵格塊處理子模塊,用于當(dāng)所述柵格塊為無數(shù)據(jù)的柵格塊時,則針對該柵格塊分配第一標(biāo)識,并按照所述第一標(biāo)識生成塊數(shù)據(jù)偏移信息; 有數(shù)據(jù)柵格塊處理子模塊,用于當(dāng)所述柵格塊為有數(shù)據(jù)的柵格塊時,則針對該柵格塊分配第二標(biāo)識以及塊數(shù)據(jù)存儲編號,并按照所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號生成塊數(shù)據(jù)偏移息; 柵格塊數(shù)據(jù)寫入子模塊,用于根據(jù)所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號,寫入所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述柵格塊的大小為m*n個柵格點,所述為m行,η為列;所述柵格數(shù)據(jù)劃分模塊包括 柵格數(shù)據(jù)行補充子模塊,用于當(dāng)M不能整除m時,則補充對應(yīng)柵格數(shù)據(jù)的行數(shù)令M能整除m ; 柵格數(shù)據(jù)列補充子模塊,用于當(dāng)N不能整除η時,則補充對應(yīng)柵格數(shù)據(jù)的列數(shù)令N能整除η。
11.根據(jù)權(quán)利要求9或10所述的裝置,其特征在于,還包括 基本信息寫入模塊,用于將所述柵格數(shù)據(jù)的基本信息寫入柵格數(shù)據(jù)文件,所述柵格數(shù)據(jù)的基本信息包括柵格塊的大小。
12.根據(jù)權(quán)利要求9或10所述的裝置,其特征在于,所述柵格塊數(shù)據(jù)寫入子模塊包括 塊數(shù)據(jù)偏移信息讀取子模塊,用于讀取柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中的塊數(shù)據(jù)存儲編號以及基本信息中柵格塊的大??; 存儲起始位計算子模塊,用于依據(jù)所述塊數(shù)據(jù)存儲編號以及柵格塊的大小計算得出所述柵格塊的實際存儲起始位; 柵格塊數(shù)據(jù)寫入子模塊,用于從所述實際存儲起始位寫入所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。
13.根據(jù)權(quán)利要求9或10所述的裝置,其特征在于,還包括 第一修改模塊,用于在將有數(shù)據(jù)的柵格塊修改為無數(shù)據(jù)的柵格塊時,則在所述有數(shù)據(jù)柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中,將第二標(biāo)識修改為第一標(biāo)識,并添加第三標(biāo)識,保留該柵格塊原有數(shù)據(jù)所占的存儲空間。
14.根據(jù)權(quán)利要求13所述的裝置,其特征在于,還包括 第二修改模塊,用于在針對在先為有數(shù)據(jù)柵格塊,被修改為無數(shù)據(jù)的柵格塊中寫入新數(shù)據(jù)時,在所述無數(shù)據(jù)柵格塊的塊數(shù)據(jù)偏移信息中,將第一標(biāo)識修改為第二標(biāo)識,將新數(shù)據(jù)寫入保留的存儲空間中。
15.根據(jù)權(quán)利要求9或10所述的裝置,其特征在于,還包括 第三修改模塊,用于在無數(shù)據(jù)的柵格塊中寫入數(shù)據(jù)時,則對所述柵格塊分配相應(yīng)大小的存儲空間,針對該柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中添加塊數(shù)據(jù)存儲編號并將第一標(biāo)識修改為第二標(biāo)識。
16.一種包含無數(shù)據(jù)的柵格數(shù)據(jù)讀取的裝置,其特征在于,柵格數(shù)據(jù)文件中包含基本信息,塊數(shù)據(jù)偏移信息,以及有數(shù)據(jù)的柵格塊中各柵格點對應(yīng)的數(shù)據(jù);其中,所述基本信息包括柵格塊的大??;所述塊數(shù)據(jù)偏移信息中第二標(biāo)識以及塊數(shù)據(jù)存儲編號;所述方法包括 柵格塊信息獲取模塊,用于獲取柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息以及基本信息中柵格塊的大?。? 判斷模塊,用于判斷所述柵格塊對應(yīng)的塊數(shù)據(jù)偏移信息中是否為第二標(biāo)識; 處理模塊,用于若為第二標(biāo)識,則依據(jù)所述塊數(shù)據(jù)偏移信息中的塊數(shù)據(jù)存儲編號以及柵格塊的大小,計算解析得到該柵格塊的實際存儲起始位; 柵格塊數(shù)據(jù)讀取模塊,用于從所述實際存儲起始位讀取所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。
全文摘要
本發(fā)明提供了一種包含無數(shù)據(jù)的柵格數(shù)據(jù)寫入及讀取的方法及裝置,其中,所述方法包括按預(yù)置大小對所述柵格數(shù)據(jù)劃分柵格塊;在柵格數(shù)據(jù)文件中針對所述柵格塊寫入相應(yīng)的數(shù)據(jù),具體包括當(dāng)所述柵格塊為無數(shù)據(jù)的柵格塊時,則針對該柵格塊分配第一標(biāo)識,并按照所述第一標(biāo)識生成塊數(shù)據(jù)偏移信息;當(dāng)所述柵格塊為有數(shù)據(jù)的柵格塊時,則針對該柵格塊分配第二標(biāo)識以及塊數(shù)據(jù)存儲編號,并按照所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號生成塊數(shù)據(jù)偏移信息;根據(jù)所述第二標(biāo)識以及塊數(shù)據(jù)存儲編號,寫入所述柵格塊中各柵格點對應(yīng)的數(shù)據(jù)。本發(fā)明可以在柵格數(shù)據(jù)中包含一定數(shù)量無數(shù)據(jù)柵格塊情況下,能高效讀取柵格數(shù)據(jù)并避免存儲空間浪費。
文檔編號G06F17/30GK102937962SQ201210345629
公開日2013年2月20日 申請日期2012年9月17日 優(yōu)先權(quán)日2012年9月17日
發(fā)明者孫成寶, 鄭國柱 申請人:北京地拓科技發(fā)展有限公司