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