基於COM技術的分佈式柵格數據引擎設計方案與應用

基於COM技術的分佈式柵格數據引擎設計方案與應用

[日期:2005-02-18] 來源:99'中國GIS年會論文集  作者: [字體: ]

王爾琪

(中科院遙感應用研究所、中科院地理信息產業發展中心)

程新榮 趙東

(中科院地理信息產業發展中心)

宋關福

(中科院遙感應用研究所、中科院地理信息產業發展中心)

 

摘要:本文在回顧傳統地理分析方式的基礎上,探討基於COM技術的分佈式柵格數據引擎的理論框架與應用模式,提出了一個基於COM技術的柵格數據引擎實現方案,並在實踐中得到成功應用。使用該方案將改變傳統的地理分析方式,使地理分析人員可以使用自己熟悉的語言快速建立分析模型,大大提高協同工作效率,使地理分析更加容易與實際應用相結合,從而使地理分析得到更加廣泛的應用。

關鍵詞:柵格數據引擎 COM技術 分佈式結構

 

地理信息的應用可以大致分爲三個不同的方面:地圖製作,地理信息管理,地理信息分析。在GIS發展的早期階段,由於受到軟硬件條件的限制,GIS主要用於地圖製作或地圖信息的管理;隨着工作的積累,數據量不斷增加,軟硬件水平的提高,相應地要求將大量的空間數據實現一體化管理與查詢;當軟硬件條件進一步發展,對大量的空間數據分析成爲可能,地理信息的分析處理得到快速發展,使地理信息應用不再侷限於對空間數據的查詢瀏覽,而可以進一步研究地理現象的更深層次的規律性,GIS的分析功能成爲人們瞭解地理空間的重要工具。

目前的地理分析工具主要有兩大類:一類基於矢量數據結構,另一類基於柵格數據結構。兩種結構適應於不同地理問題的解決,具有各自的優缺點。由於柵格數據結構更加適應於計算機的處理,速度較快,因此目前的很多地理分析模型都基於柵格數據結構。由於地理分析需要有相應的軟硬件條件的支持,而其問題本身相當複雜,目前只有少數的軟件才提供柵格數據模型分析功能,而這些軟件的價格相當昂貴,影響了地理信息分析功能的普遍應用。由於地理問題的複雜性,各個行業對於地理信息的處理方法和要求也有非常大的差別,需要建立各種不同的模型進行分析,應該說目前的軟件的分析功能還遠遠不能滿足實際應用的要求。

筆者嘗試採用目前的先進的COM技術來解決這一問題,提出了一個基於COM技術的柵格數據引擎實現方案,併成功應用於SuperMap的開發實踐中,取得了良好效果。通過使用COM技術,採用規範的接口和一致的數據訪問方式將數據管理與數據分析相隔離,旨在提供一個易於使用、易於擴展的地理柵格數據分析方案。該方案具有以下一些優點:1、分析者不必關心數據處理的細節,只需要專注於應用模型的建立;2、分析者可以使用熟悉的任何支持COM技術的編程工具建立地理分析模型,不需要學習特定的編程語言,即可快速高效地完成地理分析功能;3、可以直接存取多種地理數據,給地理分析帶來極大的便捷性;4、柵格數據引擎通過COM接口實現與其它軟件的緊密集成和互操作;5、內置多種分析模型和函數運算功能,極大提高處理效率,同時可以方便地創建自己的分析模型,不受內置模型的限制;6、可以提供與分析無關的多種數據存取引擎,如內存、文件、數據庫等;7、基於多層結構設計,可以部署於單機、局域網甚至Internet上,滿足不同應用規模的需求。

一、柵格數據引擎的基本結構

柵格數據引擎由數據存儲引擎、柵格化引擎、數據分析引擎、數據可視化引擎四個主要部分組成。數據存儲引擎負責數據的存儲管理,但一般情況不需要用戶直接訪問。柵格化引擎負責矢量數據的柵格化,可以接受各種外部格式的數據,支持的數據類型主要爲點、線、面。數據分析引擎使用數據存儲引擎和內置的分析模型進行分析,可以組合使用幾種模型進行分析,用戶也可以直接存取數據存儲引擎來創建自己的分析模型。數據可視化引擎對柵格數據和分析結果提供可視化表達或輸出結果。幾個部分的關係如圖一所示:

