歐 濤 程 論

摘要 本文首先介紹了基于GIS的船舶監控系統的需求和總體設計。系統的設計使用多層體系結構將系統分為5層:包含傳統的表示層、業務邏輯層、數據庫層,還包含了數據訪問層和表示選擇層,而且這兩層是以組件的方式實現具有很大的通用性;系統的體系結構風格是異構體系風格的“查改有別”模型即混合使用了C/S和B/S體系結構風格,然后在系統的實現部分詳細介紹了基于XML的子模塊插件化技術的實現,最后簡單介紹了系統的特色子模塊的實現。
關鍵詞 插件;GIS;異構體系結系;Geomedia;船舶監控;XML
中圖分類號 TP273 文獻標識碼 A 文章編號 1674-6708(2009)07-0051-03
The Design and Development of Ship Monitoring System Base on GIS
OU Tao1,CHENG Lun 2
1.Shanghai Maritime University ,Engineering Training Center,Shanghai 201306,China
2. Department of Electronic and Information Engineering,Tongji University ,Shanghai 200135,China
Abstract This paper introduces the Design and Requirement of a ship monitoring System base on GIS at first. The design of our system is the multi-layer architecture that divides the system into five layers: UI layer, UI locator layer, business layer, data access layer and database layer. The UI locator layer and data access layer was implemented with component can be reused in other system or platform. The software architecture style of our system was designed as isomerous architecture style that uses the C/S style to query module and B/S style to modification module. In the last part of this paper we discuss the implement of plug-in technology base on XML and the implement of special module of our system in detail.
KeyWords Plug-in;GIS;Isomerous architecture;Geomedia;Ship Monitoring;XML
0 引言
隨著海運業的發展,各港口進出的船舶數目急劇增加,而傳統的船舶管理方式已不能滿足中大型港口的要求。隨著GIS的發展,GIS在各行業監控系統的應用也越來越廣泛,所以開發基于GIS的船舶監控系統,正是為了緩解港口船舶管理強度和提高港口工作效率。基于GIS的船舶監控系統主要是利用GIS將港口的地貌電子地圖顯示于顯示設備,并通過港口的各種設備采集船舶的相關數據,例如,船舶的航速,當前坐標信息等動態信息和船名、船的國籍等靜態信息,根據這些信息在電子地圖上顯示船舶的位置并預計船的航向,還有保存這些信息以供查詢。
本文從設計和實現角度介紹筆者開發的系統,首先,描述的是系統的設計:介紹本系統的的需求和實現的目標;然后介紹本系統使用的是多層體系結構,相對傳統的三層體系結構中間添加了兩層,即表示選擇層和數據訪問層,而系統的體系結構風格是采用異構體系風格的“查改有別”模型,這種風格混合使用了C/S和B/S結構兼有兩種體系結構的優點。其次,描述的是系統的實現:詳細介紹系統的子模塊的插件化技術。本系統的框架是一個用于存放統一接口插件的容器,而系統的所有子模塊是具有指定接口的插件并以相同的方式集成到系統中。最后簡單介紹了系統中的特色模塊——地圖顯示及操作模塊的實現。
1 系統需求和結構的設計
1.1 系統需求
大多數基于GIS的船舶監控系統的需求比較相似,本系統基本實現了以下功能:
1)數字地圖的顯示及操作:在數字地圖上顯示各船舶的實時位置及航行軌跡;
2)設置和管理報警區域、報警策略,根據數字地圖中的船舶情況,對處于危險情況的船舶發送報警信息;
3)航行軌跡回放及歷史數據調閱,以供事故分析或事故證明;
4)接收并顯示業務統計結果和服務信息抽樣比對結果;
5)統計用戶各類歷史使用情況;
6)管理和配置本系統中系統管理員、監控目標、監控員、GIS 管理員的基本信息、權限等。
1.2系統結構總體結構設計
本人所構建的系統是基于Intergraph公司的Geomedia Professional Objects組件技術,使用Microsoft C# 語言和ASP.Net,在Visual Studio.Net 編譯器下開發的。系統的總體結構是多層體系結構,總共分為5層,詳見系統總體結構圖(如圖1)。
本系統的體系結構風格是使用異構體系結構風格的“查改有別”模型。在C/S與B/S混合軟件體系結構的“查改有別”模型中,不管用戶是通過什么方式(局域網或Internet)連接到系統,凡是需要執行維護和修改數據操作的,就使用C/S體系結構;如果只是執行一般的查詢和瀏覽操作,則使用B/S體系結構[2]。本系統使用C/S體系結構的子模塊有:矢量圖形增刪模塊、系統安全維護模塊、系統配置模塊,而其他系統則使用了B/S體系結構實現。
圖1系統總體結構圖
在第一層表示層和第三層業務邏輯層之間有一層是表示選擇層,該層是實現異構風格的“查改有別”模型的關鍵點,通過這一層可以配置和修改系統業務子模塊的表示方式,該層的主要作用是根據下層模塊的特點和用戶的要求,選擇該模塊的表示方式。種種模塊的表示方式分為兩種:一種是Windows Form 風格對應于C/S結構;一種是Web Form 風格對應于B/S結構。系統中的業務邏輯層的每個子模塊可以實現一種或兩種表示方式供用戶使用。如,對于一些遠程用戶只是查詢和瀏覽的功能模塊,其表示層可以使用B/S或C/S結構;而需要維護和修改或數據交換量比較大的功能模塊,其表示層僅使用C/S結構,而且限于局域網內擁有相應權限的用戶使用,以提高系統的安全性。
在第四層數據訪問層中,有兩種類型的數據訪問對象模型,一種是Geomedia Professional Objects 的GDO, GDO是Intergraph公司專門針對地圖數據庫操作而封裝的一系列數據操作類,提供了一系列的接口,通過這些接口簡化了對地圖數據庫的所有操作;另外一種是Microsoft 的ADO.Net,其功能是用于對事務數據庫的操作,包含數據庫中所有對象的創建、查詢和修改,提供對事務數據庫的訪問功能。
最后一層數據庫層中,將 GIS的地圖數據庫與事務數據庫分離。這兩種數據庫甚至可以使用不同的數據庫管理系統。由于GIS數據庫中主要保存的是靜態的地圖矢量數據,而且地圖數據庫一般不需修改,規模也不大;整個系統的其他模塊保存的數據是傳統的事務數據,而且數據量也很大,對并發要求也比較高,所以將兩種數據庫分離,GIS數據庫可以使用較小的數據庫管理軟件以節約成本,事務數據庫可以使用較大型的數據庫以提高效率,如:SQL Server,Oracle等。
2 子模塊的插件化技術的實現
系統的擴展性是任何系統設計必須考慮的重要因素。從本系統的模塊劃分中看到,系統擁有港口管理信息系統的基本信息:港口地貌信息,港口所有船舶的動靜態信息,而利用這些信息構建新的功能模塊。例如,引航子系統正是基于上述兩個信息再根據港口的天氣信息,海洋的潮汐等信息而構建的。所以,在本系統的設計過程中,使用了基于XML的插件框架來支持系統的擴展性。
所謂插件,是系統的擴展功能模塊,這個模塊是以一個獨立文件的形式出現并與系統是相對獨立的。當開發人員編譯發布系統之后,用戶有新的需求或不同用戶為滿足其特殊需求而需要不同的功能,在修改已有功能模塊或添加新的功能模塊時,需要重新編譯整個系統,此時常常會因為某個模塊的錯誤而導致整個系統的編譯生成失敗,但是,使用插件技術構建的系統可以達到上述要求而不需要重新編譯系統,系統的后續開發能力大大增強。本系統所獲得的船舶的動靜態信息和港口的地貌信息是許多港口管理子系統的基礎信息,。如果將這些信息提供給引航子系統,引航員利用這些信息引航時,可以選擇空閑的航道引航;也可以利用船舶的位置和航速信息預計船舶的航向,避免船只在航行過程中碰撞。所以本系統使用插件技術可以極大的提高了系統的擴展性。
插件系統的實現包含兩個部分:
1)插件系統的初始化,功能是:在系統啟動時,搜索指定插件目錄的插件配置文件,然后按配置文件指定的插件代碼位置裝載代碼并運行插件代碼。所有的插件是統一的接口的子類,所以可以在系統初始化時遍歷運行收集的所有插件,激活所有插件。示例代碼如下:
public void InitializeAddin(){
ICommand [] commands = AddInSingleton.AddIns.GetItems(null);
for(int i = 0; i < commands.Length; i++){
commands[i].Run();
}
}
系統在裝載所有系統的子模塊即系統的初始化時,顯示軟件系統的主界面是作為最后一個服務啟動的,所以顯示主界面ShowWindow()函數是在InitializeAddin()函數后被調用。
2)插件的實現:系統中的所有子模塊為一個插件,每個插件是由兩個文件構成,一個是代碼文件(Assembly),另一個是插件的配置文件(XML文件)。本系統是基于windows操作系統的,每個功能模塊的代碼是存放在一個動態連接庫文件中,而且每個功能模塊的都繼承至一個接口(本系統中是ICommand接口),這個接口使模塊有一個唯一的運行入口點。以下是ICommand接口和地圖操作模塊的簡要代碼描述:
public interface ICommand{
void Run();
}
public class MapOperation : ICommand{
public void Run(){
….
}
}
系統的配置文件是使用XML編寫的,格式如下
author = "Chenglun" copyright = "SMU-CS-CL" url = "-" description = "Operat the map module" version = "1.0.0">
其中的DLLFile標簽的字段內的路徑是該模塊的代碼文件的相對于插件配置文件的相對位置,Module標簽的path屬性是標志下面的子標簽MenuItem描述的項是在主界面中的位置,MenuItem的Label是在界面上顯示的文字。
3 地圖顯示及操作模塊的實現
本系統靜態地圖的顯示功能模塊主要是通過過濾器從地圖數據源(地圖數據庫或地圖數據文件)讀入所需數據至內存,之后按照一定的坐標系統顯示地圖若干或全部圖層。地圖顯示中的地圖數據是使用Geomedia的GDO組件將數據從地圖數據庫(Access 或者 SQL Server 等)中讀出,再通過過濾器OriginatingPipe類讀入所需數據,送至MapView組件在屏幕顯示。在實現過程中,數據庫的連接使用了簡單工廠模式,編寫了GDataAccessFactory類,根據不同參數自動選擇創建相對應的數據庫連接。
靜態地圖的操作模塊的實現中使用Observer模式,Observer模式由主體類和觀察者類組成。主體類GOpEventHandler封裝了某種操作功能對應的一個鼠標事件的處理過程,觀察者類GEventControl封裝了事件捕獲組件并包含了一個主體對象的容器GEventContainer。觀察者從系統捕獲事件后,通知在主體對象容器中與該事件有關的所有主體對象,并把執行權按順序交給主體對象來處理事件響應。
4 結論
基于GIS的船舶監控系統是港口管理系統中一個基本和重要的子系統。該子系統中獲取了港口所有船舶的動靜態信息,港口地貌信息。這些信息是很多港口管理系統其它子系統的必須信息,如引航子系統,錨地管理子系統,危險區域管理子系統,還有航道管理子系統等等。系統的后續開發中可以將其他的子系統做為本系統的子模塊逐步添加到系統中,利用系統的插件框架,在系統部署運行后添加的新子模塊,既使得多個系統共享相同的數據源,減少數據在不同系統之間的交換,增加系統的實時性,又可以降低客戶對軟件成本的投入。
系統中的動態船舶監控模塊對信息的實時性要求比較高,特別是在大型和超大型港口中同時刻的船舶的數目很多時,數據的采集和采集后的實時顯示對系統的效率要求特別高。為避免顯示刷新時間太長,提高系統的實時性,可以通過暫時的系統硬件升級,而使用并行處理技術處理過濾顯示數據才是我們認為的一個極有潛力的方向。
參考文獻
[1]Eric gamma,Richard helm,Ralph Johnson,John Vlissides.Design Patterns:The Element of Reusable Object-Oriented Software.Addison Wesley,Massachusetts, 1995.
[2]張友生.軟件體系結構.北京:清華大學出版社,2004.
[3]James Rumbaugh,et al.Object-Oriented Modeling and Design.北京:中國電力出版社,2004.
[4]Sherif M.Yacoub,Hany H.Ammar.Pattern-Oriented Analysis and Design Composing Patterns to Design Software Systems(影印版).北京:中國電力出版社,2004.
[5]Tom Archer,Andrew Whitechapel.馬朝暉,等譯.C# 技術揭密.北京:機械工業出版社,2003.
[6]Christian Holm,Mike Kruger.Dissecting a C# Application Inside SharpDevelop.Apress L.P.Berkely,2003.