摘要 本文描述分層管理器的原理
步驟
限制
並和Oracle數據倉庫相結合實現了地學數據的有效存儲
管理以及大范圍數據的快速浏覽
關鍵字 分層管理器 元數據 快速浏覽
前言
世紀是信息的世紀
綜合國力的競爭在很大程度上是信息的競爭
更是信息利用率的競爭
近年來
隨著
數字地球
和
數字國土
戰略的提出和實施
地學領域的海量數據飛速增長
數據的存儲
分析
管理和處理變得日益復雜
隨著Oracle技術的成熟
尤其是
本版後Oracle Spatial的出現
數據倉庫在海量數據存儲
分析和表達方面有著無可比擬的優勢
同時
由於信息量的巨大
傳統的數據存儲和顯示方式在大范圍數據快速浏覽方面顯得力不從心
這樣有必要改變空間數據的存儲方式
加載需要的空間數據部分
避免不必要數據的反復加載和卸載
分層管理器
分層管理器架構
分層管理器是實現大范圍數據的快速浏覽的關鍵部分
它控制了逐層細化表的結構和元數據的定義和賦值
定義了組件表中的關鍵信息
給出了空間數據的來源
數據挖掘規則
圖層加載范圍和圖形編輯
輸出和保存
分層管理器有兩部分組成
分別為
a) 一組存儲於Oracle數據倉庫中的空間數據表
用於逐層細化圖層中的每個詳細信息層
這些表稱為組件表
b) 一個空表
包含該表的結構定義和描述組件表的特殊元數據
該表稱為逐層細化表
任何逐層細化應用程序均需要逐層細化表
從中可以了解逐層細化圖層中各層的層次關鍵字描述
以及它們之間的層次關聯方式
進行分層時
分層管理器作為程序的一部分
確定需要添加的子圖元所在的圖層及其關鍵字
以便確定在逐層細化圖層中需要添加和刪除的圖元信息
逐層細化圖層是一種特殊的地圖圖層
它是有自己表結構的空白圖層
並用元數據規定了所有加載圖層的一些規則和限制
所顯示出來的地圖信息是按照元數據規定的規則從其它表或數據庫中提取出來的
在地圖中顯示逐層細化圖層時
分層管理器會創建一個臨時表
然後將組件表中的圖元復制到該臨時表中
逐層細化圖層中顯示的圖元實際上是組件表中圖元的副本
這樣就可以靈活的在圖層上面加載需要的信息
在應用程序終止時
將丟棄該臨時表
為了保存有用的專題圖信息
可以對提取出來的圖層進行保存
此時
如果用戶查看圖層信息時
逐層細化圖層仍將是單個圖層
逐層細化表的要求作為分層管理器的組織核心部分
它定義了元數據關鍵字和三個標准列
關鍵字
層和標簽
並有著自己的一套語法
(
) 關鍵字 begin_metadata 標記逐層細化表中元數據部分的開頭
(
) 每行元數據包含兩個元素
關鍵字和值
所有關鍵字和值均使用雙引號引起來
(
) 逐層細化表必須包含 \IsDrilldown 關鍵字
該關鍵字的值必須為 True
(
) 每個關鍵字以
\
(反斜線)開頭
(
) 元數據關鍵字可以在層次結構中嵌套
層次結構中的每一層以反斜線 (\) 標記
(
) 元數據包括 \DDMap\ComponentMaps\ 關鍵字層次結構
在該層次結構中為每個組件表指定四個元數據關鍵字
分層管理器的分層原理圖如圖所示從圖中可以看出分層管理器有兩部分組成組件表和逐層細化表組成分層管理器根據系統的要求以數據挖掘的方式從Oracle數據倉庫中提取數據形成組件表中的某個圖層然後確定需要加載圖層的名稱和圖層中的部分並加載到逐層細化表中如果是第一次加載此時的逐層細化表是空白圖層在加載過程中逐層細化表不斷的進行圖元信息的增加和刪除這樣會出現每個組件表中的部分信息顯示在逐層細化表所示的圖層中這樣輸出所需要的圖層並對它進行編輯由於逐層細化表中數據是個組件表中的副本需要對編輯後的圖層進行另存形成專題圖
分層管理器首先形成空白圖層通過分層管理器用數據挖掘工具從Oracle數據倉庫中提取數據根據分層管理器的元數據規則形成一級的圖層在該圖層中通過響應事件以確定加載二級圖層的圖層名稱和該圖層中的加載部分相應的加載三級四級圖層數據在加載的同時就形成了各種專題圖當然分層管理器功能的實現是通過GIS組件(MapXMOAO等)和編程語言(VBVCDelphi等)來實現的
分層管理器開發步驟
分層管理器應用程序需要進行許多設置和准備
主要步驟匯總如下
(
)獲取多層逐層細化圖層時要使用的各個表的數據
(
)創建一個包含特殊列和特殊元數據的新的空逐層細化表(
tab 文件)
元數據為每個組件表指定一個層名
同時標識組件表中的重要列標識列和標題列
(
)將逐層細化表加入地圖
例如
將逐層細化表加入您使用的Geoset
或通過編碼方法將逐層細化表加入地圖
(
)在應用程序中添加用戶界面元素
響應逐層細化事件
(
)添加代碼
響應用戶對逐層細化工具的使用(也就是說編寫分層管理器)
(
)該代碼需要檢測用戶已選擇的圖元
確定需要添加的子圖元和需要刪除的圖元
調用應用程序來實現分層或匯總地圖圖元
實例分析
由於遙感影響數據量特別巨大
對於數據的存儲
管理
分析和有用圖形部分顯示就顯得非常困難
這需要用關系——對象數據庫對數據進行存儲
在圖形顯示時
為了使取得有用圖層信息
減少加載時間和提高編輯效率
需要對圖形進行分層顯示
即用到了前面介紹的分層管理器技術
本文用VB作為編程語言
MapX作為GIS組件進行二次開發來實現分層管理技術
構建分層管理器
構建逐層細化表
其表結構為
Definition Table
Type Native Charset
WindowsLatin
Fields
Key Char (
);
Level Char (
);
Label Char (
) ;
元數據關鍵字和對應值為
begin_metadata
\IsDrilldown
=
TRUE
\DDMap\ComponentMaps\One\File
=
Tab_YNP
TAB
\DDMap\ComponentMaps\One\LevelID
=
Tab_YNP
\DDMap\ComponentMaps\One\FeatureIDCol
=
\DDMap\ComponentMaps\One\FeatureCaptionCol
=
…(其他各組件層的關鍵字和值與此相同)
\DDMap\HierarchyManager\IsDLL
=
TRUE
\DDMap\HierarchyManager\ID
=
SomeDLL
dll
\DDMap\HierarchyManager\InitialLevel
=
Tab_YNP
end_metadata
分層管理器的實現
使用 CreateCustomTool 方法實現逐層細化工具
定義為
Map
CreateCustomTool customDrilldownExpandTool
miToolTypePoint
miDrilldownExpandCursor
miDrilldownContractCursor
miDrilldownContractCursor
每次使用自定義逐層細化工具均會觸發 ToolUsed 事件
在 ToolUsed 事件過程中
您將需要執行產生逐層細化行為的代碼
該過程主要分為四個步驟
(
)使用 SelectByPoint 或 SearchAtPoint 之類的方法確定用戶單擊的地圖圖元
(
)確定應取代用戶單擊的圖元的子圖元集
例如
可以使用一個或多個嵌套的 Case 語句確定哪些子圖元取代所選的父圖元
(
)提取空間數據
根據前述條件
用SQL語言從數據倉庫中提取信息
如
select goloc form YN
Tab_HQ_KC where Prix=
(
)調用 DrilldownAddFeatures 方法將子圖元加入地圖
(
)調用 DrilldownRemoveFeatures 方法從地圖中刪除父圖元(用戶單擊的圖元)
(
)對顯示圖層進行編輯
並把編輯結果保存
結果分析
從實例的結果可以看出
Oracle數據倉庫能夠方便的對空間數據進行存儲
分析
管理和輸出
數據挖掘技術的應用能夠靈活存取數據
而不需要加載整個數據表中的所有數據
分層管理器的應用實現了空間數據大范圍快速浏覽和不同主題圖層的部分疊加
實際應用中有著非常方便的應用
結論
高效地利用現有的海量數據是目前面臨的難題之一
Oracle數據倉庫技術是專門針對海量數據的管理和應用的技術
它在對象
關系型數據庫
功能強大的DBMS和支持可視化檢索方面有著非常明顯的優勢
地學數據倉庫的理論在今年的時間應用中不斷完善
本文在數據倉庫的存儲
分析和表達層方面把理論和實際應用相結合
結合分層管理GIS二次開發
開發出基於Oracle數據倉庫的分層管理系統
它結合了數據倉庫和分層管理的優點
在地學空間數據應用方面進行了有益的嘗試
From:http://tw.wingwit.com/Article/program/Oracle/201311/17617.html