raseng01.jpg (17308 bytes)

圖一 柵格數據引擎結構關係示意圖

二、柵格數據存儲引擎 柵格數據存儲引擎基本接口

柵格數據存儲引擎是整個柵格數據引擎的基礎,爲其它分析模型提供數據存儲與管理服務。柵格數據存儲引擎提供與存儲方式、存儲介質、存儲位置無關的一致的訪問接口。主要提供以下幾個常用接口:

SetPixel,GetPixel

:讀寫象素值,轉換爲RGB值。

SetValue,GetValue

:讀寫點陣值,轉換爲整型值。

SetValueF,GetValue F

:讀寫點陣值,轉換爲浮點值。

SetScanline,GetScanline

:讀寫一個掃描行數據。
 

2

、數據存儲引擎實現方案的比較

由於計算機的內存有限,而磁盤的隨機訪問速度較慢,在具體實現需要綜合考慮到速度和功能的平衡,通過實現不同的存儲引擎來適應不同的要求。

第一種方式使用完全的內存模式,將數據全部載入內存,運算速度較快,訪問數據方便,但數據量較大時處理起來較爲困難。

第二種方式使用文件,被訪問的數據動態載入內存,可以處理海量數據,但由於需要處理磁盤數據交換,因此速度比第一種方式要慢。由於需要處理內存數據交換,因此需要實現一個智能的調度方案,以最大限度提高性能。筆者在實踐中,實現了幾種不同的調度方案,以適應不同處理方式的要求。

第三種方式使用數據庫,可以容易地實現索引和事務處理,很容易擴展到網絡環境,而且能夠方便地實現數據共享。但直接使用目前的商用DBMS存儲柵格數據,還存在許多困難:主流DBMS使用關係型索引,能夠較好地處理一維數據,對於二維的柵格數據處理效率較低;傳統的事務處理很難處理大型事務的提交或撤消;由於柵格數據處理往往需要訪問全部數據而非其中的子集,導致網絡負荷較重,需要快速網絡才能實現;當數據量較大時,DBMS的效率急劇下降;主流DBMS使用BLOB來存儲柵格數據,由於數據庫按照記錄來存取數據,當單個記錄數據量達到一定程度時,處理起來相當困難。雖然存在這些困難,由於數據庫技術發展較早,技術成熟,如果採取一些措施揚長避短,採用數據庫作爲柵格數據存儲形式具有其特殊的優勢,下面將會具體討論採取的技術措施。

 

3

、空間索引與多分辨率

如果不建立空間索引,海量柵格數據的處理效率將會相當之低。目前常用的建立空間索引的方式主要有兩種:一種採用四叉樹結構,一種採用Tiles結構,即空間分塊索引結構。四叉樹結構目前的理論研究已經較多,有了一些試驗性的系統,但由於各種原因,商業應用還較少。Tiles結構具有結構簡單,編程容易的特點,被很多商業軟件所才採用,在TIFF6.0的標準中也定義了Tiles結構存儲規範,很多數據壓縮算法也基於Tiles結構。

柵格數據採用TILES結構可以有效加快顯示的速度和減少在每一次刷新操作中數據的傳輸量,以及極大地減少數據處理和顯示所需要的內存消耗。但當數據量較大時,縮小顯示由於仍然需要訪問大量數據所以速度較慢,這是目前一些大型軟件中都存在的問題。通過建立多分辨率的索引,可以大大加快小比例尺顯示時的速度。但是多分辨率索引會增大存儲空間要求,而且建立多分辨率索引時需要訪問全部數據(當數據更新時,需要重建索引),因此第一次保存時速度將會比不建索引慢,如果數據頻繁修改,這種方式反而降低速度,在數據不是頻繁改動的情況下,這種方式將會帶來顯示速度的大幅度提高。這種方式已經被不少軟件所採用。應該提出的是,除非採用適應於這種結構的算法去優化,這種方式處理數據將會比採用平面結構要慢(這種優化並不複雜,但由於所有的算法都需要特殊處理,會加大編程的工作量和增加代碼長度),但仍然可以減少內存消耗。

