張海兵
摘要:
為了突破國外地理信息產(chǎn)業(yè)的技術(shù)封鎖,以及商業(yè)地理信息軟件對用戶的限制,降低地理信息軟件開發(fā)成本,基于桌面開源GIS軟件SharpMap,從源碼體系上分析其數(shù)據(jù)訪問、圖層擴(kuò)展和地圖渲染等機(jī)制,結(jié)合GIS中間件設(shè)計并實現(xiàn)了GIS系統(tǒng)。該系統(tǒng)具備較好的地圖渲染功能,并支持GIS的空間分析。采用SharpMap開發(fā)的系統(tǒng)可突破商業(yè)軟件的限制,降低用戶成本。
關(guān)鍵詞:
開源軟件;SharpMap;GIS中間件;空間分析
DOIDOI:10.11907/rjdk.172797
中圖分類號:TP319
文獻(xiàn)標(biāo)識碼:A文章編號文章編號:16727800(2018)003013105
英文摘要Abstract:In order to break the technical blockade of foreign geographic information industry, break the restriction of commercial geographic information software to users, and reduce the development cost of GIS software, this paper analyzes data access, layer extension and map rendering mechanism of SharpMap source code. Based on the SharpMap, GIS system has been designed and implemented with GIS middleware, which support vector layer mapping rendering and GIS spatial analysis function. The GIS system based on SharpMap could break the limitation of commercial and reduce user cost.
英文關(guān)鍵詞Key Words:open source software; SharpMap; GIS middleware; render;spatial analysis
0引言
隨著云計算等技術(shù)的不斷發(fā)展與變革,促進(jìn)了地理信息系統(tǒng)的發(fā)展,涌現(xiàn)出越來越多的開源GIS軟件。SharpMap作為開源GIS桌面軟件系統(tǒng),是基于.Net開發(fā)的Map渲染類庫,支持多種數(shù)據(jù)格式和幾何圖形類型,且開發(fā)便捷。
國內(nèi)研究者基于SharpMap開展了多方面的應(yīng)用研究。趙欣等[1]利用開源軟件SharpMap實現(xiàn)了SharpMap在露天礦卡車調(diào)度系統(tǒng)監(jiān)控端的應(yīng)用;徐齊行等[2]采用SharpMap 進(jìn)行了GML可視化研究;方靜濤等[3]基于 C#和 SharpMap實現(xiàn)了淺層地溫能資源數(shù)據(jù)庫管理系統(tǒng)的研發(fā);夏正龍等[17]介紹了采用SharpMap將2 300多個降水實況離散點顯示成降水色斑圖的方法;張學(xué)寶等[4]分析了SharpMap的總體架構(gòu)設(shè)計,介紹了軟件核心功能的設(shè)計和實現(xiàn)原理;劉力赟[5]基于SharpMap對航線設(shè)計與呈現(xiàn)進(jìn)行了研究;陳大東[6]利用SharpMap進(jìn)行二次開發(fā)以實現(xiàn)供水管網(wǎng)調(diào)度;張?zhí)m慧[7]利用SharpMap在.Net環(huán)境下開發(fā)了基于B/S結(jié)構(gòu)的青海省氣象信息網(wǎng)絡(luò)數(shù)據(jù)庫。但國內(nèi)研究者對于SharpMap結(jié)構(gòu)的研究仍較為有限,并未基于SharpMap進(jìn)行完整的GIS系統(tǒng)設(shè)計。本文將對SharpMap的結(jié)構(gòu)進(jìn)行分析,設(shè)計一套基于SharpMap的GIS系統(tǒng)。
1SharpMap體系及底層機(jī)制
1.1體系結(jié)構(gòu)
本文以SharpMap 0.9版本為例分析其體系結(jié)構(gòu),其由IProvider、Features、Feature Layers、Presentation、Reprojection、Map、Display Views 共7層組成,體系結(jié)構(gòu)如圖 1所示。
(1)IProvider層:作為一個底層的接口引擎,便于SharpMap讀取各種格式的數(shù)據(jù),并支持?jǐn)U展添加新的數(shù)據(jù)類型。
(2)Features層:通過IProvider 接口層讀取的GIS 數(shù)據(jù)都轉(zhuǎn)化為點、線、多邊形、多點、多線等幾何類型和幾何集合等。
(3)Feature Layers層:特征圖元圖層,組織各種幾何圖元,結(jié)合Reprojection 實現(xiàn)各種坐標(biāo)空間的圖元投影。
(4)Presentation層:實現(xiàn)各種矢量要素的渲染,設(shè)置要素的Style。
(5)Reprojection層:定義圖元的坐標(biāo)系統(tǒng),或者將圖元從一種坐標(biāo)空間投影到另一種定坐標(biāo)空間,實現(xiàn)投影轉(zhuǎn)換。
(6)Map層:提供定制工具,用戶也可自定義工具。
(7)Display Views 層:為了便于開發(fā),提供定制的桌面和Web控件,用戶也可自定制控件。
1.2源碼分析
圖2是SharpMap在VS 2012下的結(jié)構(gòu)視圖,動態(tài)庫SharpMap.dll由SharpMap 和其他20多個次級名稱空間組成,其中SharpMap名稱空間下的Map類為系統(tǒng)的核心所在。SharpMap是工程的主體。
(1)Map類:位于SharpMap命名空間下,通過創(chuàng)建Map對象的實例生成地圖。Map對象由包含的Layer對象組成Layers集合,通過GetMap方法來Render 地圖。
(2)Converts名稱空間:提供數(shù)據(jù)轉(zhuǎn)換服務(wù),實現(xiàn)SharpMap支持的幾何圖形與WKT、WKB格式的相互轉(zhuǎn)換。
(3)Geometries名稱空間:包括SharpMap要使用到的各種幾何類及其接口類,是SharpMap的基礎(chǔ)之一,其結(jié)構(gòu)如圖3所示。所有幾何對象都繼承自Geometry這個抽象類,其中定義了幾何對象應(yīng)該具備的公共操作。
(4)Layers名稱空間:包括ILayer 接口、Layer 集合類等,代表地圖的圖層。圖4表示了各Layer圖層之間的關(guān)系。
(5)Layer 是一個抽象類,實現(xiàn)了ILayer 接口。Layer 目前有6個子類,分別是WmsLayer、LabelLayer、LayerGroup 、TileWmsLayer、TileLayer和VectorLayer,分別代表6種不同圖層。
(6)Providers名稱空間:包括IProvider接口和Shape文件、MsSQL數(shù)據(jù)、MsSqlSpatial、WFS等數(shù)據(jù)的讀取實現(xiàn),為SharpMap提供數(shù)據(jù)讀取支持。
(7)Rendering名稱空間:包括矢量渲染器類和幾個專題圖渲染器類,該類可以將幾何對象根據(jù)其Style設(shè)置渲染為一個System.Drawing.Graphics對象。
(8)Styles名稱空間:該名稱空間主要提供了圖層的樣式設(shè)置類,例如線樣式、點樣式、填充樣式等,其結(jié)構(gòu)如圖 5所示。
SharpMap.Extensions是對SharpMap的擴(kuò)展,包括對圖層支持、數(shù)據(jù)支持及數(shù)據(jù)轉(zhuǎn)換的擴(kuò)展。
Forms名稱空間包含MapImage控件和MapBox控件,封裝了Map類,用于Windows Form編程。
1.3數(shù)據(jù)訪問機(jī)制
對于不同數(shù)據(jù)格式的訪問都實現(xiàn)IProvider 接口,每一種數(shù)據(jù)的打開、關(guān)閉、縮放、查詢等操作的具體實現(xiàn)可能并不相同,但都遵循統(tǒng)一的接口標(biāo)準(zhǔn)。SharpMap通過實現(xiàn)IProvider接口,支持對Shapefile數(shù)據(jù)、SQL、OleDB、Oracle、PostGIS[9]、OGR、WMS Server、幾何圖形數(shù)據(jù)集等數(shù)據(jù)來源的訪問。
其中,SharpMap的VectorLayer和LabelLayer類的DataSource屬性為IProvider接口。通過設(shè)置VectorLayer.DataSource和LabelLayer.DataSource,可以獲得VectorLayer和LabelLayer圖層。SharpMap對數(shù)據(jù)的訪問支持如圖6所示。
1.4圖層擴(kuò)展機(jī)制
在SharpMap的擴(kuò)展庫中提供了對GDAL[8]柵格圖層的支持。由于GdalRasterLayer類的構(gòu)建過程中用到了GDAL庫,且實現(xiàn)了SharpMap中的ILayer接口和抽象類Layer,使得SharpMap項目可以讀取GDAL柵格數(shù)據(jù)。其中GdalRasterLayer類的構(gòu)建過程如圖7所示。
1.5地圖渲染機(jī)制
地圖的渲染包括地圖創(chuàng)建、圖層創(chuàng)建、樣式設(shè)置、圖層添加、GetMap渲染等步驟。在開發(fā)過程中渲染的具體實現(xiàn)如下:①使用Map對象調(diào)用公有函數(shù)GetMap();②采用GetMap方法遍歷每一個Layer圖層,每個圖層調(diào)用Layer 的公有函數(shù)Render();③各個 Layer 開始渲染自己,若圖層為柵格數(shù)據(jù)或WMS數(shù)據(jù),則返回范圍內(nèi)的圖片。若為VectorLayer,則轉(zhuǎn)到第4步;④矢量圖層調(diào)用IProvider接口中的GetFeaturesInView()函數(shù),返回檢索到對象列表;⑤遍歷列表中的每個對象,每個對象再調(diào)用VectorRenderer類中的不同方法來渲染自己;⑥在VectorRenderer類的不同方法中,還需調(diào)用TransformToImage()函數(shù),返回.Net 的一個繪圖對象;⑦GDI+會根據(jù)不同對象的不同Style進(jìn)行渲染。
2系統(tǒng)設(shè)計
2.1系統(tǒng)結(jié)構(gòu)設(shè)計
本系統(tǒng)為三層體系架構(gòu),包括數(shù)據(jù)層、應(yīng)用層、客戶層,如圖 8所示。數(shù)據(jù)層包含本地文件和空間數(shù)據(jù)。本文通過空間數(shù)據(jù)引擎訪問空間數(shù)據(jù)庫中的數(shù)據(jù);應(yīng)用層通過中間件實現(xiàn);客戶層即表現(xiàn)層,展示相應(yīng)的處理結(jié)果。
本系統(tǒng)采用PostGIS[9]插件作為空間數(shù)據(jù)引擎。利用Geoserver[10]發(fā)布來自文件數(shù)據(jù)庫的數(shù)據(jù)服務(wù)。同時,Geoserver也可發(fā)布來自PostGIS的服務(wù),但在本系統(tǒng)中并未應(yīng)用。
系統(tǒng)中間件包括OGR、GDAL、NTS[11]、EasyGIS[12]、GeoAPI.NET、BruTile等。OGR和GDAL是分別處理矢量和柵格數(shù)據(jù)的開源庫,在本系統(tǒng)中采用這兩個開源庫擴(kuò)展系統(tǒng)支持的數(shù)據(jù)格式,從而實現(xiàn)對多種矢量和柵格數(shù)據(jù)的支持;NTS是GIS分析和操作的類庫,采用GeoAPI.NET和NTS實現(xiàn)對幾何圖形的操作,從而為擴(kuò)展SharpMap功能、實現(xiàn)GIS的空間分析功能打下基礎(chǔ);采用BruTile可實現(xiàn)對網(wǎng)絡(luò)在線地圖的訪問;采用開源EasyGIS的動態(tài)鏈接庫EGIS.ShapeFileLib可實現(xiàn)矢量數(shù)據(jù)的導(dǎo)出和矢量數(shù)據(jù)的格式轉(zhuǎn)換。
2.2系統(tǒng)功能設(shè)計
系統(tǒng)總體功能結(jié)構(gòu)按不同內(nèi)容分為8個部分,如圖10所示。
(1)地圖控制功能:包括新建地圖和導(dǎo)出地圖。在導(dǎo)出地圖功能中實現(xiàn)當(dāng)前地圖的導(dǎo)出,以供地圖打印。
(2)基本功能:包括地圖拉框放大、拉框縮小、固定放大、固定縮小、全圖顯示、漫游、點量測、距離測量、面積測量等多種基本功能。
(3)圖層控制功能:包括每個圖層的移除、縮放到圖層、單個圖層顯示和關(guān)閉、導(dǎo)出數(shù)據(jù)、圖層屬性信息。其中圖層的屬性信息包含Symbology、Lables和Source三部分。Symbology中可以對圖層進(jìn)行符號化設(shè)計以及漸變色渲染;Lables中可實現(xiàn)對圖層的標(biāo)注功能;Source中可查看圖層的范圍、來源、地理坐標(biāo)系統(tǒng)和投影坐標(biāo)系統(tǒng)。此外,對于矢量數(shù)據(jù)可以查看其屬性表信息以及屬性表信息的導(dǎo)出。
(4) 目錄樹控制:以目錄樹的形式列舉出系統(tǒng)中加載的地圖,且包含每個圖層的符號化信息,可以對目錄樹中的所有圖層進(jìn)行開關(guān)、展開折合操作,且可以添加新圖層。目錄樹可同時支持矢量圖層數(shù)據(jù)與柵格數(shù)據(jù)的控制。
(5)空間分析:原型系統(tǒng)提供數(shù)據(jù)的空間分析功能,包括緩沖區(qū)分析、疊加求交分析、擦除分析、均值差除等,以供用戶進(jìn)行特定的分析。
(6)地圖服務(wù)模塊:在聯(lián)網(wǎng)情況下,訪問在線必應(yīng)地圖和wiki地圖。此外,可實現(xiàn)WMS和WFS的服務(wù)功能。
(7)控制模塊:包括GeoServer的啟動、停止和管理。
(8)數(shù)據(jù)庫管理模塊:包括數(shù)據(jù)庫連接、數(shù)據(jù)庫連接字符串設(shè)置以及數(shù)據(jù)庫圖層加載。
3系統(tǒng)實現(xiàn)
系統(tǒng)界面一般采用圖像界面表達(dá)方式,分為菜單欄、工具欄、狀態(tài)欄、圖層目錄樹(圖層控制界面)、地圖窗口,主界面如圖11所示。
本系統(tǒng)可實現(xiàn)常用的GIS系統(tǒng)功能,如數(shù)據(jù)導(dǎo)出、圖層信息查詢、圖層屬性設(shè)置等。對于矢量圖層提供單一符號進(jìn)行圖層渲染,如圖12所示。此外,還提供漸變色的方式進(jìn)行渲染,如圖13所示。湖北省基礎(chǔ)矢量數(shù)據(jù)渲染效果如圖14所示,驗證了本系統(tǒng)具備較好的制圖渲染功能。
本系統(tǒng)結(jié)合中間件NTS實現(xiàn)GIS的空間分析功能,包括緩沖區(qū)分析、疊加求交、均值擦除、擦除分析等。
根據(jù)實現(xiàn)的空間功能,可以進(jìn)行案例分析。以市區(qū)擇房為例進(jìn)行分析,實際案例如下:
(1)問題:如何找到環(huán)境好、購物方便、小孩上學(xué)方便的居住區(qū)地段?
(2)具備的數(shù)據(jù):①城市市區(qū)主要交通要道(network_st.shp);②商業(yè)中心分布圖(Marketplace.shp);③學(xué)校分布圖(school.shp);④名勝古跡分布圖(famous place.shp)。
(3)要求尋求的區(qū)域滿足以下條件:①離主要交通要道200m之外,以減少噪音污染;②在商業(yè)中心的500m服務(wù)范圍之內(nèi);③距學(xué)校距離750m之內(nèi),以方便小孩上學(xué);④距名勝古跡500m之內(nèi),環(huán)境優(yōu)雅。
采用案例提供的擇房數(shù)據(jù)進(jìn)行空間分析,擇房原始數(shù)據(jù)效果如圖 15所示,空間分析擇房選址結(jié)果如圖 16所示。
通過擴(kuò)展本系統(tǒng)支持柵格數(shù)據(jù)訪問,打開湖北省的DEM數(shù)據(jù),效果如圖17所示。
4結(jié)語
本系統(tǒng)以SharpMap為GIS客戶端基礎(chǔ)平臺,設(shè)計了以PostGIS為空間數(shù)據(jù)引擎,GeoServer為WFS服務(wù)器,NTS、GDAL、OGR、GeoAPI.NET等為中間件的GIS系統(tǒng),較好地實現(xiàn)了一般GIS系統(tǒng)的功能,并以湖北省矢量數(shù)據(jù)驗證了本系統(tǒng)的制圖渲染功能,以擇房案例驗證了本系統(tǒng)的空間分析功能?;赟harpMap進(jìn)行GIS系統(tǒng)開發(fā),可以突破商業(yè)軟件的限制,降低用戶成本。
但本系統(tǒng)對矢量數(shù)據(jù)的符號化僅限于利用色彩進(jìn)行變更,并未提供通過圖片或定制符號進(jìn)行符號化的功能。此外,本文只在C/S下進(jìn)行SharpMap分析和開發(fā),后續(xù)研究將進(jìn)一步完善并實現(xiàn)B/S系統(tǒng)下的定制開發(fā)。
參考文獻(xiàn)參考文獻(xiàn):
[1]趙欣,楊多志,于沿濤,等.SharpMap在露天礦卡車調(diào)度系統(tǒng)監(jiān)控端的應(yīng)用[J].露天采礦技術(shù),2009(5):7375.
[2]徐齊行,敖杰剛.基于SharpMap的GML可視化研究與實現(xiàn)[J].測繪標(biāo)準(zhǔn)化,2012(6):1619.
[3]方靜濤,張延軍,黃賢龍,等.基于C#和SharpMap的淺層地溫能資源數(shù)據(jù)庫管理系統(tǒng)研究和開發(fā)[J].世界地質(zhì),2012,31(3):608613.
[4]張學(xué)寶,包富華,鄭江濤,等.基于開源架構(gòu)的GIS原型系統(tǒng)的設(shè)計與開發(fā)研究[J].測繪科學(xué),2010,35(4):210211.
[5]劉力贊.基于SharpMap航線設(shè)計與呈現(xiàn)的研究與實現(xiàn)[D].北京:北京郵電大學(xué),2009.
[6]陳大.SharpMap在供水管網(wǎng)的應(yīng)用[J].信息與電腦:理論版,2011(6):210,212.
[7]張?zhí)m慧,王式功,尚可政,等.SharpMap在青海省氣象信息網(wǎng)絡(luò)數(shù)據(jù)庫中的應(yīng)用[J].氣象科技,2012,40(1):5760.
[8]GDAL[EB/OL].[20170309].http://www.gdal.org/.
[9]PostGIS[EB/OL].[20170309].http://www.postgis.org/.
[10]GeoServer[EB/OL].[20170309].http://geoserver.org/.
[11]NTS[EB/OL].[20170309].https://sourceforge.net/projects/nts/.
[12]Easy GIS [EB/OL]. [20170309].http://www.easygisdotnet.com/.
責(zé)任編輯(責(zé)任編輯:黃?。?