- 相關(guān)推薦
Oracle數(shù)據(jù)倉(cāng)庫(kù)分層管理器解決方案
隨著Oracle技術(shù)的成熟,尤其是8.15本版后Oracle Spatial的出現(xiàn),數(shù)據(jù)倉(cāng)庫(kù)在海量數(shù)據(jù)存儲(chǔ)、分析和表達(dá)方面有著無(wú)可比擬的優(yōu)勢(shì)。同時(shí),由于信息量的巨大,傳統(tǒng)的數(shù)據(jù)存儲(chǔ)和顯示方式在大范圍數(shù)據(jù)快速瀏覽方面顯得力不從心,這樣有必要改變空間數(shù)據(jù)的存儲(chǔ)方式,加載需要的空間數(shù)據(jù)部分,避免不必要數(shù)據(jù)的反復(fù)加載和卸載。
1、分層管理器架構(gòu)
分層管理器是實(shí)現(xiàn)大范圍數(shù)據(jù)的快速瀏覽的關(guān)鍵部分,它控制了逐層細(xì)化表的結(jié)構(gòu)和元數(shù)據(jù)的定義和賦值,定義了組件表中的關(guān)鍵信息,給出了空間數(shù)據(jù)的來(lái)源、數(shù)據(jù)挖掘規(guī)則、圖層加載范圍和圖形編輯、輸出和保存。分層管理器有兩部分組成,分別為:
a) 一組存儲(chǔ)于Oracle數(shù)據(jù)倉(cāng)庫(kù)中的空間數(shù)據(jù)表,用于逐層細(xì)化圖層中的每個(gè)詳細(xì)信息層,這些表稱為組件表;
b) 一個(gè)空表,包含該表的結(jié)構(gòu)定義和描述組件表的特殊元數(shù)據(jù),該表稱為逐層細(xì)化表。任何逐層細(xì)化應(yīng)用程序均需要逐層細(xì)化表,從中可以了解逐層細(xì)化圖層中各層的層次關(guān)鍵字描述,以及它們之間的層次關(guān)聯(lián)方式。進(jìn)行分層時(shí),分層管理器作為程序的一部分,確定需要添加的子圖元所在的圖層及其關(guān)鍵字,以便確定在逐層細(xì)化圖層中需要添加和刪除的圖元信息。
逐層細(xì)化圖層是一種特殊的地圖圖層,它是有自己表結(jié)構(gòu)的空白圖層,并用元數(shù)據(jù)規(guī)定了所有加載圖層的一些規(guī)則和限制,所顯示出來(lái)的地圖信息是按照元數(shù)據(jù)規(guī)定的規(guī)則從其它表或數(shù)據(jù)庫(kù)中提取出來(lái)的。在地圖中顯示逐層細(xì)化圖層時(shí),分層管理器會(huì)創(chuàng)建一個(gè)臨時(shí)表,然后將組件表中的圖元復(fù)制到該臨時(shí)表中。逐層細(xì)化圖層中顯示的圖元實(shí)際上是組件表中圖元的副本。這樣就可以靈活的在圖層上面加載需要的信息。在應(yīng)用程序終止時(shí),將丟棄該臨時(shí)表,為了保存有用的專題圖信息,可以對(duì)提取出來(lái)的圖層進(jìn)行保存。此時(shí),如果用戶查看圖層信息時(shí),逐層細(xì)化圖層仍將是單個(gè)圖層。
逐層細(xì)化表的要求作為分層管理器的組織核心部分,它定義了元數(shù)據(jù)關(guān)鍵字和三個(gè)標(biāo)準(zhǔn)列:關(guān)鍵字、層和標(biāo)簽。并有著自己的一套語(yǔ)法:
(1) 關(guān)鍵字 begin_metadata 標(biāo)記逐層細(xì)化表中元數(shù)據(jù)部分的開頭。
(2) 每行元數(shù)據(jù)包含兩個(gè)元素:關(guān)鍵字和值。所有關(guān)鍵字和值均使用雙引號(hào)引起來(lái)。
(3) 逐層細(xì)化表必須包含 \IsDrilldown 關(guān)鍵字,該關(guān)鍵字的值必須為 True。
(4) 每個(gè)關(guān)鍵字以“\”(反斜線)開頭。
(5) 元數(shù)據(jù)關(guān)鍵字可以在層次結(jié)構(gòu)中嵌套。層次結(jié)構(gòu)中的每一層以反斜線 (\) 標(biāo)記。
(6) 元數(shù)據(jù)包括 \DDMap\ComponentMaps\ 關(guān)鍵字層次結(jié)構(gòu)。在該層次結(jié)構(gòu)中為每個(gè)組件表指定四個(gè)元數(shù)據(jù)關(guān)鍵字。
分層管理器的分層原理圖如圖1所示,從圖中可以看出,分層管理器有兩部分組成:組件表和逐層細(xì)化表組成,分層管理器根據(jù)系統(tǒng)的要求以數(shù)據(jù)挖掘的方式從 Oracle數(shù)據(jù)倉(cāng)庫(kù)中提取數(shù)據(jù),形成組件表中的某個(gè)圖層,然后確定需要加載圖層的名稱和圖層中的部分,并加載到逐層細(xì)化表中。如果是第一次加載,此時(shí)的逐層細(xì)化表是空白圖層,在加載過程中,逐層細(xì)化表不斷的進(jìn)行圖元信息的增加和刪除,這樣會(huì)出現(xiàn)每個(gè)組件表中的部分信息顯示在逐層細(xì)化表所示的圖層中。這樣輸出所需要的圖層,并對(duì)它進(jìn)行編輯,由于逐層細(xì)化表中數(shù)據(jù)是個(gè)組件表中的副本,需要對(duì)編輯后的圖層進(jìn)行另存,形成專題圖。
分層管理器首先形成空白圖層,通過分層管理器用數(shù)據(jù)挖掘工具從Oracle數(shù)據(jù)倉(cāng)庫(kù)中提取數(shù)據(jù),根據(jù)分層管理器的元數(shù)據(jù)規(guī)則形成一級(jí)的圖層,在該圖層中,通過響應(yīng)事件,以確定加載二級(jí)圖層的圖層名稱和該圖層中的加載部分,相應(yīng)的加載三級(jí)、四級(jí)圖層數(shù)據(jù),在加載的同時(shí),就形成了各種專題圖。當(dāng)然,分層管理器功能的實(shí)現(xiàn)是通過GIS組件(MapX、MO、AO等)和編程語(yǔ)言(VB、VC、Delphi等)來(lái)實(shí)現(xiàn)的。
2、分層管理器開發(fā)步驟
分層管理器應(yīng)用程序需要進(jìn)行許多設(shè)置和準(zhǔn)備。主要步驟匯總?cè)缦拢?/p>
(1)獲取多層逐層細(xì)化圖層時(shí)要使用的各個(gè)表的數(shù)據(jù)。
(2)創(chuàng)建一個(gè)包含特殊列和特殊元數(shù)據(jù)的新的空逐層細(xì)化表(.tab 文件)。元數(shù)據(jù)為每個(gè)組件表指定一個(gè)層名,同時(shí)標(biāo)識(shí)組件表中的重要列標(biāo)識(shí)列和標(biāo)題列。
(3)將逐層細(xì)化表加入地圖。例如,將逐層細(xì)化表加入您使用的Geoset,或通過編碼方法將逐層細(xì)化表加入地圖。
(4)在應(yīng)用程序中添加用戶界面元素,響應(yīng)逐層細(xì)化事件。
(5)添加代碼,響應(yīng)用戶對(duì)逐層細(xì)化工具的使用(也就是說編寫分層管理器)。
(6)該代碼需要檢測(cè)用戶已選擇的圖元;確定需要添加的子圖元和需要?jiǎng)h除的圖元;調(diào)用應(yīng)用程序來(lái)實(shí)現(xiàn)分層或匯總地圖圖元。
實(shí)例分析
由于遙感影響數(shù)據(jù)量特別巨大,對(duì)于數(shù)據(jù)的存儲(chǔ)、管理、分析和有用圖形部分顯示就顯得非常困難,這需要用關(guān)系——對(duì)象數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)。在圖形顯示時(shí),為了使取得有用圖層信息,減少加載時(shí)間和提高編輯效率,需要對(duì)圖形進(jìn)行分層顯示,即用到了前面介紹的分層管理器技術(shù)。本文用VB作為編程語(yǔ)言, MapX作為GIS組件進(jìn)行二次開發(fā)來(lái)實(shí)現(xiàn)分層管理技術(shù)。
1、構(gòu)建分層管理器
構(gòu)建逐層細(xì)化表,其表結(jié)構(gòu)為:
Definition Table
Type Native Charset "WindowsLatin1"
Fields 3
Key Char (32);
Level Char (32);
Label Char (32) ;
元數(shù)據(jù)關(guān)鍵字和對(duì)應(yīng)值為:
begin_metadata
"\IsDrilldown" = "TRUE"
"\DDMap\ComponentMaps\One\File" = " Tab_YNP.TAB"
"\DDMap\ComponentMaps\One\LevelID" = " Tab_YNP "
"\DDMap\ComponentMaps\One\FeatureIDCol" = "3"
"\DDMap\ComponentMaps\One\FeatureCaptionCol" = "1"
…(其他各組件層的關(guān)鍵字和值與此相同)
"\DDMap\HierarchyManager\IsDLL" = "TRUE"
"\DDMap\HierarchyManager\ID" = "SomeDLL.dll"
"\DDMap\HierarchyManager\InitialLevel" = " Tab_YNP "
end_metadata
2、分層管理器的實(shí)現(xiàn)
使用 CreateCustomTool 方法實(shí)現(xiàn)逐層細(xì)化工具,定義為:Map1.CreateCustomTool customDrilldownExpandTool, miToolTypePoint, miDrilldownExpandCursor, miDrilldownContractCursor, miDrilldownContractCursor
每次使用自定義逐層細(xì)化工具均會(huì)觸發(fā) ToolUsed 事件。在 ToolUsed 事件過程中,您將需要執(zhí)行產(chǎn)生逐層細(xì)化行為的代碼。該過程主要分為四個(gè)步驟:
(1)使用 SelectByPoint 或 SearchAtPoint 之類的方法確定用戶單擊的地圖圖元。
(2)確定應(yīng)取代用戶單擊的圖元的子圖元集。例如,可以使用一個(gè)或多個(gè)嵌套的 Case 語(yǔ)句確定哪些子圖元取代所選的父圖元。
(3)提取空間數(shù)據(jù)。根據(jù)前述條件,用SQL語(yǔ)言從數(shù)據(jù)倉(cāng)庫(kù)中提取信息,如:select goloc form YN. Tab_HQ_KC where Prix=68
(4)調(diào)用 DrilldownAddFeatures 方法將子圖元加入地圖。
(5)調(diào)用 DrilldownRemoveFeatures 方法從地圖中刪除父圖元(用戶單擊的圖元)。
(6)對(duì)顯示圖層進(jìn)行編輯,并把編輯結(jié)果保存。
3、結(jié)果分析
從實(shí)例的結(jié)果可以看出,Oracle數(shù)據(jù)倉(cāng)庫(kù)能夠方便的對(duì)空間數(shù)據(jù)進(jìn)行存儲(chǔ)、分析、管理和輸出,數(shù)據(jù)挖掘技術(shù)的應(yīng)用能夠靈活存取數(shù)據(jù),而不需要加載整個(gè)數(shù)據(jù)表中的所有數(shù)據(jù),分層管理器的應(yīng)用實(shí)現(xiàn)了空間數(shù)據(jù)大范圍快速瀏覽和不同主題圖層的部分疊加,實(shí)際應(yīng)用中有著非常方便的應(yīng)用。
高效地利用現(xiàn)有的海量數(shù)據(jù)是目前面臨的難題之一。Oracle數(shù)據(jù)倉(cāng)庫(kù)技術(shù)是專門針對(duì)海量數(shù)據(jù)的管理和應(yīng)用的技術(shù),它在對(duì)象-關(guān)系型數(shù)據(jù)庫(kù)、功能強(qiáng)大的 DBMS和支持可視化檢索方面有著非常明顯的優(yōu)勢(shì)。地學(xué)數(shù)據(jù)倉(cāng)庫(kù)的理論在今年的時(shí)間應(yīng)用中不斷完善,本文在數(shù)據(jù)倉(cāng)庫(kù)的存儲(chǔ)、分析和表達(dá)層方面把理論和實(shí)際應(yīng)用相結(jié)合,結(jié)合分層管理GIS二次開發(fā),開發(fā)出基于Oracle數(shù)據(jù)倉(cāng)庫(kù)的分層管理系統(tǒng),它結(jié)合了數(shù)據(jù)倉(cāng)庫(kù)和分層管理的優(yōu)點(diǎn),在地學(xué)空間數(shù)據(jù)應(yīng)用方面進(jìn)行了有益的嘗試。
【Oracle數(shù)據(jù)倉(cāng)庫(kù)分層管理器解決方案】相關(guān)文章:
Oracle認(rèn)證:ORACLE綁定變量BINDPEEKING08-26
Oracle認(rèn)證:Oracle避免全表掃描方式08-26
Oracle認(rèn)證:Oracle內(nèi)存結(jié)構(gòu)研究-PGA篇08-26
oracle的sql語(yǔ)句06-18
Oracle認(rèn)證考試06-05
Oracle認(rèn)證考試科目06-05
Oracle認(rèn)證考試介紹06-20