筆者在柵格數據引擎的實現中,也採用了Tiles結構,建立多級的多分辨率索引,顯示時自動適配最佳分辨率,修改數據後可以自動或批量更新多分辨率索引,允許數據分塊進行壓縮,可以採用不同的壓縮方案。對於使用數據庫的存儲方式,在Database中建立CATALOG 表,在CATALOG表中保存影像頭和索引信息,包括影像頭信息(標誌、版本、數據壓縮方案、長寬、寬度字節數、分塊大小、色彩空間),抽樣級別,調色板,統計信息(最大最小值、平均值、直方圖),影像分塊索引(記錄分塊大小,橫豎分塊數,每一塊的大小和座標,打開圖層時將索引全部讀入內存)。與傳統DBMS不同的是,每一幅影像採用多個Table 來記錄,每一條記錄對應一個Tiles,對每一個Tiles建立二維索引,根據空間位置生成一個索引碼,查找時根據索引碼來搜尋信息,可以有效地提高性能。

raseng02.jpg (9120 bytes)

圖二 數據存儲引擎的多分辨率存儲與數據處理流程示意圖

三、柵格化引擎

柵格化引擎實現常用的矢量數據柵格化功能,採用熟悉的繪圖指令方式使用戶使用起來更加方便,支持點線面三種數據類型。採用這種方式可以通過編程來實現各種數據的輸入,不象其它軟件只能接受內部格式(詳見圖三)。除此之外,對於SuperMap格式可以不需編程以批量或交互式直接柵格化。實現的常用接口有:

SetCurrentValue

:設置當前柵格的點值。

SetPoint

:柵格化點,點可以具有大小。

MoveTo :移動當前位置。

LineTo

:柵格化線段。

Polyline

:柵格化一條折線。

PolyPolyline

:柵格化多條折線。

Polygon

:柵格化一個多邊形區域。

PolyPolygon

:柵格化多個子多邊形區域,可以具有島與洞關係。

Rectangle

:柵格化一個矩形區域。

Circle

:柵格化一個圓形區域。

柵格化引擎使用柵格數據存儲引擎來完成實際的數據存取工作,用戶也可以自行調用柵格數據存儲引擎的函數來完成特殊的柵格化功能。

四、數據分析引擎

數據分析引擎完成常用的數據分析功能,提供了一些常用的計算模型和函數,用戶可以利用這些功能來構建自己的數據分析模型,通過編程可以交互式完成,也可以批量進行。目前內置的分析功能主要有:

表面解析: 根據等高線圖或高程點快速解析生成DEM數字高程模型。

距離生成: 根據線劃柵格生成距離柵格圖,用於進行成本分析等。

緩衝區生成:根據線劃柵格生成緩衝區柵格圖,用於疊加分析等。

趨勢分析: 根據線劃柵格生成趨勢面柵格圖,用於疊加,統計,預測等分析。

疊加分析: 多柵格層的疊加運算。

四則運算: 柵格的加、減、乘、除四則運算。

函數運算: 一些常用的三角、對數等函數運算。

五、數據可視化引擎

數據可視化引擎提供數據的多種可視化表達方式,目前提供的主要有三維顯示、分層設色、正射暈渲、硬拷貝輸出、文件輸出等五種方式。

三維可視化:柵格數據主要用於空間數據的表達,以三維可視化方式來顯示數據尤爲重要。數據可視化引擎基於OpenGL圖形庫提供柵格數據以三維方式進行放大、縮小、旋轉、漫遊等功能。

分層設色:數據可視化引擎還提供傳統地圖的分層設色功能。用戶只需定義需要的顏色集,即可自動生成分層設色地圖,可以生成漸變色、固定色等多種效果,而且可以與其它的地理數據相結合,自行定義顏色生成的規則。

