華東師范大學(xué)地理信息系統(tǒng)教育部重點(diǎn)實(shí)驗(yàn)室 張 弟 吳健平
近年來GIS開源軟件發(fā)展很快,DotSpatial是眾多GIS開源軟件中功能比較全面、擴(kuò)展性比較好的一款,它提供空間數(shù)據(jù)的處理、分析、投影等功能。目前已有很多其他開源GIS軟件使用DotSpatial提供的功能,但是DotSpatial存在著與其它開源軟件相同的不足之處,比如官方開發(fā)文檔及幫助資料少,對GIS數(shù)據(jù)格式的支持不夠全面等。而傳統(tǒng)的GIS商業(yè)軟件雖然開發(fā)文檔齊全,支持多種GIS數(shù)據(jù)格式,但是授權(quán)昂貴,并且安裝占用大量的磁盤空間。由于商業(yè)因素,商業(yè)GIS軟件源代碼和關(guān)鍵算法受到嚴(yán)格保護(hù),不利于學(xué)術(shù)研究。因此研究和完善開源GIS軟件在學(xué)術(shù)和商業(yè)方面都有著重要意義,而DotSpatial是一個(gè)比較新的開源類庫,目前對其研究的文章還很少。綜合上述因素,本文介紹了DotSpatial的架構(gòu),深入研究了其提供的擴(kuò)展機(jī)制,最后利用官方提供的模版擴(kuò)展實(shí)現(xiàn)了DotSpatial對NetCDF數(shù)據(jù)的讀取與渲染。這種擴(kuò)展方法具有一定的通用性,可以用來實(shí)現(xiàn)讓DotSpatial支持更多種類的GIS數(shù)據(jù)。
DotSpatial是一套基于.Net Framework 4.0平臺開發(fā)的開源GIS類庫,整套類庫是使用C#語言編寫完成,以GNU LGPL授權(quán)(GNU Library General Public License)形式開放源代碼,目前整個(gè)項(xiàng)目由幾十個(gè)開發(fā)者共同維護(hù),并且不斷地有新的開發(fā)人員參其中。DotSpatial官方網(wǎng)址為http://dotspatial.codeplex.com,網(wǎng)站主要包括源代碼、類庫、說明文檔、討論區(qū)、主要開發(fā)者、授權(quán)文檔等幾個(gè)部分。
DotSpatial的類庫可供其他程序直接調(diào)用,Mapwindow 6、Hydrodesktop、Mad、Area of Review、Marine Life等開源GIS軟件使用了DotSpatial的類庫提供的功能。為了讓開發(fā)者迅速熟悉這套類庫,官網(wǎng)提供了一個(gè)已經(jīng)編譯好的簡易示例程序。該程序支持Shapefile文件,實(shí)現(xiàn)了縮放、平移等常見GIS操作,并且支持?jǐn)U展。
目前DotSpatial整個(gè)類庫實(shí)現(xiàn)的功能包括:
①顯示地圖;②支持Shapefile,Bgd,以及其它常用的柵格數(shù)據(jù)和遙感影像數(shù)據(jù);③渲染符號和標(biāo)簽;④支持動(dòng)態(tài)投影和投影變換,WGS84為默認(rèn)投影方式;⑤支持屬性數(shù)據(jù)的編輯和顯示;⑥支持空間分析,包括疊加分析、緩沖區(qū)分析、差值分析、空間統(tǒng)計(jì)等。⑦支持GPS格式數(shù)據(jù)。
DotSpatial很好的實(shí)現(xiàn)了功能模塊化設(shè)計(jì)思想,方便開發(fā)者靈活定制程序。Dot-Spatial架構(gòu)在設(shè)計(jì)時(shí)主要考慮了兩個(gè)要素。首先是將用戶界面部分與業(yè)務(wù)邏輯部分分離,其次是將各個(gè)模塊編譯到不同的DLL中,提高代碼的利用率,并且做到無需加載整個(gè)類庫就可使用部分功能。
DotSpatial提供了完善的擴(kuò)展機(jī)制,允許開發(fā)者對其功能進(jìn)行擴(kuò)展。DotSpatial啟動(dòng)時(shí)會(huì)對根目錄下的Application Extensions子目錄進(jìn)行掃描,該目錄下任何實(shí)現(xiàn)IExtension接口的DLL都會(huì)被加載到主程序中,加載完成后就可以使用DLL中的擴(kuò)展功能。IExtension主要包含Activate和Deactivate和方法。DotSpatial啟動(dòng)時(shí)調(diào)用Activate方法,完成模版的初始化任務(wù)。方法Decative在卸載模版時(shí)被調(diào)用,實(shí)現(xiàn)卸載模版及資源清理功能。
為了方便開發(fā)人員進(jìn)行擴(kuò)展,DotSpatial提供了一個(gè)可以安裝的插件模版(template),下載地址為:http://visualstudiogallery.msdn.microsoft.com/92919cee-a2b0-43c6-8993-aeac965bc4b5,安裝模版后,用Visual Studio新建項(xiàng)目時(shí)可以選擇該模版,并在此基礎(chǔ)上進(jìn)行擴(kuò)展開發(fā)。
模版提供了實(shí)現(xiàn)IExtension所需的基礎(chǔ)代碼,其中包含一個(gè)Extension基類和一個(gè)MyPlugin子類。Extension類實(shí)現(xiàn)了IExtension接口中的Activate和Deactivate方法,Plugin子類繼承Extension父類,并且還有一個(gè)ButtonClick方法,可以。模版加載后會(huì)在DotSpatial的Extensions菜單中生成對應(yīng)的菜單項(xiàng),點(diǎn)擊菜單會(huì)執(zhí)行ButtonClick方法,主要的擴(kuò)展功能可以在該方法中實(shí)現(xiàn)或由該方法調(diào)用其它方法實(shí)現(xiàn)。
NetCDF(Network Common Data Form)網(wǎng)絡(luò)通用數(shù)據(jù)格式是由UCAR(University Corporation for Atmospheric Research)針對于科學(xué)數(shù)據(jù)的特點(diǎn)專門進(jìn)行開發(fā)的一種開放的編碼標(biāo)準(zhǔn)。由于其開放性、自描述性、平臺獨(dú)立性、高可用性等特點(diǎn),目前已廣泛應(yīng)用于氣象學(xué)、水文學(xué)、海洋學(xué)以及地理信息系統(tǒng)等諸多領(lǐng)域。已經(jīng)有很多文章在NetCDF的實(shí)際應(yīng)用方面做了深入研究,但是在擴(kuò)展GIS軟件實(shí)現(xiàn)支持NetCDF數(shù)據(jù)渲染方面的研究還不是很多。DotSpatial本身不支持NetCDF數(shù)據(jù),我們通過前面介紹的模版編程實(shí)現(xiàn)DotSpatial渲染NetCDF數(shù)據(jù)。DotSpatial原生支持ESRI的Bgd柵格數(shù)據(jù),因此可以通過在內(nèi)存中將NetCDF數(shù)據(jù)轉(zhuǎn)換為Bgd的方式實(shí)現(xiàn)NetCDF數(shù)據(jù)的渲染。
NetCDF文件包含維(dimensions)、變量(variables)和屬性(attributes)三種描述類型,每種類型都會(huì)被分配一個(gè)名字和一個(gè)ID,這些類型共同描述了一個(gè)數(shù)據(jù)集。NetCDF庫可以同時(shí)訪問多個(gè)數(shù)據(jù)集,用ID來識別不同數(shù)據(jù)集。維表示變量維度信息,變量存儲(chǔ)實(shí)際數(shù)據(jù),屬性表示變量或數(shù)據(jù)集本身的輔助信息,根據(jù)作用域可分為適用于整個(gè)文件的全局屬性和適用于特定變量的局部屬性,全局屬性則描述了數(shù)據(jù)集的基本屬性以及數(shù)據(jù)集的來源。NetCDF可在某一維進(jìn)行追加,無需重新定義數(shù)據(jù)格式并復(fù)制原有數(shù)據(jù),圖1是一個(gè)NetCDF在Time維的增長示例,圖2所示為轉(zhuǎn)換NetCDF格式。
圖1 NetCDF維增長比例
圖2 轉(zhuǎn)換NetCDF格式
UCAR提供了一系列操作NetCDF文件的庫,通過這些庫可以讀寫NetCDF文件數(shù)據(jù)或元數(shù)據(jù)信息。核心庫由C語言編寫,在此基礎(chǔ)上提供了C、C++、Java、Python、Perl等多種主流編程語言的API,但是還不支持C#,可以通過C#封裝NetCDF核心C庫函數(shù)的方式間接讀取NetCDF數(shù)據(jù)。
DotSpatial本身支持ESRI的Bgd柵格數(shù)據(jù),通過實(shí)現(xiàn)IExtension接口,在內(nèi)存中將NetCDF數(shù)據(jù)轉(zhuǎn)換為Bgd格式,DotSpatial可以顯示轉(zhuǎn)換后的數(shù)據(jù),轉(zhuǎn)換過程如圖2所示,最終的渲染效果和其它支持NetCDF數(shù)據(jù)的軟件是一致的,這說明前面的擴(kuò)展方式是可行的。
本文介紹了開源GIS軟件DotSpatial及其擴(kuò)展機(jī)制,利用其官方提供的模版實(shí)現(xiàn)了DotSpatial對NetCDF數(shù)據(jù)的讀取與渲染,可以充分的利用DotSpatial已有的平移、縮放等功能對NetCDF數(shù)據(jù)進(jìn)行常見GIS操作。這種擴(kuò)展方法具有一定的通用性,可以很好的擴(kuò)展DotSpatial原有功能,用來實(shí)現(xiàn)支持多種GIS數(shù)據(jù)格式。
[1]Li J,Liao W,Choudhary A,et al.Parallel NetCDF:A high-performance scientif ic I/O interface[C].2003 ACM/IEEE Conference.IEEE,2003:39-39.
[2]孫建偉,孫昭晨,陳軒,等.NetCDF格式數(shù)據(jù)的創(chuàng)建及應(yīng)用[J].交通標(biāo)準(zhǔn)化,2010(226):31-34.