一種三維gis快速加載空間數(shù)據(jù)的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計(jì)算機(jī)圖形學(xué)技術(shù)領(lǐng)域,具體涉及一種三維GIS快速加載空間數(shù)據(jù)的方法。
【背景技術(shù)】
[0002]目前,公知的三維GIS (Geographic Informat1n System,地理信息系統(tǒng))加載空間數(shù)據(jù)的方法是:首先將空間數(shù)據(jù)庫(kù)中存儲(chǔ)的空間數(shù)據(jù)進(jìn)行柵格化處理;然后,再將生成的柵格數(shù)據(jù)發(fā)布到服務(wù)器上;最后,客戶端直接讀取服務(wù)器上的柵格數(shù)據(jù)并加載到影像上。
[0003]該種方法存在的主要問(wèn)題為:由于柵格數(shù)據(jù)是靜態(tài)的事先處理好的數(shù)據(jù),柵格數(shù)據(jù)并不會(huì)實(shí)時(shí)的讀取空間數(shù)據(jù)庫(kù),其是以文件的形式發(fā)布到服務(wù)器中,因此,當(dāng)更新空間數(shù)據(jù)庫(kù)時(shí),并無(wú)法反映到柵格數(shù)據(jù)中,所以,當(dāng)更新空間數(shù)據(jù)庫(kù)時(shí),必須重新生成柵格化數(shù)據(jù)來(lái)替代原有的柵格化數(shù)據(jù),具有維護(hù)成本高的問(wèn)題。比如,當(dāng)在空間數(shù)據(jù)庫(kù)中新增、修改或刪除空間數(shù)據(jù)時(shí),均需要重新生成柵格數(shù)據(jù),因此,隨著空間數(shù)據(jù)量的增加和業(yè)務(wù)量的增多,此問(wèn)題更加突出。例如,在油田GIS領(lǐng)域,需要經(jīng)常更新空間數(shù)據(jù)庫(kù),比如:當(dāng)新鋪設(shè)油氣管線、新增采油井或者采油井報(bào)廢時(shí),均需要將這些井狀態(tài)變更的數(shù)據(jù)反映到相關(guān)的空間數(shù)據(jù)庫(kù)中,如果三維GIS采用傳統(tǒng)的空間數(shù)據(jù)柵格化處理方式,將大大增加維護(hù)成本。
[0004]因而,目前需要本領(lǐng)域技術(shù)人員迫切解決的一個(gè)技術(shù)問(wèn)題為:如何找到一種實(shí)時(shí)的快速加載空間數(shù)據(jù)的方法,從而有效的解決目前基于柵格數(shù)據(jù)加載空間數(shù)據(jù)方法中存在的維護(hù)成本高的問(wèn)題。
【發(fā)明內(nèi)容】
[0005]針對(duì)現(xiàn)有技術(shù)存在的缺陷,本發(fā)明提供一種三維GIS快速加載空間數(shù)據(jù)的方法,可有效解決上述問(wèn)題。
[0006]本發(fā)明采用的技術(shù)方案如下:
[0007]本發(fā)明提供一種三維GIS快速加載空間數(shù)據(jù)的方法,包括以下步驟:
[0008]SI,當(dāng)客戶端需要加載并顯示與指定數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)的空間數(shù)據(jù)時(shí),所述客戶端首先讀取本地緩存,判斷本地緩存是否存在與所述指定數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)的緩存文件,如果不存在,則執(zhí)行S2-S13 ;如果存在,則執(zhí)行S14 ;
[0009]S2,所述客戶端向服務(wù)端發(fā)送獲取與所述指定數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)的空間數(shù)據(jù)的請(qǐng)求消息;
[0010]S3,所述服務(wù)端讀取本地緩存,判斷緩存中是否存在與所述指定數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)的特征類集合文件;如果不存在,則執(zhí)行S4-S7 ;如果存在,則執(zhí)行S8 ;
[0011]S4,所述服務(wù)端基于所述指定數(shù)據(jù)節(jié)點(diǎn)查詢空間數(shù)據(jù)庫(kù),得到由η個(gè)空間數(shù)據(jù)組成的結(jié)果集;其中,η為自然數(shù);
[0012]S5,所述服務(wù)端構(gòu)建與所述結(jié)果集中每個(gè)所述空間數(shù)據(jù)對(duì)應(yīng)的特征類,所述特征類存儲(chǔ)所述空間數(shù)據(jù)的空間坐標(biāo)以及地形數(shù)據(jù)的對(duì)應(yīng)關(guān)系;
[0013]S6,所述服務(wù)端將所述結(jié)果集中每個(gè)所述空間數(shù)據(jù)對(duì)應(yīng)的特征類進(jìn)行合并,生成由η個(gè)特征類組成的特征類集合;
[0014]S7,所述服務(wù)端將所述特征類集合序列化為特征類集合文件,并緩存所述特征類集合文件;然后,所述服務(wù)端從緩存中將所述特征類集合文件進(jìn)行反序列化處理,得到特征類集合,并返回給所述客戶端;然后執(zhí)行Sll ;
[0015]S8,所述服務(wù)端判斷緩存中的所述特征類集合文件是否已過(guò)期,如果未過(guò)期,則執(zhí)行S9;如果已過(guò)期,則執(zhí)行S10;
[0016]S9,所述服務(wù)端直接從所述緩存中反序列化所述特征類集合文件,得到特征類集合,并將所述特征類集合返回給所述客戶端;然后執(zhí)行Sll ;
[0017]S10,所述服務(wù)端按步驟S4-S6的步驟獲得最新的特征類集合文件,并將所獲得的最新的特征類集合文件更新所述緩存中存儲(chǔ)的已過(guò)期的特征類集合文件,然后,將最新的特征類集合返回給所述客戶端;然后執(zhí)行Sll ;
[0018]S11,所述客戶端解析接收到的所述特征類集合,得到η個(gè)特征類;然后,所述客戶端為每個(gè)特征類構(gòu)建一個(gè)屬性為空的渲染對(duì)象,并將所構(gòu)建的渲染對(duì)象添加到渲染集合中;
[0019]S12,所述客戶端遍歷所述渲染集合中的每個(gè)渲染對(duì)象,異步給各個(gè)所述渲染對(duì)象的屬性賦值;
[0020]S13,渲染集合中的所有渲染對(duì)象的屬性均賦值后,所述客戶端通過(guò)序列化技術(shù),將所述渲染集合生成一個(gè)緩存文件并保存至緩存中;然后,所述客戶端采用反序列化方式加載所述緩存文件,并結(jié)束流程;
[0021]S14,所述客戶端判斷與所述指定數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)的緩存文件是否過(guò)期,如果未過(guò)期,則執(zhí)行S15 ;如果已過(guò)期,則執(zhí)行S16 ;
[0022]S15,所述客戶端采用反序列化方式加載所述緩存文件,并結(jié)束流程;
[0023]S16,所述客戶端按照S2-S13的步驟,獲得最新的緩存文件,并用所述最新的緩存文件更新所述緩存中存儲(chǔ)的已過(guò)期的緩存文件,然后,采用反序列化方式加載更新后的緩存文件,并結(jié)束流程。
[0024]優(yōu)選的,S4具體為:
[0025]所述服務(wù)端通過(guò)OraclelIg執(zhí)行預(yù)先定制的sql查詢語(yǔ)句,查詢所述空間數(shù)據(jù)庫(kù)。
[0026]優(yōu)選的,Sll中,所述客戶端為每個(gè)特征類構(gòu)建一個(gè)屬性為空的渲染對(duì)象,具體為:
[0027]所述客戶端判斷每個(gè)特征類的坐標(biāo)類型;然后,所述客戶端根據(jù)所述特征類的坐標(biāo)類型,創(chuàng)建相應(yīng)的空的渲染對(duì)象。
[0028]優(yōu)選的,所述特征類的坐標(biāo)類型包括:點(diǎn)、線和面三種坐標(biāo)類型。
[0029]優(yōu)選的,S12中,所述客戶端給所述渲染對(duì)象的屬性賦值,具體為:
[0030]所述客戶端將解析得到的包含空間坐標(biāo)和地形數(shù)據(jù)的特征類、以及預(yù)先定制的樣式信息賦給渲染對(duì)象的屬性,使所述渲染對(duì)象的屬性非空,由此得到賦值后的渲染對(duì)象。
[0031]本發(fā)明的有益效果如下:
[0032]本發(fā)明提供的三維GIS快速加載空間數(shù)據(jù)的方法,采用多種技術(shù)手段,全面提高了空間數(shù)據(jù)加載速率,更好地滿足空間數(shù)據(jù)實(shí)時(shí)顯示的需求;還有效降低了空間數(shù)據(jù)的維護(hù)成本。
【附圖說(shuō)明】
[0033]圖1為本發(fā)明提供的三維GIS快速加載空間數(shù)據(jù)的方法流程示意圖。
【具體實(shí)施方式】
[0034]以下結(jié)合附圖對(duì)本發(fā)明進(jìn)行詳細(xì)說(shuō)明:
[0035]如圖1所示,本發(fā)明提供一種三維GIS快速加載空間數(shù)據(jù)的方法,包括以下步驟:
[0036]SI,當(dāng)客戶端需要加載并顯示與指定數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)的空間數(shù)據(jù)時(shí),所述客戶端首先讀取本地緩存,判斷本地緩存是否存在與所述指定數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)的緩存文件,如果不存在,則執(zhí)行S2-S13 ;如果存在,則執(zhí)行S14 ;
[0037]S2,所述客戶端向服務(wù)端發(fā)送獲取與所述指定數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)的空間數(shù)據(jù)的請(qǐng)求消息;
[0038]S3,所述服務(wù)端讀取本地緩存,判斷緩存中是否存在與所述指定數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)的特征類集合文件;如果不存在,則執(zhí)行S4-S7 ;如果存在,則執(zhí)行S8 ;
[0039]S4,所述服務(wù)端基于所述指定數(shù)據(jù)節(jié)點(diǎn)查詢空間數(shù)據(jù)庫(kù),得到由η個(gè)空間數(shù)據(jù)組成的結(jié)果集;其中,η為自然數(shù);
[0040]本步驟具體可以為:服務(wù)端通過(guò)Oraclellg執(zhí)行預(yù)先定制的sql查詢語(yǔ)句,查詢所述空間數(shù)據(jù)庫(kù),從而得到由η個(gè)空間數(shù)據(jù)組成的結(jié)果集。
[0041]S5,所述服務(wù)端構(gòu)建與所述結(jié)果集中每個(gè)所述空間數(shù)據(jù)對(duì)應(yīng)的特征類,所述特征類存儲(chǔ)所述空間數(shù)據(jù)的空間坐標(biāo)以及地形數(shù)據(jù)的對(duì)應(yīng)關(guān)系;
[0042]S6,所述服務(wù)端將所述結(jié)果集中每個(gè)所述空間數(shù)據(jù)對(duì)應(yīng)的特征類進(jìn)行合并,生成由η個(gè)特征類組成的特征類集合;
[0043]本發(fā)明中,特征類的原理跟哈希表類似,即:通過(guò)某個(gè)特定的鍵保存任意類型的值。在sql查詢語(yǔ)句執(zhí)行后的結(jié)果集中,每條空間數(shù)據(jù)構(gòu)建一個(gè)特征類,此特征類保存這條空間數(shù)據(jù)的字段和相對(duì)應(yīng)的值,即:結(jié)果集包含的空間數(shù)據(jù)的數(shù)量與特征類的數(shù)量相同。特征類集合是指通過(guò)結(jié)果集構(gòu)建的所有特征類的集合。構(gòu)建特征類的主要目的為:在包括二維和三維的空間客戶端中能夠復(fù)用特征類,實(shí)現(xiàn)一次查詢多次應(yīng)用的作用,而不需要反復(fù)查詢,從而提高空間數(shù)據(jù)加載效率。
[0044]S7,所述服務(wù)端將所述特征類集合序列化為特征類集合文件,并緩存所述特征類集合文件;然后,所述服務(wù)端從緩存中將所述特征類集合文件進(jìn)行反序列化處理,得到特征類集合,并返回給所述客戶端;然后執(zhí)行Sll ;
[0045]此處,服務(wù)端采用序列化為特征類集合文件的方式,即:以自定義文件的方式保存到本地緩存。優(yōu)點(diǎn)為:當(dāng)服務(wù)端需要再次讀取該特征類集合時(shí),直接對(duì)所述特征類集合文件進(jìn)行反序列化處理即可,從而提高加載速度。
[0046]S8,所述服務(wù)端判斷緩存中的所述特征類集合文件是否已過(guò)期,如果未過(guò)期,則執(zhí)行S9;如果已過(guò)期,則執(zhí)行S10;
[0047]判斷特征類集合文件是否過(guò)期的具體方法為:通過(guò)預(yù)先定制的緩存更新時(shí)間字段與緩存文件創(chuàng)建時(shí)間進(jìn)行對(duì)比,從而判斷是否過(guò)期。
[0048]S9,所述服務(wù)端直接從所述緩存中反序列化所述特征類集合文件,得到特征類集合,并