正射暈渲:數據可視化引擎還提供傳統地圖製作的正射暈渲功能,可以根據柵格數據分析引擎生成的DEM生成複雜的正射暈渲圖;用戶可以自定義光照、材質等參數,甚至每一象素顏色產生的規則,將以前需要手工完成的工作全部自動化;可以產生高精度、大幅面的正射暈渲圖與其它矢量要素進行疊加或直接用於製版輸出,避免了手工方式的繪製、掃描、製作、疊加、輸出的複雜工序,大幅度提高了工作效率和準確性。

輸出硬拷貝:數據可視化引擎也提供直接的硬拷貝輸出到打印機或繪圖儀。

其它方式:數據可視化引擎可以將結果保存到多種影像文件格式或複製到剪裁板上,可以與Microsoft WordExcelPower PointOffice工具緊密結合,製作報告或演示文檔,也可以與Corel DrawPhotoshop等結合用於混合製版輸出,或用於Arc/InfoMapInfoGIS系統進行復合分析、用作地圖顯示的背景等。

raseng03.jpg (35534 bytes)

圖三 柵格化引擎的多源數據存取示意圖

六、柵格數據引擎基於多層結構的部署方案

柵格數據分析模型較多,具有運算密集、數據量大的特點,適應GIS發展的趨勢,爲了滿足高精度、大數據量的地理分析的需要,柵格數據處理必須建立一個網絡化部署、基於多層結構的分佈式處理框架。採用上面設計的柵格數據引擎,可以非常容易地擴展到局域網、廣域網甚至Internet上,實現網絡化、分佈式處理的需要。下面簡單介紹基於多層結構的分佈式柵格數據處理引擎的實現與部署方案。

整個方案框架由客戶端程序、分析代理服務器、處理服務器、數據服務器組成。客戶端程序負責處理用戶請求和輸出結果;分析代理服務器直接與客戶端程序交互,代理用戶請求、進行調度和優化,交由處理服務器去執行,並負責將處理結果返回客戶端;處理服務器負責執行實際的數據處理請求;數據服務器負責數據的存儲、提取操作(參見圖四)。

raseng04.jpg (9503 bytes)

圖四 柵格數據引擎的分佈式部署框架示意圖

由於每一部件都採用客戶/服務器模式來設計,因而每一部件都可以實現分佈式的部署方案,可以靈活地部署各個組件,滿足從小型到大型系統的需要。同時具有高度的可伸縮性,非常便於數據管理、數據共享與數據交換,而且可以有效地減少網絡帶寬的需求,提高系統性能,增強系統數據分析功能。適應系統的不同規模可以分爲以下三種常見的配置模式:

  1. 最簡單的運行模式爲單機模式,所有的部件安裝於同一臺計算機,可以直接存取任何部件的功能,不需使用分析代理;
  2. 在局域網模式下,所有的客戶共享服務器數據,可以使用單個或多個處理服務器,處理服務器可以安裝在服務器上,也可以安裝在工作站上,可以使用分析代理也可以不使用分析代理;
  3. 在廣域網或Internet由於速度較慢,使用分析代理代理客戶端請求,在服務器方可以使用多個處理服務器或數據服務器,只將處理結果返回客戶端。
 

七、結語

本文提出的柵格數據引擎採用COM接口,提供了一個易於使用、易於擴展的柵格地理信息數據分析應用方案,該方案使用戶不需要學習特定的編程語言,即可快速高效地建立地理分析模型,完成地理分析功能。柵格數據引擎通過COM接口實現與其它軟件的緊密集成和互操作,直接存取多種地理數據,給地理分析帶來極大的便捷性,使地理分析更加容易與實際應用結合起來,可以更加充分發揮地理信息系統在國民經濟建設中的重要作用。

使用該方案將改變傳統的地理分析方式,使地理分析人員可以使用自己熟悉的語言快速建立分析模型,大大提高協同工作效率,使地理分析更加容易與實際應用相結合,從而使地理分析得到更加廣泛的應用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章