Monday, August 22, 2011

Oracle Business Intelligence 與 圖資整合

本篇介紹的順序

先就OBIEE, Oracle Mapviewer, Oracle Database Spatial/Locator進行架構上的說明.

接下來, 花一點時間介紹Oracle spatial/Locator如何儲存地理空間資訊. 以及在地理空間資訊(GIS)怎麼看「地圖」這件事; 或是說「地圖」是怎麼構成的.

接下來談, Oracle Mapviewer怎麼從Oracle Database取出空間資訊, 然後來「畫」地圖.

附帶怎麼匯入台灣地理空間資訊.

接下來便介紹, Oracle Mapviewer怎麼做成類似Google Map.

最後是最簡單的部分, OBIEE怎麼使用地圖

OBIEE, Mapviewer, Oracle Spatial/Locator架栟之間的關係



這張圖是OBIEE的安裝元件架構圖. 與過去OBIEE 10g最大不一樣的地方是, 從11g之後以BI Domain的型式出現, 請不要與WebLogic Domain混為一談. 在 BI Domain 中以System Components, 簡單地說就是以server processes的方式存在著, 並沒有完全改寫成JEE的程式. 但是與JEE的程式溝通上,變的更容了.

在單機的安裝上, Administration Server 與 Managed Server合併為一 Administration Server. 如下圖


在多台主機(或稱為叢集架構)的安裝, Managed Server則以cluster的方式呈現, 同樣地System Components BI instance也是以cluster的方式並聯; 惟有Administration Server在整個叢集中只有留下一台, 其餘的 Admin. Server皆被inactive. 如下圖, 


那Oracle Mapviewer在圖的那一個部分呢? Oracle Mapviewer本身是一個JEE的程式, 所以應該是被放置於Managed Server上, 在這些圖上並沒有特別被標註出來.


這張圖, 很清楚地說明了, Oracle BIEE 與 Mapviewer是同時存在於Web Server (WebLogic) 上. Mapviewer則是接受使用者的請求(由OBIEE或是直接由外部透過http web), 從Oracle資料庫內讀取地理空間資料後,「畫」出地圖, 再送給前端請求的使用者.

下面這張圖, 更清楚地表示browser, Mapviewer, 與 Oracle DB間的關係.


任何前端使用者或設備, 以XML over HTTP的請求, 送至Mapviewer. Mapviewer在收到請求之後, 依據請求的內容, 轉換成SQL向 Oracle Database讀取儲存在資料庫的空間資料, 讀取如何畫這些空間資料, 然後產生圖檔, 送至前端使用者. 完成整個使用者的請求.


Oracle資料庫如何存放(或儲存表示)地理空間資訊

Oracle 在資料庫內定義了一種新的資料型態(Data Type) - SDO_GEOMERTY, 它就像一般的文字, 數字一樣, 可以在資料表格上定義資料欄位時, 設定它的資料型態. 所以一個表格上, 可以有多個文字或數字型態的資料欄位, 同樣地, 也可以有多個SDO_GEOMETRY資料型態的欄位, 不過這種情況並不常見. 稍後會說明, 為什麼不常見.


上圖, 簡單說明空間資料與Oracle 表格儲存之間的關聯. 欄位「LOCATION」是用來存放空間資料(當然不是直接畫圖存進去), 其它的欄位, 可以用來說明該空間資訊的屬性.而 LOCATION欄位, 通常我們會以SDO_GEOMETRY定義其資料型態.


SDO_GEOMETRY 的資料型態比較特別, 可以想像它是一個具有結構化的資料. 我們可以試想, 我們要如何述地理空間上的一個位置?


首先要有經緯度, 簡單地說在平面上就是, X, Y 的值, 描述一個線段, 要有二組X, Y 的數值, 那麼平面呢? 曲線呢? 點, 線段, 平面的組合呢? 所以我們會希望有地方描述該內容的"大致樣子".


別忘了, 有一個重要的事件, 但是我們已經習以為常卻忽略的就是座標系. 同樣的一組X, Y 數值, 若配合上不同的座標系統, 那麼就會代表不同的點位置.


因此, 在儲存空間地理位置資訊時, 會需要1. 座標, 2. 點, 線, 面, 或組合的型態空間資訊, 3. 然後才是X, Y,......的數值


