GIS面向對象模型設計

 

李泉 陳玉進 (南京跬步科技有限公司http://www.creable.cn

13.1 GIS對象模型設計思路

       地理信息系統(Geographic Information SystemGIS)是能夠收集、管理、查詢、分析、操作以及表現與地理相關的數據信息的計算機信息系統,能夠爲分析、決策提供重要的支持平臺。

       GIS引擎的內核設計目標

1.良好的體系結構,可從內核組件擴展更多樣化的數據組織結構、分析部件和調度算法。

2.完全基於ANSI C++,提供OS層相關的抽象策略表示,不依賴任何平臺相關技術。

3.採用嵌入式結構單元,可同時嵌入Internet和移動計算平臺,當然也包括Desktop應用。

4.在海量數據處理、實時顯示、高性能檢索等性能敏感指標提供足夠的技術投入。

5.大量應用模板等類型的複用技術,將引擎內核心部分代碼壓縮在15k以下。

6.考慮直接從內核數據結構上結合三維仿真引擎的需要,完整融合二維、三維空間數據的存儲、表現和分析。

       地理信息系統軟件整體思路就是將各個地理要素按照一定的規律存儲到計算機中(可以是文件、數據庫等),再由顯示子系統將這些數據讀入內存,並展現在窗口中,供用戶觀看、編輯、分析等操作。由於地理要素數據的多樣性,數據管理部分的設計尤爲複雜,需要再次分解爲多個模塊,數據管理部分與操作系統無關,基本上不存在移植的問題。顯示子系統由於其特殊性,在不同的操作系統平臺下API(應用程序接口)不同(雖然使用javaC#這類語言編寫的代碼可以跨平臺使用,但是效率低下,在對計算要求比較高的地理信息系統中一般不能採用),故應該當然封裝成一個模塊,便於降低系統移植時的難度和風險。

       如圖1所示,首先把地圖抽象爲一個類,那麼這個地圖類可以包括若干個圖層,每個圖層又包含若干個地圖要素,每個圖層需要知道自己該如何渲染,抽象的渲染類又需要知道用什麼符號來畫,故數據管理部分設計爲一個樹狀結構。其中MapLayer應各自形成一個模塊,ReandererSymbol與顯示子系統有關,他們應處於display模塊中。

 

       圖層可以分爲若干個種類,比如:用於存放矢量地圖要素的要素層,用於快速繪製的臨時層,用於顯示柵格圖像的柵格層等等。所以需要定義個抽象圖層類供各種子類繼承,這樣也方便地圖類統一管理所有圖層。管理如何渲染的類、符號類也是如此。地圖要素的幾何形態採用OGC標準,在前面的章節介紹過,下面的小節將詳細介紹如何實現OGC標準定義的空間幾何形態。

13.2 參考模型介紹

南京跬步科技有限公司(http://www.creable.cn )自主研發的嵌入式GIS平臺--GridGIS Mobile具有結構設計巧妙,擴展方便,效率高,內存佔用低等特點,特別適合在嵌入式設備(如PDA、手機等)上快速建立起GIS系統,支持豐富的二次開發接口。能夠運用在GPS車輛或人員監控系統、工程安全監控、環保行業的監控與數據採集、 電力或通信的巡檢系統、交通、公安、消防、城市管理、物流、公共衛生、農業、旅遊等衆多行業中。

基於上一節介紹的GIS引擎設計思路,我們將GridGIS設計爲8個模塊,分別實現不能的功能,模塊與模塊之間無相互依賴關係,可以安全的拆分替換。Controls模塊包含GridGIS定義的前臺控件以及供控件使用的工具組件;Display模塊包含用於總管地圖符號顯示與自動標註的Display組件類、用於描述符號樣式的一系列組件類;Geodatabase模塊負責地圖要素數據的讀取和管理,包含DataProvider(數據提供類)、Feature(要素)、FeatureClass(要素類)等組件類的定義;Geometry模塊負責對地圖要素位置幾何形狀的描述,包含Geometry(幾何形狀)、Envelope(範圍)、Point(點)、Polyline(折線)、Polygon(多邊形)等組件類的定義;GridMap模塊負責電子地圖的統一管理,包含Map組件類;MapLayer模塊負責電子地圖中多種圖層的描述與管理,目前僅包含Layer(圖層)、FeatureLayer(要素圖層)、ImageLayer(柵格圖像圖層)組件類的定義。Indexing模塊負責實現電子地圖空間索引的功能,加速地圖的顯示與處理速度。Util模塊包含一些專用的工具類。目前我們已經完成基於Windows CEWindows Mobile平臺,採用C++語言編寫的嵌入式GIS引擎並封裝爲可供二次開發的組件包。完成採用基於J2ME,採用java編寫的手機GIS引擎,能夠在當今具有java虛擬機的手機上運行(讀取本地數據採用JSR75標準,需要手機能夠支持JSR75)。

全局上本引擎的優勢在於:

1.採用緩衝技術在後臺預先讀取下次可能顯示的地圖要素到內存緩衝區,這樣能最大限度的利用處理器,提升地圖繪製的速度。這樣的設計主要體現在Geodatabase模塊和Indexing模塊中。

2.利用多線程技術來控制繪圖請求的響應、緩衝區容量的控制等。除主線程之外,還採用畫圖線程、緩衝區整理線程。

3.採用網格索引硬裁切技術配合多層次網格索引結構來加速圖形的繪製。在地圖處理階段,我們使用自制的切圖工具將地圖切爲若干個小塊,使用網格索引來管理這些小塊,並按照Hilbert順序寫入這個小塊到文件中,提升小塊地圖在空間上的連續性。網格索引也寫入文件。在運行時,引擎將網格索引在內存中快速還原,然後查詢網格索引得到需要加載的小塊,再使用Geodatabase模塊裝載地圖要素的內存。

4.我們採用將地圖要素附加屬性與地圖圖形及標註屬性分離的形式管理地圖,極大的降低了系統加載地圖的數據量。

一些重點結構的說明:

1.本引擎採用兩層過濾的方式快速過濾需要繪製和標註的圖元。DataProvider類通過使用GridIndex來進行第一次過濾,FeatureLayer類對第一次過濾的結果再次過濾。

2.數據裝載過程說明:①DataProvider類查詢GridIndex獲得當前需要加載的GridNodeDataProviderGridNode所屬Feature從文件中讀取到內存,並關聯到GridNode下。

模塊間層次關係如圖1

 

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