国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      海量柵格瓦塊地圖發(fā)布方法

      文檔序號(hào):6376428閱讀:346來(lái)源:國(guó)知局
      專利名稱:海量柵格瓦塊地圖發(fā)布方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及一種地圖發(fā)布方法,尤其涉及一種海量柵格瓦塊地圖發(fā)布方法。
      背景技術(shù)
      Web GIS是Internet技術(shù)應(yīng)用于GIS開發(fā)的地理信息系統(tǒng)。其使用的靜態(tài)背景地圖多采用預(yù)先生成柵格瓦塊地圖,然后通過(guò)HTTP (HyperText Transfer Protocol,超文本傳輸協(xié)議)的方式發(fā)布。這種方式減少了服務(wù)器端動(dòng)態(tài)生成地片的計(jì)算壓力,是目前采用最多的Web GIS技術(shù)之一。柵格瓦塊地圖一般的發(fā)布方式是使用工具把矢量地圖按行列切割為大小統(tǒng)一的柵格小圖片并存儲(chǔ)于地圖目錄Root下;然后將這些柵格小圖片拷貝至Web服務(wù)器上并發(fā)布出去;客戶端程序根據(jù)當(dāng)前地圖范圍計(jì)算待加載的柵格小圖片的URL(Universal Resour ceLocator,統(tǒng)一資源定位符)路徑,并根據(jù)該URL路徑查找對(duì)應(yīng)柵格小圖片的存儲(chǔ)位置;最后客戶端通過(guò)HTTP加載對(duì)應(yīng)的柵格小圖片。目前,柵格瓦塊地圖一般通過(guò)IIS軟件進(jìn)行發(fā)布出去,IIS軟件發(fā)布方式存在以下缺點(diǎn)將矢量地圖切割成海量柵格小圖片,增大了磁盤空間的占有量,此外在柵格小圖片存儲(chǔ)于地圖目錄Root過(guò)程中,針對(duì)大量相同的圖片(諸如空白圖片)均按照行列分別重復(fù)存儲(chǔ),進(jìn)一步增大了磁盤空間的占有量;將柵格小圖片拷貝至Web發(fā)布服務(wù)器上并發(fā)布出去,由于海量柵格小圖片的數(shù)量較多,需要消耗較長(zhǎng)的時(shí)間來(lái)拷貝數(shù)據(jù);在根據(jù)URL路徑查找對(duì)應(yīng)柵格小圖片的位置時(shí),IIS軟件只能依賴文件系統(tǒng),幾乎每次訪問(wèn),都要進(jìn)行磁盤10,查找效率低。

      發(fā)明內(nèi)容
      本發(fā)明旨在至少解決現(xiàn)有技術(shù)中存在的技術(shù)問(wèn)題,特別創(chuàng)新地提出了一種海量柵格瓦塊地圖發(fā)布方法,將海量柵格小圖片打包至數(shù)據(jù)文件中,并對(duì)相同的文件只進(jìn)行一次存儲(chǔ)分配,減小了磁盤空間的占有量;在根據(jù)URL路徑查找對(duì)應(yīng)柵格小圖片時(shí),不是依賴于文件系統(tǒng)逐一查找,而是通過(guò)索引的形式查找,提高了查找效率。為了實(shí)現(xiàn)本發(fā)明的上述目的,本發(fā)明提供了一種海量柵格瓦塊地圖發(fā)布方法,其特征在于包括以下步驟SI、將矢量地圖切割成多個(gè)柵格小圖片并存儲(chǔ)于地圖目錄Root中,遍歷該地圖目錄Root中的柵格小圖片并打包至數(shù)據(jù)文件中;S2、建立索引文件,該索引文件用于表示URL路徑與數(shù)據(jù)文件中對(duì)應(yīng)柵格小圖片存儲(chǔ)位置的索引關(guān)系;S3、根據(jù)客戶端請(qǐng)求的URL路徑以及索引文件,在數(shù)據(jù)文件中查找與該URL路徑對(duì)應(yīng)的柵格小圖片的存儲(chǔ)位置,讀取該柵格小圖片并發(fā)送給客戶端。本發(fā)明將海量柵格小圖片打包至數(shù)據(jù)文件中,并對(duì)相同的文件只進(jìn)行一次存儲(chǔ)分配,減小了磁盤空間的占有量;在根據(jù)URL路徑查找對(duì)應(yīng)柵格小圖片時(shí),不依賴于文件系統(tǒng)逐一查找,而是通過(guò)索引的形式查找,提高了查找效率。所述步驟SI由以下步驟組成S10、將矢量地圖切割成多個(gè)柵格小圖片并存儲(chǔ)于地圖目錄Root中,針對(duì)大量?jī)?nèi)容相同的柵格小圖片設(shè)置模板文件T= (path, size, context, fno, offset),其中T. path表示模板文件T的存儲(chǔ)路徑,T. size表示模板文件T的大小,T. context表示模板文件T的內(nèi)容,T. fno表示模板文件T所在數(shù)據(jù)文件Fi的編號(hào),T. offset表示模板文件T在數(shù)據(jù)文件Fi中的偏移,初始狀態(tài)下T. fno=T. Offset=O且i為整數(shù);S11、設(shè)置i=0,打開數(shù)據(jù)文件Fi,讀取模板文件T并將該模板文件T= (path, size,context, fno, offset)寫入數(shù)據(jù)文件Fi中,保存該模板文件T在數(shù)據(jù)文件Fi中的偏移T. offset 且 T. fno=i ; S12、深度遍歷該地圖目錄Root,依次讀取該地圖目錄Root下各柵格小圖片LF= (path, size, context, fno, offset),其中 LF. path 表示柵格小圖片 LF 的存儲(chǔ)路徑,LF. size表示柵格小圖片LF的大小,LF. context表示柵格小圖片LF的內(nèi)容,LF. fno表示柵格小圖片LF所在數(shù)據(jù)文件Fi的編號(hào),LF. offset表示柵格小圖片LF在數(shù)據(jù)文件Fi中的偏移,在初始狀態(tài)下LF. fno=LF. offset=0 ;S13、將各柵格小圖片LF與該模板文件T進(jìn)行比較在LF. size=T. size且LF. context=T. context時(shí)表不該柵格小圖片LF與模板文件T相同,不再將該柵格小圖片LF重復(fù)寫入該數(shù)據(jù)文件Fi中,并且LF. Offset=T. offset,LF. fno=T. fno ;否則表示該柵格小圖片LF與模板文件T不相同,進(jìn)一步判斷數(shù)據(jù)文件Fi是否超過(guò)其最大容量值MaxSize :如果判定該數(shù)據(jù)文件Fi未超過(guò)其最大容量值MaxSize,則將LF. context存放至當(dāng)前的數(shù)據(jù)文件Fi中,保存該柵格小圖片LF在該數(shù)據(jù)文件Fi中的偏移LF. offset 且 LF. fno=i ;如果判定該數(shù)據(jù)文件Fi超過(guò)其最大容量值MaxSize,則關(guān)閉當(dāng)前的數(shù)據(jù)文件Fi,i=i+l ;打開下一數(shù)據(jù)文件Fi,將LF. context存放至下一數(shù)據(jù)文件Fi中,并且保存該柵格小圖片LF在該數(shù)據(jù)文件Fi中的偏移LF. offset且LF. fno=i ;S14、判斷地圖目錄Root下是否還存在尚未被讀取的柵格小圖片,如果存在則重復(fù)執(zhí)行步驟S12 S13,否則關(guān)閉當(dāng)前的數(shù)據(jù)文件Fi以及中間文件Fdb。本發(fā)明針對(duì)大量相同的圖片(諸如空白圖片),設(shè)置模板文件,在將海量柵格小圖片打包至數(shù)據(jù)文件的過(guò)程中,首先將柵格小圖片與該模板文件進(jìn)行比較,如果相同則不再重復(fù)存儲(chǔ),因此進(jìn)一步減小了磁盤空間的占有量。在所述步驟S12中深度遍歷該地圖目錄Root時(shí),按照名稱大小順序依次讀取各柵格小圖片。由于柵格小圖片的名稱大小反映了柵格小圖片在空間上的臨近關(guān)系,當(dāng)加載某一柵格小圖片時(shí)會(huì)將與其臨近的圖片一起加載,從而可以減少磁盤10的訪問(wèn)次數(shù),提高服務(wù)性能。所述步驟S2由以下步驟組成S20、初始化路徑哈希表Hash_Path、文件名哈希表Hash_Name和數(shù)組FArray=H,其中該路徑哈希表Hash_Path中路徑的標(biāo)號(hào)Path_ID初始化為O,該文件名哈希表Hash_Name中文件名的標(biāo)號(hào)Name_ID初始化為O ;S21、在地圖目錄Root中的柵格小圖片打包至數(shù)據(jù)文件的過(guò)程中,依次將各柵格小圖片LF= (path, size, fno, offset)寫入Fdb中間文件,在建立索引文件的過(guò)程中打開該中間文件Fdb,其中LF. path表示柵格小圖片LF的存儲(chǔ)路徑,LF. size表示柵格小圖片LF的大小,LF. fno表示柵格小圖片LF所在數(shù)據(jù)文件Fi的編號(hào),LF. offset表示柵格小圖片LF的在數(shù)據(jù)文件Fi中的偏移;S22、從該中間文件Fdb中讀取一個(gè)柵格小圖片LF的存儲(chǔ)路徑LF. path,并將LF. path分解為路徑部分PATH和文件名部分NAME ;S23、按照柵格小圖片的讀取順序?qū)υ摉鸥裥D片的路徑部分PATH和文件名部分NAME分別進(jìn)行標(biāo)號(hào),其中路徑部分PATH的標(biāo)號(hào)記為PID,文件名部分NAME的標(biāo)號(hào)記為NID,如果路徑哈希表Hash_Path中不存在PATH,則PID=PID+1,并將(PATH,PID)插入Hash_Path中;如果文件名哈希表Hash_Name中不存在NAME,則NID=NID+1,并將(NAME,NID)插入該文件名哈希表Hash_Name中; S24、確定該柵格小圖片的標(biāo)號(hào)FID=PID〈〈16|NID,并且將(FID, LF. size, LF.fno, LF. offset)存儲(chǔ)至數(shù)組FArray {}末尾,其中〈〈表示左移運(yùn)算符,I表示或運(yùn)算符;S25、重復(fù)執(zhí)行步驟S22 S24,直至該中間文件Fdb中所有柵格小圖片讀取完成;S26、按照各柵格小圖片的標(biāo)號(hào)FID大小對(duì)該數(shù)組FArrayH進(jìn)行排序;S27、將該路徑哈希表Hash_Path、文件名哈希表Hash_Name以及數(shù)組FArrayH的內(nèi)容寫入索引文件中,建立索引文件。在建立索引文件的過(guò)程中,本發(fā)明采用路徑名與文件名分別壓縮編碼的方式,減少索引所占的空間,達(dá)到了壓縮的目的,索引文件可一次性讀入內(nèi)存;并且利用索引查找柵格小圖片時(shí)不必訪問(wèn)磁盤,進(jìn)一步提高了查找效率。該索引文件通過(guò)加密算法進(jìn)行加密,提高了索引的安全性。所述步驟S3中根據(jù)客戶端請(qǐng)求的URL路徑以及索引文件,在數(shù)據(jù)文件中查找與該URL路徑對(duì)應(yīng)的柵格小圖片的存儲(chǔ)位置的步驟為根據(jù)客戶端請(qǐng)求的URL路徑構(gòu)造出待加載柵格小圖片的路徑部分PATH和文件名部分NAME,根據(jù)該路徑部分PATH和文件名部分NAME查找索引文件的路徑哈希表Hash_Path和文件名哈希表Hash_Name,確定該路徑部分PATH和文件名部分NAME的標(biāo)號(hào)PID、NID,從而確定待加載柵格小圖片的標(biāo)號(hào)FID=PID 16|NID ;根據(jù)待加載柵格小圖片的標(biāo)號(hào)FID查找索引文件的數(shù)組FArray {},確定待加載柵格小圖片的相關(guān)信息(FID, LF. size, LF. fno, LF. offset);根據(jù)待加載柵格小圖片的相關(guān)信息LF. fno和LF. offset,確定待加載柵格小圖片所在的數(shù)據(jù)文件Fi以及在該數(shù)據(jù)文件Fi中的偏移,從而確定與該URL路徑對(duì)應(yīng)的柵格小圖片的存儲(chǔ)位置。所述步驟S3中采用數(shù)據(jù)緩存機(jī)制讀取該柵格小圖片,在讀取該柵格小圖片時(shí),首先查找緩沖池的緩沖塊中是否緩存有該柵格小圖片,如果緩沖塊中緩存有該柵格小圖片則直接從對(duì)應(yīng)的緩沖塊中讀取該柵格小圖片,否則從磁盤的數(shù)據(jù)文件中查找到該柵格小圖片并將該柵格小圖片緩存至緩沖塊中,并從該緩沖塊中讀取該柵格小圖片。本發(fā)明采用數(shù)據(jù)緩存機(jī)制,使用緩存塊,一次性加載相鄰的小圖片,對(duì)即將訪問(wèn)的小圖片進(jìn)行預(yù)加載,減少了磁盤訪問(wèn)次數(shù),提高了訪問(wèn)效率。該海量柵格瓦塊地圖發(fā)布方法還包括增量發(fā)布的步驟對(duì)增加的地圖單獨(dú)切割成多個(gè)柵格小圖片,打包至一個(gè)單獨(dú)的數(shù)據(jù)文件中,并建立同一索引文件。該海量柵格瓦塊地圖發(fā)布方法還包括局部更新的步驟對(duì)更新的地圖重新切割成多個(gè)柵格小圖片,打包至一個(gè)單獨(dú)的數(shù)據(jù)文件中,并建立同一索引文件。綜上所述,由于采用了上述技術(shù)方案,本發(fā)明的有益效果是I、本發(fā)明將海量柵格小圖片打包至數(shù)據(jù)文件中,減小了磁盤空間的占有量;在根據(jù)URL路徑查找對(duì)應(yīng)柵格小圖片時(shí),不是依賴于文件系統(tǒng)逐一查找,而是通過(guò)索引的形式查找,提高了查找效率;此外,該索引文件存儲(chǔ)在內(nèi)存中,利用索引文件查找柵格小圖片時(shí)不必訪問(wèn)磁盤,進(jìn)一步提高了查找效率;
      2、本發(fā)明針對(duì)大量相同的圖片(諸如空白圖片),設(shè)置模板文件,在將海量柵格小圖片打包至數(shù)據(jù)文件的過(guò)程中,首先將柵格小圖片與該模板文件進(jìn)行比較,如果相同則不再重復(fù)存儲(chǔ),因此進(jìn)一步減小了磁盤空間的占有量;3、深度遍歷該地圖目錄Root時(shí),按照名稱大小順序依次讀取各柵格小圖片,由于柵格小圖片的名稱大小反映了柵格小圖片在空間上的臨近關(guān)系,當(dāng)加載某一柵格小圖片時(shí)會(huì)將與其臨近的圖片一起加載,從而可以減少磁盤IO的訪問(wèn)次數(shù),提高服務(wù)性能;4、在建立索引文件的過(guò)程中,本發(fā)明采用路徑和文件名壓縮編碼的方式減少了相同路徑與同名文件的數(shù)量,達(dá)到了壓縮的目的,減少了內(nèi)存使用量;5、索引文件通過(guò)加密算法進(jìn)行加密,提高了索引的安全性;6、本發(fā)明采用數(shù)據(jù)緩存機(jī)制讀取該柵格小圖片,減少了磁盤訪問(wèn)次數(shù),提高了訪問(wèn)效率;7、本發(fā)明支持增量發(fā)布和局部更新,避免了全范圍內(nèi)地圖的重新切割,減少了工作量。本發(fā)明的附加方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過(guò)本發(fā)明的實(shí)踐了解到。


      本發(fā)明的上述和/或附加的方面和優(yōu)點(diǎn)從結(jié)合下面附圖對(duì)實(shí)施例的描述中將變得明顯和容易理解,其中圖I是柵格小圖片的地圖目錄Root的第一示意圖;圖2是柵格小圖片的地圖目錄Root的第二示意圖;圖3是本發(fā)明的工作流程圖。
      具體實(shí)施例方式下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過(guò)參考附圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對(duì)本發(fā)明的限制。該海量柵格瓦塊地圖發(fā)布方法由以下步驟組成,如圖3所示SI、將矢量地圖切割成多個(gè)柵格小圖片并存儲(chǔ)于地圖目錄Root中,遍歷該地圖目錄Root中的柵格小圖片并打包至數(shù)據(jù)文件中。本發(fā)明將海量柵格小圖片打包至數(shù)據(jù)文件中,減小了磁盤空間的占有量。以ESRI的ArcMap Server的切圖為例,說(shuō)明柵格小圖片的地圖目錄Root,如圖I 2所示Layers目錄下包含“_alllayers”目錄和兩個(gè)配置文件“conf. cdi”、“conf.xmFWalllayers”目錄下包括所有層的目錄,以“LXX”為層目錄名,編號(hào)從00開始,“L00”表示最小比例的地圖目錄,“L01”表示第二層次的地圖目錄,以此類推。在某一個(gè)層的地圖目錄中,包含了行地圖目錄,名稱以字母‘R’開始,后跟8為十六進(jìn)制數(shù)字,表示行編號(hào)。此外,在行地圖目錄中,包含了該行的所有列圖片,圖片名稱以字母C開始,后跟8位十六進(jìn)制以及圖片文件擴(kuò)展名(諸如png、jpg等)。具體地,該過(guò)程由以下步驟組成
      第一步、將矢量地圖切割成多個(gè)柵格小圖片并存儲(chǔ)于地圖目錄Root中,針對(duì)大量?jī)?nèi)容相同的柵格小圖片設(shè)置模板文件T= (path, size, context, fno, offset),其中T. path表示模板文件T的存儲(chǔ)路徑,T. size表示模板文件T的大小,T. context表示模板文件T的內(nèi)容,T. fno表示模板文件T所在數(shù)據(jù)文件Fi的編號(hào),T. offset表示模板文件T在數(shù)據(jù)文件Fi中的偏移,初始狀態(tài)下T. fno=T. Offset=O且i為整數(shù)。第二步、設(shè)置i=0,打開數(shù)據(jù)文件Fi,讀取模板文件T并將該模板文件T= (path,size, context, fno, offset)寫入數(shù)據(jù)文件Fi中,保存該模板文件T在數(shù)據(jù)文件Fi中的偏移 T. offset 且 T. fno=i。第三步、深度遍歷該地圖目錄Root,依次讀取該地圖目錄Root下各柵格小圖片LF= (path, size, context, fno, offset),其中 LF. path 表示柵格小圖片 LF 的存儲(chǔ)路徑,LF. size表示柵格小圖片LF的大小,LF. context表示柵格小圖片LF的內(nèi)容,LF. fno表示柵格小圖片LF所在數(shù)據(jù)文件Fi的編號(hào),LF. offset表示柵格小圖片LF在數(shù)據(jù)文件Fi中的偏移,在初始狀態(tài)下LF. fno=LF. offset=0。在深度遍歷該地圖目錄Root時(shí),按照名稱大小順序依次讀取各柵格小圖片。第四步、將各柵格小圖片LF與該模板文件T進(jìn)行比較在LF. size=T. size且LF. context=T. context時(shí)表不該柵格小圖片LF與模板文件T相同,不再將該柵格小圖片LF重復(fù)寫入該數(shù)據(jù)文件Fi中,并且LF. Offset=T. offset,LF. fno=T. fno ;否則表示該柵格小圖片LF與模板文件T不相同,進(jìn)一步判斷數(shù)據(jù)文件Fi是否超過(guò)其最大容量值MaxSize :如果判定該數(shù)據(jù)文件Fi未超過(guò)其最大容量值MaxSize,則將LF. context存放至當(dāng)前的數(shù)據(jù)文件Fi中,保存該柵格小圖片LF在該數(shù)據(jù)文件Fi中的偏移LF. offset 且 LF. fno=i, MaxSize ^ 4G ;如果判定該數(shù)據(jù)文件Fi超過(guò)其最大容量值MaxSize,則關(guān)閉當(dāng)前的數(shù)據(jù)文件Fi,i=i+Ι,打開下一數(shù)據(jù)文件Fi,將LF. context存放至下一數(shù)據(jù)文件Fi中,并且保存該柵格小圖片LF在該數(shù)據(jù)文件Fi中的偏移LF. offset且LF. fno=i+l ;第五步、判斷地圖目錄Root下是否還存在尚未被讀取的柵格小圖片,如果存在則重復(fù)執(zhí)行第三至第四步,否則關(guān)閉當(dāng)前的數(shù)據(jù)文件Fi,結(jié)束打包操作。由此可見,本發(fā)明針對(duì)大量相同的圖片(諸如空白圖片),設(shè)置模板文件,在將海量柵格小圖片打包至數(shù)據(jù)文件的過(guò)程中,首先將柵格小圖片與該模板文件進(jìn)行比較,如果相同則不再重復(fù)存儲(chǔ),因此進(jìn)一步減小了磁盤空間的占有量。此外,深度遍歷該地圖目錄Root時(shí),按照名稱大小順序依次讀取各柵格小圖片,由于柵格小圖片的名稱大小反映了柵格小圖片在空間上的臨近關(guān)系,當(dāng)加載某一柵格小圖片時(shí)會(huì)將與其臨近的圖片一起加載,從而可以減少磁盤IO的訪問(wèn)次數(shù),提高服務(wù)性能。 S2、建立索引文件并采用路徑名與文件名分別壓縮編碼的方式,減少磁盤內(nèi)存占用量,可一次性讀入內(nèi)存中,該索引文件用于表示URL路徑與數(shù)據(jù)文件中對(duì)應(yīng)柵格小圖片存儲(chǔ)位置的索引關(guān)系。在根據(jù)URL路徑查找對(duì)應(yīng)柵格小圖片時(shí),不是依賴于文件系統(tǒng)逐一查找,而是通過(guò)索引的形式查找,提高了查找效率。此外,該索引文件存儲(chǔ)在內(nèi)存中,利用索引文件查找柵格小圖片時(shí)不必訪問(wèn)磁盤,進(jìn)一步提高了查找效率。具體地,該過(guò)程由以下步驟組成第一步、初始化路徑哈希表Hash_Path、文件名哈希表Hash_Name和數(shù)組·FArray= {},其中該路徑哈希表Hash_Path中路徑的標(biāo)號(hào)Path_ID初始化為O,該文件名哈希表Hash_Name中文件名的標(biāo)號(hào)Name_ID初始化為O。第二步,在地圖目錄Root中的柵格小圖片打包至數(shù)據(jù)文件過(guò)程中,依次將柵格小圖片LF=(path, size, fno, offset)寫入中間文件Fdb中,在建立索引文件的過(guò)程中打開該中間文件Fdb。第三步、從該中間文件Fdb中讀取一個(gè)柵格小圖片LF的存儲(chǔ)路徑信息LF. path,并將LF. path分解為路徑部分PATH和文件名部分NAME。第四步、按照柵格小圖片的讀取順序?qū)υ摉鸥裥D片的路徑部分PATH和文件名部分NAME分別進(jìn)行標(biāo)號(hào),其中路徑部分PATH的標(biāo)號(hào)記為PID,文件名部分NAME的標(biāo)號(hào)記為NID,并將(PATH,PID)插入該路徑哈希表Hash_Path中,將(NAME,NID)插入該文件名哈希表 Hash_Name 中。在本發(fā)明的實(shí)施例中,從O開始沒依次加I,分別對(duì)各柵格小圖片的路徑部分PATH和文件名部分NAME分別進(jìn)行標(biāo)號(hào)判斷路徑哈希表Hash_Path中是否存在PATH :如果不存在,則該柵格小圖片的路徑部分PATH的標(biāo)號(hào)PID=PID+1,并將(PATH,PID)插入該路徑哈希表Hash_Path中;判斷該文件名哈希表Hash_Name中是否存在NAME :如果不存在,則該柵格小圖片的文件名部分NAME的標(biāo)號(hào)NID=NID+1,并將(NAME,NID)插入該文件名哈希表Hash_Name中。第五步、確定該柵格小圖片的標(biāo)號(hào)FID=PID〈〈16|NID,并且將(FID, LF. size, LF.fno, LF. offset)存儲(chǔ)至數(shù)組FArray {}末尾,其中〈〈表示左移運(yùn)算符,I表示或運(yùn)算符。第六步、重復(fù)執(zhí)行第三步至第五步,直至該中間文件Fdb中所有柵格小圖片讀取完成。第七步、按照各柵格小圖片的標(biāo)號(hào)FID大小對(duì)該數(shù)組FArrayH進(jìn)行排序。第八步、將該路徑哈希表Hash_Path、文件名哈希表Hash_Name以及數(shù)組FArrayH的內(nèi)容寫入索引文件中。此外,該索引文件還可以采用加密算法進(jìn)行加密,從而提高索引的安全性。由此可見,在建立索弓I文件的過(guò)程中,本發(fā)明采用路徑和文件名壓縮編碼的方式減少了相同路徑與同名文件的數(shù)量,達(dá)到了壓縮的目的,減少了內(nèi)存使用量。S3、根據(jù)客戶端請(qǐng)求的URL路徑以及索引文件,在數(shù)據(jù)文件中查找與該URL路徑對(duì)應(yīng)的柵格小圖片的存儲(chǔ)位置,讀取該柵格小圖片并發(fā)送給客戶端。具體地,根據(jù)客戶端請(qǐng)求的URL路徑構(gòu)造出待加載柵格小圖片的路徑部分PATH和文件名部分NAME,根據(jù)該路徑部分PATH和文件名部分NAME查找索引文件的路徑哈希表Hash_Path和文件名哈希表Hash_Name,確定該路徑部分PATH和文件名部分NAME的標(biāo)號(hào)PID、NID,從而確定待加載柵格小圖片的標(biāo)號(hào)FID=PID〈〈16|NID ;根據(jù)待加載柵格小圖片的標(biāo)號(hào)FID查找索引文件的數(shù)組FArray {},確定待加載柵格小圖片的相關(guān)信息(FID, LF. size, LF. fno, LF. offset); 根據(jù)待加載柵格小圖片的相關(guān)信息LF. fno和LF. offset,確定待加載柵格小圖片所在的數(shù)據(jù)文件Fi以及在該數(shù)據(jù)文件Fi中的偏移,從而確定與該URL路徑對(duì)應(yīng)的柵格小圖片的存儲(chǔ)位置。為了減少磁盤訪問(wèn)次數(shù),提高訪問(wèn)效率,本發(fā)明提出了數(shù)據(jù)緩存機(jī)制,對(duì)最近讀取的柵格小圖片以緩沖塊的形式緩存在緩沖池中。在讀取該柵格小圖片時(shí),首先查找緩沖池的緩沖塊中是否緩存有該柵格小圖片,如果緩沖塊中緩存有該柵格小圖片則直接從對(duì)應(yīng)的緩沖塊中讀取該柵格小圖片,否則從磁盤的數(shù)據(jù)文件中查找到該柵格小圖片并將該柵格小圖片緩存至緩沖塊中,并從該緩沖塊中讀取該柵格小圖片。最近被訪問(wèn)的緩沖塊被移動(dòng)至緩沖塊隊(duì)列的頭部。當(dāng)緩存池空間超過(guò)一定數(shù)量,就需要從其中刪除一部分緩存塊,以釋放資源,刪除方法從緩存隊(duì)列的末尾開始向前搜索,如果某一個(gè)緩存塊的引用計(jì)數(shù)為0,就可以刪除,這樣可以保證最近訪問(wèn)的緩存塊最后被刪除。本發(fā)明還支持增量發(fā)布和局部更新,避免了全范圍內(nèi)地圖的重新切割,減少了工作量。增量發(fā)布的步驟為對(duì)增加的地圖單獨(dú)切割成多個(gè)柵格小圖片,打包至一個(gè)單獨(dú)的數(shù)據(jù)文件中,并建立同一索引文件;局部更新的步驟為對(duì)更新的地圖重新切割成多個(gè)柵格小圖片,打包至一個(gè)單獨(dú)的數(shù)據(jù)文件中,并建立同一索引文件。在本說(shuō)明書的描述中,參考術(shù)語(yǔ)“一個(gè)實(shí)施例”、“一些實(shí)施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實(shí)施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)包含于本發(fā)明的至少一個(gè)實(shí)施例或示例中。在本說(shuō)明書中,對(duì)上述術(shù)語(yǔ)的示意性表述不一定指的是相同的實(shí)施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)可以在任何的一個(gè)或多個(gè)實(shí)施例或示例中以合適的方式結(jié)合。盡管已經(jīng)示出和描述了本發(fā)明的實(shí)施例,本領(lǐng)域的普通技術(shù)人員可以理解在不脫離本發(fā)明的原理和宗旨的情況下可以對(duì)這些實(shí)施例進(jìn)行多種變化、修改、替換和變型,本發(fā)明的范圍由權(quán)利要求及其等同物限定。
      權(quán)利要求
      1.一種海量柵格瓦塊地圖發(fā)布方法,其特征在于包括以下步驟 51、將矢量地圖切割成多個(gè)柵格小圖片并存儲(chǔ)于地圖目錄Root中,遍歷該地圖目錄Root中的柵格小圖片并打包至數(shù)據(jù)文件中; 52、建立索引文件,該索引文件用于表示URL路徑與數(shù)據(jù)文件中對(duì)應(yīng)柵格小圖片存儲(chǔ)位置的索引關(guān)系; 53、根據(jù)客戶端請(qǐng)求的URL路徑以及索引文件,在數(shù)據(jù)文件中查找與該URL路徑對(duì)應(yīng)的柵格小圖片的存儲(chǔ)位置,讀取該柵格小圖片并發(fā)送給客戶端。
      2.根據(jù)權(quán)利要求I所述的海量柵格瓦塊地圖發(fā)布方法,其特征在于所述步驟SI由以下步驟組成 510、將矢量地圖切割成多個(gè)柵格小圖片并存儲(chǔ)于地圖目錄Root中,針對(duì)大量?jī)?nèi)容相同的柵格小圖片設(shè)置模板文件T= (path, size, context, fno, offset),其中T. path表示模板文件T的存儲(chǔ)路徑,T. size表示模板文件T的大小,T. context表示模板文件T的內(nèi)容,T. fno表示模板文件T所在數(shù)據(jù)文件Fi的編號(hào),T. offset表示模板文件T在數(shù)據(jù)文件Fi中的偏移,初始狀態(tài)下T. fno=T. Offset=O且i為整數(shù); 511、設(shè)置i=0,打開數(shù)據(jù)文件Fi,讀取模板文件T并將該模板文件T=(path,size,context, fno, offset)寫入數(shù)據(jù)文件Fi中,保存該模板文件T在數(shù)據(jù)文件Fi中的偏移T. offset 且 T. fno=i ; 512、深度遍歷該地圖目錄Root,依次讀取該地圖目錄Root下各柵格小圖片LF=(path,size, context, fno, offset),其中LF. path表示柵格小圖片LF的存儲(chǔ)路徑,LF. size表示柵格小圖片LF的大小,LF. context表示柵格小圖片LF的內(nèi)容,LF. fno表示柵格小圖片LF所在數(shù)據(jù)文件Fi的編號(hào),LF. offset表示柵格小圖片LF在數(shù)據(jù)文件Fi中的偏移,在初始狀態(tài)下 LF. fno=LF. offset=0 ; 513、將各柵格小圖片LF與該模板文件T進(jìn)行比較 在LF. size=T. size且LF. context=T. context時(shí)表不該柵格小圖片LF與模板文件T相同,不再將該柵格小圖片LF重復(fù)寫入該數(shù)據(jù)文件Fi中,并且LF. Offset=T. offset,LF. fno=T. fno=i ; 否則表示該柵格小圖片LF與模板文件T不相同,進(jìn)一步判斷數(shù)據(jù)文件Fi是否超過(guò)其最大容量值MaxSize :如果判定該數(shù)據(jù)文件Fi未超過(guò)其最大容量值MaxSize,則將LF. context存放至當(dāng)前的數(shù)據(jù)文件Fi中,保存該柵格小圖片LF在該數(shù)據(jù)文件Fi中的偏移LF. offset 且 LF. fno=i ; 如果判定該數(shù)據(jù)文件Fi超過(guò)其最大容量值MaxSize,則關(guān)閉當(dāng)前的數(shù)據(jù)文件Fi,i=i+l,打開下一數(shù)據(jù)文件Fi,將LF. context存放至下一數(shù)據(jù)文件Fi中,并且保存該柵格小圖片LF在該數(shù)據(jù)文件Fi中的偏移LF. offset且LF. fno=i+l ; 514、判斷地圖目錄Root下是否還存在尚未被讀取的柵格小圖片,如果存在則重復(fù)執(zhí)行步驟S12 S13,否則關(guān)閉當(dāng)前的數(shù)據(jù)文件Fi以及中間文件Fdb。
      3.根據(jù)權(quán)利要求2所述的海量柵格瓦塊地圖發(fā)布方法,其特征在于在所述步驟S12中深度遍歷該地圖目錄Root時(shí),按照名稱大小順序依次讀取各柵格小圖片。
      4.根據(jù)權(quán)利要求I所述的海量柵格瓦塊地圖發(fā)布方法,其特征在于所述步驟S2由以下步驟組成S20、初始化路徑哈希表Hash_Path、文件名哈希表Hash_Name和數(shù)組FArray=O,其中該路徑哈希表HasH_Path中路徑的標(biāo)號(hào)Path_ID初始化為O,該文件名哈希表Hash_Name中文件名的標(biāo)號(hào)Name_ID初始化為O ; S21、在地圖目錄Root中的柵格小圖片打包至數(shù)據(jù)文件的過(guò)程中,依次將各柵格小圖片LF= (path, size, fno, offset)寫入中間文件Fdb中,在建立索引文件的過(guò)程中打開該中間文件Fdb,其中LF. path表示柵格小圖片LF的存儲(chǔ)路徑,LF. size表示柵格小圖片LF的大小,LF. fno表示柵格小圖片LF所在數(shù)據(jù)文件Fi的編號(hào),LF. offset表示柵格小圖片LF的在數(shù)據(jù)文件Fi中的偏移; S22、從該中間文件Fdb中讀取一個(gè)柵格小圖片LF的存儲(chǔ)路徑LF.path,并將LF. path分解為路徑部分PATH和文件名部分NAME ; S23、按照柵格小圖片的讀取順序?qū)υ摉鸥裥D片的路徑部分PATH和文件名部分NAME分別進(jìn)行標(biāo)號(hào),其中路徑部分PATH的標(biāo)號(hào)記為PID,文件名部分NAME的標(biāo)號(hào)記為NID,并將(PATH, PID)插入該路徑哈希表Hash_Path中,將(NAME,NID)插入該文件名哈希表Hash_Name 中; S24、確定該柵格小圖片的標(biāo)號(hào)FID=PID 16| NID,并且將(FID, LF. size, LF. fno, LF.offset)存儲(chǔ)至數(shù)組FArray {}末尾,其中〈〈表示左移運(yùn)算符,I表示或運(yùn)算符; S25、重復(fù)執(zhí)行步驟S22 S24,直至該中間文件Fdb中所有柵格小圖片讀取完成; S26、按照各柵格小圖片的標(biāo)號(hào)FID大小對(duì)該數(shù)組FArrayH進(jìn)行排序; S27、將該路徑哈希表Hash_Path、文件名哈希表Hash_Name以及數(shù)組FArrayH的內(nèi)容寫入索引文件中,建立索引文件。
      5.根據(jù)權(quán)利要求I或4所述的海量柵格瓦塊地圖發(fā)布方法,其特征在于該索引文件通過(guò)加密算法進(jìn)行加密。
      6.根據(jù)權(quán)利要求4所述的海量柵格瓦塊地圖發(fā)布方法,其特征在于所述步驟S3中根據(jù)客戶端請(qǐng)求的URL路徑以及索引文件,在數(shù)據(jù)文件中查找與該URL路徑對(duì)應(yīng)的柵格小圖片的存儲(chǔ)位置的步驟為根據(jù)客戶端請(qǐng)求的URL路徑構(gòu)造出待加載柵格小圖片的路徑部分PATH和文件名部分NAME,根據(jù)該路徑部分PATH和文件名部分NAME查找索引文件的路徑哈希表Hash_Path和文件名哈希表Hash_Name,確定該路徑部分PATH和文件名部分NAME的標(biāo)號(hào)PID、NID,從而確定待加載柵格小圖片的標(biāo)號(hào)FID=PID〈〈16|NID ; 根據(jù)待加載柵格小圖片的標(biāo)號(hào)FID查找索引文件的數(shù)組FArray {},確定待加載柵格小圖片的相關(guān)信息(FID, LF. size, LF. fno, LF. offset); 根據(jù)待加載柵格小圖片的相關(guān)信息LF. fno和LF. offset,確定待加載柵格小圖片所在的數(shù)據(jù)文件Fi以及在該數(shù)據(jù)文件Fi中的偏移,從而確定與該URL路徑對(duì)應(yīng)的柵格小圖片的存儲(chǔ)位置。
      7.根據(jù)權(quán)利要求I所述的海量柵格瓦塊地圖發(fā)布方法,其特征在于所述步驟S3中采用數(shù)據(jù)緩存機(jī)制讀取該柵格小圖片,在讀取該柵格小圖片時(shí),首先查找緩沖池的緩沖塊中是否緩存有該柵格小圖片,如果緩沖塊中緩存有該柵格小圖片則直接從對(duì)應(yīng)的緩沖塊中讀取該柵格小圖片,否則從磁盤的數(shù)據(jù)文件中查找到該柵格小圖片并將該柵格小圖片緩存至緩沖塊中,并從該緩沖塊中讀取該柵格小圖片。
      8.根據(jù)權(quán)利要求I所述的海量柵格瓦塊地圖發(fā)布方法,其特征在于還包括增量發(fā)布的步驟對(duì)增加的地圖單獨(dú)切割成多個(gè)柵格小圖片,打包至一個(gè)單獨(dú)的數(shù)據(jù)文件中,并建立同一索引文件。
      9.根據(jù)權(quán)利要求I所述的海量柵格瓦塊地圖發(fā)布方法,其特征在于還包括局部更新的步驟對(duì)更新的地圖重新切割成多個(gè)柵格小圖片,打包至一個(gè)單獨(dú)的數(shù)據(jù)文件中,并建立同一索引文件。
      全文摘要
      本發(fā)明提出了一種海量柵格瓦塊地圖發(fā)布方法,屬于地圖發(fā)布領(lǐng)域。該方法包括以下步驟S1、將矢量地圖切割成多個(gè)柵格小圖片并存儲(chǔ)于地圖目錄Root中,遍歷該地圖目錄Root中的柵格小圖片并打包至數(shù)據(jù)文件中,由此減小了磁盤空間的占有量;S2、建立索引文件,該索引文件用于表示URL路徑與數(shù)據(jù)文件中對(duì)應(yīng)柵格小圖片存儲(chǔ)位置的索引關(guān)系;該索引文件使用路徑與文件名分別編碼的方法進(jìn)行壓縮存儲(chǔ),可一次性加載到內(nèi)存,利用索引文件查找柵格小圖片時(shí)不必訪問(wèn)磁盤,進(jìn)一步提高了查找效率;S3、根據(jù)客戶端請(qǐng)求的URL路徑以及索引文件,在數(shù)據(jù)文件中查找與該URL路徑對(duì)應(yīng)的柵格小圖片的存儲(chǔ)位置,讀取該柵格小圖片并發(fā)送給客戶端。
      文檔編號(hào)G06F17/30GK102902724SQ20121032583
      公開日2013年1月30日 申請(qǐng)日期2012年9月5日 優(yōu)先權(quán)日2012年9月5日
      發(fā)明者向澤君, 朱圣, 羅再謙, 龍川, 饒鳴, 汪明, 楊元, 李波, 羅勇 申請(qǐng)人:重慶市勘測(cè)院, 重慶數(shù)字城市科技有限公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1