張 恒,劉 群
(四川建筑職業(yè)技術(shù)學(xué)院,四川德陽(yáng) 618000)
GIS開(kāi)發(fā)中可重用組件資源庫(kù)的設(shè)計(jì)
張 恒,劉 群
(四川建筑職業(yè)技術(shù)學(xué)院,四川德陽(yáng) 618000)
傳統(tǒng)的 GIS系統(tǒng)開(kāi)發(fā)多采用結(jié)構(gòu)化的設(shè)計(jì)思想,對(duì)于不同 GIS信息系統(tǒng)的建設(shè),需要重復(fù)去設(shè)計(jì)、開(kāi)發(fā)相關(guān)模塊,開(kāi)發(fā)效率較低。將組件重用思想應(yīng)用到GIS開(kāi)發(fā)實(shí)踐中,總結(jié)了組件、組件重用思想及組件開(kāi)發(fā)流程,探討了GIS開(kāi)發(fā)中可重用接口的設(shè)計(jì)思路,包括:空間數(shù)據(jù)庫(kù)連接和圖層加載接口設(shè)計(jì),數(shù)據(jù)查詢(xún)和維護(hù)接口設(shè)計(jì),空間分析接口設(shè)計(jì)。應(yīng)用實(shí)踐表明,基于可重用組件的GIS系統(tǒng)開(kāi)發(fā),可以高效、快速地開(kāi)發(fā)出更穩(wěn)定的應(yīng)用系統(tǒng),顯著降低開(kāi)發(fā)成本。
組件式地理信息系統(tǒng);基于組件開(kāi)發(fā);重用
隨著組件和中間件技術(shù)(如 COM、CORBA、JavaBeans)的普及,越來(lái)越多的GIS開(kāi)發(fā)者采用面向?qū)ο蟮脑O(shè)計(jì)模式(如 UML)、面向?qū)ο蟮木幊陶Z(yǔ)言(如C#、VB.NET)和COMGIS組件來(lái)開(kāi)發(fā)GIS應(yīng)用系統(tǒng)。在系統(tǒng)開(kāi)發(fā)中,COMGIS組件僅提供對(duì)空間數(shù)據(jù)進(jìn)行輸入、存儲(chǔ)、處理、分析、輸出等功能的基類(lèi)、控件和接口,為了開(kāi)發(fā)出完整實(shí)用的應(yīng)用系統(tǒng),GIS開(kāi)發(fā)者還應(yīng)充分分析這些控件間的內(nèi)在聯(lián)系,對(duì)其進(jìn)行二次集成和深加工,開(kāi)發(fā)出新的可重用模塊。因此,深入分析應(yīng)用型GIS系統(tǒng)的通用功能,設(shè)計(jì)并開(kāi)發(fā)可重用組件,這無(wú)疑是GIS開(kāi)發(fā)者需要深刻思考的問(wèn)題。本文以空間分析組件的設(shè)計(jì)和開(kāi)發(fā)為例,介紹應(yīng)用型GIS系統(tǒng)開(kāi)發(fā)中可重用組件的設(shè)計(jì)方法,供GIS開(kāi)發(fā)人員參考。
組件(Component),是一些獨(dú)立代碼的封裝體,提供一定的功能。組件具有高度封裝、可復(fù)用、穩(wěn)定性好、易維護(hù)升級(jí)等特點(diǎn)[1,2,4]。COM組件,是按照COM規(guī)范編寫(xiě)的,以動(dòng)態(tài)鏈接庫(kù)(ActiveX DLL)或?qū)ο箢?lèi)別擴(kuò)充組件(OCX)等形
式發(fā)布的可執(zhí)行二進(jìn)制代碼,它為建立可伸縮的信息系統(tǒng)提供了極大的便利。隨著組件化軟件開(kāi)發(fā)技術(shù)的流行和日趨成熟,GIS軟件公司在組件框架的約束下,結(jié)合GIS行業(yè)的特點(diǎn)和應(yīng)用,推出了面向行業(yè)應(yīng)用的COMGIS組件,使組件粒度進(jìn)一步細(xì)化和行業(yè)化。COMGIS組件的基本思路是:把GIS的各種功能模塊劃分為不同類(lèi)型的控件,每個(gè)控件完成各自相應(yīng)的功能。COMGIS存在的目的是向外界(應(yīng)用框架、其他組件或者最終用戶(hù))提供GIS數(shù)據(jù)顯示、分析、處理等功能的專(zhuān)業(yè)服務(wù)??梢?jiàn),COMGIS根據(jù)組件規(guī)范的要求,封裝了GIS專(zhuān)業(yè)功能,實(shí)現(xiàn)了相應(yīng)的接口,GIS開(kāi)發(fā)人員需要進(jìn)一步將COMGIS組件、開(kāi)發(fā)語(yǔ)言和數(shù)據(jù)庫(kù)集成起來(lái),開(kāi)發(fā)出滿(mǎn)足行業(yè)需求的應(yīng)用系統(tǒng),其實(shí)質(zhì)是將各類(lèi)異構(gòu)系統(tǒng)提供的組件重組。
軟件重用是指通過(guò)可重用組件來(lái)組裝、集成、構(gòu)建和更新軟件系統(tǒng)[1-2]。組件的重用性依賴(lài)于組件的粒度大小、實(shí)現(xiàn)功能、通用性、組合方式、準(zhǔn)確性、容錯(cuò)性等因素。組件重用的粒度可大可小,小到普通子函數(shù)、接口、類(lèi)庫(kù)的重用,大到整個(gè)軟件體系的重用[1,4],這些重用提供了一套解決某類(lèi)共性問(wèn)題的思路和參考代碼,使開(kāi)發(fā)者無(wú)需重復(fù)制定方案,只需做適當(dāng)?shù)男薷暮屯晟?。組件重用的目標(biāo)是讓開(kāi)發(fā)者充分利用現(xiàn)有的組件組裝應(yīng)用程序,而不需要考慮這些組件是如何開(kāi)發(fā)的??梢?jiàn),利用可重用組件來(lái)開(kāi)發(fā)GIS應(yīng)用軟件,開(kāi)發(fā)者將從繁重、瑣碎的底層重復(fù)代碼編程中得以解脫,不僅極大地減少了軟件開(kāi)發(fā)的工作量,而且顯著降低了軟件開(kāi)發(fā)的成本,提高了軟件的質(zhì)量。
組件開(kāi)發(fā)流程如下:1)組件抽象與設(shè)計(jì);2)組件編程實(shí)現(xiàn);3)組件功能測(cè)試;4)組件評(píng)價(jià)與更新。組件的抽象是按照業(yè)務(wù)邏輯來(lái)抽象組件的功能,為了便于表達(dá)和理解,可將組件實(shí)現(xiàn)的功能抽象為業(yè)務(wù)邏輯圖,并使用邏輯圖之間的聯(lián)系來(lái)表達(dá)組件之間的關(guān)系。組件的設(shè)計(jì)包括組件接口的抽象、定義、多態(tài)性表達(dá)、實(shí)現(xiàn)代碼和接口之間的關(guān)聯(lián)表達(dá)。通常,組件由若干功能接口組成,接口是一組相關(guān)操作的集合,通常用于實(shí)現(xiàn)某項(xiàng)功能或說(shuō)明某個(gè)行為。組件接口的實(shí)現(xiàn)需要充分利用現(xiàn)有的各種組件(COMGIS組件和非GIS組件),定制、開(kāi)發(fā)出滿(mǎn)足應(yīng)用需求的功能函數(shù),即按照功能將各類(lèi)異構(gòu)組件重組和集成。在應(yīng)用系統(tǒng)開(kāi)發(fā)時(shí),COM對(duì)象通過(guò)接口與外界交互,客戶(hù)程序是利用接口提供的成員函數(shù)來(lái)獲得組件對(duì)象提供的服務(wù)。因此,接口的設(shè)計(jì)是組件設(shè)計(jì)的核心工作,接口的通用性決定了組件的可重用能力。用戶(hù)在設(shè)計(jì)組件時(shí),應(yīng)注意組件設(shè)計(jì)的粒度不易過(guò)大,設(shè)計(jì)的每一類(lèi)組件最好能實(shí)現(xiàn)某一類(lèi)相似的應(yīng)用請(qǐng)求;而組件接口的設(shè)計(jì)應(yīng)簡(jiǎn)單實(shí)用,同時(shí)具有可擴(kuò)充性。設(shè)計(jì)的組件通常封裝為類(lèi),用戶(hù)可通過(guò)對(duì)象聲明及實(shí)例化類(lèi)的方式使用,通過(guò)多態(tài)或繼承機(jī)制進(jìn)行功能擴(kuò)展。組件測(cè)試是指通過(guò)模擬測(cè)試項(xiàng)目或程序,對(duì)組件接口的功能、容錯(cuò)性等進(jìn)行測(cè)試,及時(shí)發(fā)現(xiàn)問(wèn)題并改正。組件評(píng)價(jià)與更新是指依據(jù)組件的重復(fù)利用率、業(yè)務(wù)邏輯及功能,進(jìn)一步改進(jìn)、完善和升級(jí)組件。
GIS應(yīng)用系統(tǒng)的主要特點(diǎn)是對(duì)空間數(shù)據(jù)的處理和分析能力,而常見(jiàn)COMGIS組件工具僅提供了基本的空間數(shù)據(jù)操作和分析功能,GIS開(kāi)發(fā)者需要充分利用這些基本功能,通過(guò)組合和繼承的方式進(jìn)行功能擴(kuò)充[1,2,4],從而開(kāi)發(fā)出可供不同GIS系統(tǒng)使用的通用接口函數(shù)。本文以COMGIS組件工具--SuperMap Objects為例來(lái)說(shuō)明可重用空間分析組件的設(shè)計(jì)思路。
3.1 空間數(shù)據(jù)庫(kù)連接和圖層加載接口
數(shù)據(jù)庫(kù)連接接口的設(shè)計(jì)既可針對(duì)特定的數(shù)據(jù)庫(kù)開(kāi)發(fā)相應(yīng)的接口,也可將用戶(hù)對(duì)不同類(lèi)型數(shù)據(jù)庫(kù)的操作以多態(tài)的形式進(jìn)行封裝。該接口的核心思想如下:編寫(xiě)數(shù)據(jù)庫(kù)連接子函數(shù),按照用戶(hù)輸入的信息構(gòu)建字符串連接參數(shù)并連接數(shù)據(jù)庫(kù)。如果連接失敗,則給出提示信息;如果連接成功,則通過(guò)SuperMap Objects提供的工作空間接口打開(kāi)空間數(shù)據(jù)源,加載空間數(shù)據(jù)集并設(shè)置圖層的顯示風(fēng)格。在系統(tǒng)退出時(shí),通過(guò)定制的子函數(shù)斷開(kāi)應(yīng)用系統(tǒng)和數(shù)據(jù)庫(kù)的連接,釋放系統(tǒng)資源。
相關(guān)接口函數(shù)的設(shè)計(jì)如下:1)屬性數(shù)據(jù)庫(kù)連接接口,通過(guò)開(kāi)發(fā) ConnectDB(字符串連接參數(shù))函數(shù)連接各類(lèi)DBMS;2)空間數(shù)據(jù)庫(kù)連接接口,開(kāi)發(fā)OpenDB(數(shù)據(jù)庫(kù)服務(wù)器名稱(chēng)、數(shù)據(jù)庫(kù)名稱(chēng)、數(shù)據(jù)庫(kù)別名、用戶(hù)名、密碼)函數(shù),返回值類(lèi)型為布爾型,表示空間數(shù)據(jù)庫(kù)連接是否成功。其中,關(guān)鍵語(yǔ)句如下:采用Super-Workspace.OpenDataSourceEx(數(shù)據(jù)源文件全路徑名、數(shù)據(jù)源標(biāo)識(shí)名、數(shù)據(jù)源引擎類(lèi)型、是否只讀、是否事務(wù)、是否獨(dú)占、是否加密、密碼字符串)方法來(lái)打開(kāi)空間數(shù)據(jù)源。用戶(hù)可通過(guò)編寫(xiě) OpenDB函數(shù)的多態(tài)性接口,打開(kāi)存放于各種媒介中(如 SDB文件、各類(lèi)DBMS)的空間數(shù)據(jù)源;3)圖層加載及顯示風(fēng)格定義接口,通過(guò)編寫(xiě) LoadDataset(圖層名稱(chēng)、顯示風(fēng)格參數(shù))函數(shù)實(shí)現(xiàn),可通過(guò)LoadDataset接口的多態(tài)性,加載不同類(lèi)型的圖層(如點(diǎn)、線(xiàn)、面、文本數(shù)據(jù)集)并設(shè)置其風(fēng)格。關(guān)鍵語(yǔ)句如下:采用 SuperMap.Layers. AddDataset(加載的數(shù)據(jù)集,是否放置到最頂層)方法加載數(shù)據(jù)集,通過(guò)soLayer對(duì)象設(shè)置圖層的各種專(zhuān)題顯示風(fēng)格;4)斷開(kāi)數(shù)據(jù)庫(kù)連接接口,開(kāi)發(fā)CloseAll()函數(shù)實(shí)現(xiàn),該函數(shù)應(yīng)關(guān)閉數(shù)據(jù)庫(kù),斷開(kāi)用戶(hù)對(duì)空間數(shù)據(jù)庫(kù)的連接,釋放地圖窗口、工作空間等SuperMapObjects組件占用的系統(tǒng)資源。
3.2 數(shù)據(jù)查詢(xún)和維護(hù)接口
數(shù)據(jù)查詢(xún)和維護(hù)功能是GIS應(yīng)用系統(tǒng)中頻繁使用的關(guān)鍵功能,查詢(xún)的目的是按照某些過(guò)濾條件查找出用戶(hù)關(guān)心的信息(如空間分布、描述性屬性等),并對(duì)其進(jìn)行定位、瀏覽、維護(hù)(修改、刪除、更新)、統(tǒng)計(jì)分析等操作。在數(shù)據(jù)查詢(xún)和維護(hù)接口設(shè)計(jì)中,組件重用思想主要體現(xiàn)在以下的應(yīng)用中:1)界面和框架的重用,即針對(duì)不同的行業(yè)應(yīng)用,定制類(lèi)似的查詢(xún)界面和窗體布局,其區(qū)別在于不同的應(yīng)用中后臺(tái)數(shù)據(jù)庫(kù)表單、字段和用戶(hù)輸入的查詢(xún)信息不同;2)SQL操作子函數(shù)的重用,即編寫(xiě)LoadQueryData(SQL語(yǔ)句、數(shù)據(jù)填充容器)函數(shù),根據(jù)用戶(hù)選擇或輸入的查詢(xún)條件,枚舉所有的SQL語(yǔ)句,然后調(diào)用該函數(shù),將滿(mǎn)足SQL條件的記錄加載到數(shù)據(jù)填充容器中。具體應(yīng)用時(shí)可分為兩種情況:即對(duì)純屬性表單的操作和對(duì)空間表單的操作。前者可通過(guò)輸入規(guī)范的SQL語(yǔ)句或存儲(chǔ)過(guò)程,可以是查詢(xún)、修改、刪除等語(yǔ)句,然后調(diào)用該函數(shù)執(zhí)行相應(yīng)的操作,并返回執(zhí)行的結(jié)果;后者可通過(guò)soDatasetVector. Query(查詢(xún)條件、是否查詢(xún)空間數(shù)據(jù)、字段列表、查詢(xún)選項(xiàng))查詢(xún)滿(mǎn)足條件的記錄集,而在數(shù)據(jù)更新時(shí),應(yīng)找到某個(gè)空間實(shí)體對(duì)應(yīng)的唯一標(biāo)示號(hào)(即"Sm ID"號(hào)),然后更新空間表中的屬性字段(一般只更新空間表中用戶(hù)自定義的屬性字段,空間表中系統(tǒng)自動(dòng)生成的字段不能修改)。
此外,用戶(hù)還需開(kāi)發(fā)事務(wù)控制函數(shù)來(lái)保障數(shù)據(jù)的完整性、一致性和并發(fā)操作控制。即在執(zhí)行SQL語(yǔ)句之前,需要開(kāi)啟事務(wù),正確執(zhí)行SQL語(yǔ)句之后,通過(guò)提交事務(wù)完成對(duì)表單的更新;如果在更新的時(shí)候出現(xiàn)了任何異常,應(yīng)給出提示并回退到更新前的狀態(tài)。
3.3 空間分析接口
在開(kāi)發(fā)實(shí)踐中,空間分析接口涉及的函數(shù)較多,用戶(hù)可根據(jù)SuperMap Objects提供的對(duì)象靈活組合,定制功能實(shí)用的接口函數(shù),本文以下列典型空間接口函數(shù)為例進(jìn)行說(shuō)明。
1)緩沖區(qū)分析函數(shù):開(kāi)發(fā)AddBufferToMap(數(shù)據(jù)集類(lèi)型、類(lèi)型參數(shù)、緩沖區(qū)半徑)函數(shù),在SuperMap的TrackingLayer(臨時(shí)層)上添加單個(gè)點(diǎn)、線(xiàn)、面實(shí)體的緩沖區(qū);2)動(dòng)態(tài)標(biāo)注函數(shù):開(kāi)發(fā)LabelLayer(圖層、標(biāo)注字段、標(biāo)注風(fēng)格)函數(shù),使用戶(hù)采用某一標(biāo)注字段和風(fēng)格對(duì)某一圖層進(jìn)行標(biāo)注;3)地圖定位函數(shù):開(kāi)發(fā)LocateMapObject(地圖控件、圖層名稱(chēng)、定位條件)函數(shù),使用戶(hù)可根據(jù)定位條件快速地定位某個(gè)圖層上滿(mǎn)足條件的空間數(shù)據(jù);4)路徑分析接口函數(shù),開(kāi)發(fā)FindShortPath(起始節(jié)點(diǎn)號(hào)、終止節(jié)點(diǎn)號(hào))函數(shù),其關(guān)鍵函數(shù)為SoNetworkAnalyst對(duì)象提供的FindPath、FindPath2等方法。開(kāi)發(fā) MarkSelectedPoint(x坐標(biāo),y坐標(biāo))函數(shù),在地圖上實(shí)時(shí)標(biāo)注用戶(hù)選擇的拓?fù)涔?jié)點(diǎn);5)屬性統(tǒng)計(jì)函數(shù),開(kāi)發(fā)StatAttribute(記錄集、統(tǒng)計(jì)字段、排序字段)函數(shù),按照某個(gè)字段統(tǒng)計(jì)指定記錄集中的信息并排序;6)三維分析函數(shù),主要采用Super3D控件提供的方法組合來(lái)實(shí)現(xiàn)常見(jiàn)的三維分析功能,如三維場(chǎng)景生成、三維圖形基本操作、水淹模擬、三維圖片輸出等功能。
組件重用技術(shù)和面向?qū)ο蠹夹g(shù)集成產(chǎn)生的COMGIS正在引導(dǎo)著GIS應(yīng)用系統(tǒng)開(kāi)發(fā)的方向,推動(dòng)著GIS軟件的系統(tǒng)集成化和應(yīng)用大眾化。GIS開(kāi)發(fā)者根據(jù)COMGIS提供的基本空間分析組件,將其靈活組合或繼承發(fā)展而創(chuàng)建用戶(hù)自定義的組件庫(kù)和接口函數(shù),進(jìn)而提供給不同的GIS系統(tǒng)使用,這無(wú)疑是快速開(kāi)發(fā)高效、安全、健壯的GIS應(yīng)用系統(tǒng)的有效途徑。因此,將組件重用思想進(jìn)一步應(yīng)用于GIS系統(tǒng)的研發(fā),從開(kāi)發(fā)者的角度研究GIS和非GIS通用接口的實(shí)現(xiàn),從最小粒度研究組件重用,將具有深遠(yuǎn)的意義和極具潛力的應(yīng)用前景。
[1] Katharine Whitehead.基于組件開(kāi)發(fā)[M].北京:人民郵電出版社,2003
[2]DON BOX(著),潘愛(ài)民(譯).COM本質(zhì)論[M].北京:中國(guó)電力出版社,2001
[3] 吳信才,鄭貴洲,謝忠,等.地理信息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[M].北京:電子工業(yè)出版社,2002
[4] 張文江,陳秀萬(wàn),李京,等.基于COM組件技術(shù)的GIS空間模型庫(kù)研究[J].中國(guó)圖像圖形學(xué)報(bào),2003,8(1):110-114
[5] Diomidis Spinellis(著),趙學(xué)良(譯).代碼閱讀方法與實(shí)踐[M].北京:清華大學(xué)出版社,2004
[6] 張恒.基于COMGIS的工程圖文信息管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:西南交通大學(xué),2007
[7] 李志毅,趙政.軟件復(fù)用與COM及.NET組件技術(shù)[J].微處理機(jī),2006(6):57-60
Design of the Reuse Component Resources in the GIS Development
by Zhang Heng veloped by adopting
The traditional GIS application is mostly destructured design thought,needs repetition o f the design,develops related module,the efficiency of development is lower.So this paper introduced the reusable com ponents to the GIS application development practice,summed up the component,component reuse thought,component development process, discussed the reuse interface design thoughts of GIS development,including: spatial database interoperation and layer loading interface design,data query and maintenance interface design,spatial analysis interface design.Practice shows that the GIS system development based on reusable components can be highly efficient and rapid developed amore stable system,the development costs can be significant reduced.
COMGIS,Com ponent-Based Development(CBD),reuse(Page:36)
P208
B
1672-4623(2011)01-0036-03
2009-06-08
張恒,碩士,講師,研究方向?yàn)榈乩硇畔⑾到y(tǒng)開(kāi)發(fā)及應(yīng)用。