詳細的定義, 有興趣的可以參考Oracle® Spatial Developer's Guide. 在這裏我要請各位記的是座標系, 在儲存的時候, Oracle DB已經為世界上常使用的座標系統, 定義了唯一的代號. 我們常看到的汽車GPS的座標系統, 在Oracle DB的座標系統代號是- 8307.



大家應該熟悉, 為了加速資料搜尋與查詢的速度, 我們會在欄位上加上索引(Index), 同樣地, 在茫茫的地理空間的數據上, 想要快速地找到我們要找的資料, 我們也會幫 SDO_GEOMETRY欄位上, 建立「空間索引」.


我們怎麼讓使用者知道, 我們有那些表格是有存放空間資料, 就需要透過Metadata來了解. 以在空間資訊上, 我們也有提供相對的metadata的視觀表(view) USER_SDO_GEOM_METADATA

地圖是如何構層的?


借用 graphic from Colorado University 說明

「地圖」是由很多「層」所構成的. 圖層提供了歸類, 方便管理與應用上的彈性.

我們怎麼畫一張地圖? 以畫一張台灣地圖為例子. 先拿一張白紙, 先畫「台灣的外框」(我想大部分的人應該都是這樣子畫的), 接下來畫「縣市界」, 再接下來應該是「區, 鄉, 鎮界」, 有時間的人會畫「村里界」, 標上縣, 市, 區, 鄉, 鎮,村, 里的名字, 重要的道路, 像是「高速公路」, 「快速道路」, 「省道」, 「縣道」...等 , 「河流」, 重要「地標旳位置」, 如便利商店7-11, 全家, 萊爾富(不知道什麼時候便利商店成為重要地標), 機關, 銀行, 學校, 郵局, 加油站.....


不管你是用黑色的筆, 還是有顏色的筆, 在畫這些線的時候, 您應該會用「不同顏色的線」來區分吧? 有心一點的人, 也許會在區域內「塗」上顏色.


然後, 一張地圖就算完成了.


在這個過程中, 有幾個重要的觀念要點出來.


我們剛才在畫的「台灣的外框」, 「縣市界」, 「區, 鄉, 鎮界」, 「村里界」, 「高速公路」,  「快速道路」, 「省道」, 「縣道」, 「河流」, 「地標旳位置」, 一般我們不會全部畫在一張圖紙上, 我們會比較習慣用透明的膠片, 畫上這些線, 點...., 然後根據需要, 相互套疊, 除了是增加資訊顯示上的彈性之外, 一方面也可以比較清楚地看到想要看的資訊,而不是從一團密密麻麻旳線和點中找到想看的資訊.

而這些透明的膠片, 我們在圖資的習慣上稱作「圖層」


在資料庫內, 我們怎麼表示一個「圖層」呢? 我們用一張資料表格來表示一張圖層. 在同一圖層上, 是沒有辦法使用不同的座標系統來畫圖. 所以, 這裏有一個限制, 在同一圖層(資料表格)上的空間表示資料, 必須屬於同一座標系統.


允許在不同圖層(資料表格), 使用不同的座標系統. 因此, 當需要在不同座標系統上的圖層上進行套疊時, 就需要進行座標系統轉換. Oracle DB 可以幫你進行在不同座標系統上套疊时自動進行座標轉換, 但轉換是需要耗費時間與資源. 所以應該儘量避免使用不同的座標系統.



到這裏, 我們接下要談如何「畫」與「塗」上顏色.



Oracle MapViewer畫地圖



Oracle MapViewer則是負責從Oracle DB取出空間資料, 然後將這些資料畫上顏色.



為了讓Mapviewer能幫我們自動畫圖, 上顏色, 當然要先幫Mapviewer準備「色筆」, 在這裏我們專業一點的名詞 -- Style. 我們用設定的方式來定義style, 指示Mapviewer那一個圖層(資料表格), 用那一種色筆(Style)來畫, 這樣就可以畫出我們想要的地圖了.簡單吧.


下圖簡單列出一些Oracle Mapviewer Styles 範例





有關如何匯入圖資的部分, 可以參考下列網址

匯入空間資料 - 台灣地圖 part I

匯入空間資料 - 台灣地圖 part II




No comments: