劉天悅 吳保國
(北京林業大學,北京,100083)
山東省東營市“三網”綠化工程是由東營市委、市政府決定,利用5 a或更長時間,針對東營市特殊的營林立地條件,圍繞構建全市林業生態防護體系和林業產業體系建設目標,以路域林網、水系林網和農田林網等“三網”綠化為骨架的一項重大基礎戰略工程[1]。東營市現有的“三網”綠化工程管理系統是基于Visual FoxPro的工程數據管理系統,該系統只是單純的對屬性數據的操作,缺少空間位置的概念,無法向公眾提供“三網”工程綠化的進展情況。因此,為了保證該綠化工程的順利實施和監督,需要采用WebGIS等信息技術建立一個面向公眾的“三網”綠化工程信息服務系統,為工程實施信息管理及公眾提供服務。
目前大多數商業GIS軟件商基本上都支持WebGIS開發,例如ESRI的ArcGISServer。但商業WebGIS軟件價格太高,系統開發與運行維護費用居高不下,導致很多單位無力承擔。由于開源WebGIS是開放的,可以免費獲取,采用開源WebGIS進行信息服務系統開發與運行維護費用低,因此開源WebGIS逐漸在我國各行業得到廣泛應用。但是在林業行業中,開源GIS的應用研究并不多,主要有李世明等人利用開源軟件開發了基于WebGIS的縣級林業空間信息共享系統,用于公眾通過Web瀏覽器訪問林業空間信息[2]。
本研究以山東省東營市“三網”綠化工程建設為研究對象,調研梳理相關管理業務流程,從需求入手,深入研究“三網”綠化工程的數據信息處理要求、功能要求,結合工程管理的內容,進行系統關鍵技術的應用分析與研究。最終在開源WebGIS技術的基礎上實現一個“三網”綠化工程信息服務系統的研建,使工程信息能夠及時得到更新發布等,為“三網”綠化工程造林工作者提供便捷的管理支持,也為廣大林農提供直觀的展示。
2.1.1 系統總體架構
“三網”綠化工程信息服務系統采用的是瀏覽器/服務器(Browser/Server,B/S)架構模式。該架構模式的優勢是可服務更多的用戶[3]。由于該系統完全采用開源GIS技術實現,因此,系統之間的數據接口及功能接口均采用開放地理信息系統協會(OpenGISConsortium,OGC)的GIS互操作標準規范,保證系統開放性、擴展性和可伸縮性。系統的框架結構采用目前較常用的3層架構模式,分為表達層、業務層和數據層,如圖1所示。其中表達層指客戶端瀏覽器;業務層包括部署系統網站的Web服務器和發布地圖服務的地圖服務器兩部分組成;數據層指系統使用的開源數據庫,包括空間數據和工程屬性數據兩部分組成,空間數據包括基礎地圖數據(如縣中心、鄉鎮中心、鄉鎮邊界等)和重大工程小班數據等,工程屬性數據主要是指與工程造林相關的的一些數據表(如造林模式表、造林樹種表等)。
2.1.2 系統功能設計
根據系統的總體目標和用戶需求,“三網”綠化工程信息服務系統主要包括空間信息展示子系統和工程信息查詢統計子系統兩部分組成,空間信息展示子系統包括地圖瀏覽、漫游、谷歌影像疊加等功能;工程信息查詢統計子系統包括屬性查圖和圖查屬性兩部分,主要包括造林小班查詢、工程進度查詢、重大工程查詢、造林模式查詢和造林樹種查詢等,系統功能詳細設計如圖2所示。

圖1 系統框架結構
2.2.1 開源WebGIS組件選擇
構建一個利用開源WebGIS實現的“三網”綠化工程信息服務系統,開源WebGIS組件的選擇是否適當對系統本身性能的優劣會產生重要影響。開源WebGIS組件的選擇主要包括地圖服務器、開源WebGIS開發客戶端和開源空間數據庫的選擇。
2.2.1.1 地圖服務器選擇
目前最流行的兩種開源地圖服務器是MapServer和GeoServer。
GeoServer是按地理信息系統協會OGC(OpenGIS Consortium)規范采用J2EE實現的地理信息系統服務器,地圖一般通過xml文件發布。GeoServer的特點是支持在線編輯,允許用戶對數據進行更新、刪除、插入操作。
MapServer是美國明尼蘇達大學利用C語言開發的一個開放源碼的地理信息系統服務器,地圖通過Map文件發布。MapServer的特點是能夠快速生成地圖服務,對發布的網絡地圖服務WMS(Web Map Service)服務支持較好,利用GEOS、OGR/GDAL對多種矢量和柵格數據的支持,通過Proj.4共享庫實時地進行投影變換,避免了不同數據格式轉換所造成的地圖投影轉換等。由于“三網”綠化工程信息服務系統是一個面向公眾的服務系統,該系統主要功能提供了工程信息查詢等功能,不需要提供用戶在線編輯,因此,“三網”綠化工程信息服務系統選擇MapServer作為系統使用的地圖服務器。

圖2 系統功能設計
2.2.1.2 WebGIS 開發客戶端
WebGIS開發客戶端目前流行的主要有OpenLayers和Google Map API等。
Google Maps API是谷歌公司自己推出一個免費的編程API(需要申請一個API授權碼),開發人員可以使用它來定制WebGIS客戶端地圖顯示。
MetaCarta公司研制開發的OpenLayers技術就是一些用于WebGIS客戶端的JavaScript包構成的。由于OpenLayers實現訪問地理空間數據的方法符合行業標準及WMS和WFS規范;實現了類似與Ajax那樣無需刷新即可更新頁面;并且OpenLayers提供圖層類、工具類等能夠比較容易地實現地圖發布和地圖瀏覽等基本功能,操作方便。在此基礎上,進一步實現屬性信息顯示、繪制圖層等功能,為用戶提供了便捷的查詢功能。相比Google Earth API開發,使用OpenLayers作為客戶端框架開發更加簡單且地圖服務加載更快。因此,“三網”綠化工程信息服務系統的客戶端選擇基于JavaScript動態腳本語言的OpenLayers作為WebGIS客戶端開發組件。
2.2.1.3 開源數據庫選擇
目前比較流行的開源數據庫管理系統主要有PostgreSQL和MySQL兩種。由于地圖服務器選擇了 MapServer,并且MapServer集成并采用PostGIS和開源數據庫PostgreSQL對地理空間數據進行存儲和Filter查詢操作,因此,為了減輕開發工作,“三網”綠化工程信息服務系統的空間數據庫選擇PostgreSQL。
2.2.2 開源WebGIS組件工作流程
2.2.2.1 空間數據導入 PostgreSQL
PostGIS是PostgreSQL數據庫的基礎上增加了存儲管理空間數據的能力。空間數據是利用PostGIS模塊導入到PostgreSQL數據庫中的,主要有兩種方法。若導入Shapfile文件,一種方法是使用界面工具Shape File to PostGIS Importer導入;另一種是輸入命令的方式,即使用Postgres_home/bin文件夾中的shp2pgsql命令,它會首先創建一個CEEAT TABLE語句和相應的AddGeometryColumn方法,遍歷dbf文件中的每一條記錄,然后創建成為一個 SQL INSERT語句,命令為shp2pgsql-s 4326 小班.shp xiaoban>xiaoban.sql(其中4326 為投影類型),最后執行該sql語句,在命令提示符下鍵入:psqld postgis-f xiaoban.sql postgres(其中 postgis是數據庫名,postgres是該數據庫的用戶名),執行完成后,空間數據就導入到 PostGIS 數據庫中[4]。
2.2.2.2 MapServer發布地圖服務
網絡地圖服務采用OGC國際GIS組織的網絡地圖服務(Web Map Service,WMS)接口,它支持地圖圖層定制與特殊符號定制,也支持分布式的柵格地圖發布服務。
MapServer服務器中關鍵的結構配置文件是Map文件,定義了地圖范圍、數據源、地圖圖層、投影方式以及符號標記等內容,MapFile文件將各種地圖要素組織成具有層次關系的對象系統。數據來源、使用的數據格式、用戶交互以及對OGC協議的支持也在MapFile中定義。MapServer地圖發布服務的具體工作流程如下[5]:
①Map Server接收到Web Server傳送的參數時,先由參數中所指定的路徑讀取Mapfile文件(.Map文件)。
②根據Mapfile中指定的data路徑讀取相關數據,由于使用PostGIS作為數據源,因此,數據從PostGIS數據庫中取得。
③Map Server接收相關信息,先進行文字屬性信息的轉圖工作,這項工作是讓FreeType Font Engine配合GD Graphics Library將文字信息轉成圖像,再將空間信息由GD Graphics Library轉成圖像格式,最后Map Server將文字圖形疊加到幾何圖形中去;圖形制作完成后,保存至客戶端參數中指定的目錄。
④Map Server根據Mapfile中定義的信息,讀取指定的模板,進行html及畫面顯示的配置與相關資料、圖形(如比例尺寸、樣本圖、參考文字)的制作及嵌入工作,將動態生成的空間信息圖嵌入模板,可生成能夠供客戶端使用的頁面文件。
2.2.2.3 OpenLayer實現地圖瀏覽等功能
系統采用 OpenLayers的 JavaScript、Prototype框架以及Rico庫的一些組件,以MapServer中發布的地圖服務為操作對象實現地圖瀏覽、查詢等功能。
地圖瀏覽時,當Web Server接收到用戶對WebGIS系統的請求后,以CGI命令將相關的空間參數傳送給Map Server,Map Server根據接收的各項參數,讀取Mapfile文件(.Map)中關聯的PostGIS中的地圖空間數據和屬性數據,包括各個工程小班圖層等,然后生成供客戶端使用的html文件;最后將結果處理后發送回Web Server,Web Server根據Map Server的格式做成結果以http協議傳回給Openlayers客戶端,將地圖顯示在Web頁面上,系統開源WebGIS組件的整體工作流程如下圖3所示,開源數據庫PostgreSQL中存放空間數據和工程數據;MapFile配置文件通過文件中的數據訪問路徑連接到PostgreSQL中,并且使用WMS和WFS空間數據服務對數據庫中空間數據進行各種操作;最終通過OpenLayers技術將空間數據以及操作結果以Html等頁面以及一些圖片(png等)的形式在客戶端瀏覽器中展示。

圖3 開源WebGIS組件工作流程
系統數據庫設計主要包括小班空間數據表設計和樹種、造林模式等一些表的設計。
小班空間數據表的前兩個字段為FID和Shape,FID存放小班在地圖中的要素編號,Shape存放小班的幾何特性,其它字段為常規的小班調查因子字段,共85個屬性因子字段,例如地類、調查類別、工程進度、小班面積、造林時間等,如表1所示。

表1 小班空間數據
造林模式表、造林樹種表等是根據工程信息服務的需求進行設計的。通過查看造林模式,公眾用戶可以清楚地了解到每一造林地區的培養目標、造林樹種和立地條件等情況,并對整個綠化工程造林情況有了整體的認識;通過查看造林樹種信息,公眾用戶了解到具體每一塊小班種的是什么樹以及該樹種都有哪些特性等,表2是造林模式表實例,表3為造林樹種表實例。

表2 造林模式表實例

表3 造林樹種表實例
3.2.1 空間信息展示
地圖界面設計是由Openlayers和MapFile文件的配置兩部分實現的。其中,地圖的基本操作功能由Openlayers實現,繪制地圖的顏色、符號、線條寬度、注記及顯示位置等在Map-File文件中進行定義。
地理底圖具有地圖的基本操作,并實現地圖多尺度表達,放大到不同的級數,顯示的信息量不同。空間信息展示包括地圖縮放、漫游、比例尺以及疊加Google Map影像等。
3.2.1.1 地圖顯示實現
空間數據的組織是MapServer中的Mapfile文件定義,它定義了地圖范圍,告訴MapServer程序到哪里導入或者導出數據,還定義了地圖的圖層,包括數據源、投影以及符號等,以.map為擴展名;然后由Openlayers提供的 Layers的擴展OpenLayers.Layer.WMS連接 WMS服務器以獲得圖像,顯示在瀏覽器上,地圖圖層添加實現的代碼如下:

3.2.1.2 地圖漫游、縮放等基本功能實現
地圖漫游、縮放等基本功能是使用Openlayers提供的Control類為地圖瀏覽添加的工具和按鈕,比如說PanZoomBar方法控制著地圖左側不同尺度工具是否顯示,主要代碼如下所示:

地圖多尺度表達通過控制每個圖層最大和最小放大倍數來實現,即通過修改Mapfile中MaxScale的值設定地圖的放大和縮小倍數。
3.2.1.3 疊加 Google Map 影像
空間信息展示功能可以添加Google Map中的免費遙感影像。通過SetCenter方法可固定到東營市的影像所在位置,主要代碼如下所示:

3.2.2 工程信息查詢
該功能主要包括空間數據和屬性數據間的雙向查詢,包括屬性查圖和圖查屬性兩種方式。
3.2.2.1 屬性查圖
系統的屬性查圖采用兩種方式,一種是目錄樹查圖,即采用系統主界面左邊的目錄樹進行地圖定位查詢;另一種是條件查圖,即通過選擇輸入一定的查詢條件對小班等空間數據進行查詢,系統會根據您的輸入進行檢索,若檢索到滿足條件的小班,該系統會將該小班在地圖上定位并高亮度顯示。
目錄樹查圖即根據重點工程項目的名稱(如東濱路、褚官河)或者行政區劃(如東營區、利津縣)進行查詢,整個查詢過程是按照目錄樹的形式進行的,實現原理是利用網頁傳遞過來的坐標參數在客戶端建立一個新的圖層,在此圖層上繪制點(線、面),疊加到地理底圖中,達到空間定位的效果。如鼠標單擊行政區劃中的利津縣,則定位到利津縣所在中心點,并在地圖上高亮顯示,在程序查詢利津縣節點并寫入的同時,將超鏈接的網頁和傳遞的坐標鏈接到頁面中,利用JavaScript寫的Request函數可以獲取得到X、Y坐標值,然后利用Openlayers提供的類繪制出該點:


條件查圖是通過WFS(Web Feature Service)服務中的Filter Encoding來進行查詢,Filter編碼主要包括 Property-IsEqualTo(等于)、PropertyIsNotEqualTo(不等于)、Property-IsLessThan(小于)、PropertyIsBetween(范圍查詢)和PropertyIs-Like(模糊查詢)等[6]。用戶在查詢頁面中輸入查詢條件后,系統會根據查詢條件選擇不同的Filter編碼方式,比如說用戶輸入要查詢條件如“小班號=**”即查看小班號為**的小班,系統的Filter編碼就會選擇PropertyIsEqualTo方式進行查詢。
3.2.2.2 圖查屬性
圖查屬性是通過地圖查詢工程小班屬性信息,包括點選、框選、任意多邊形選、圓選等方式,以點選為例,點擊地圖后得到點的位置坐標,然后通過該點坐標查詢到該要素,從而得到小班的屬性信息。主要代碼如下所示:

服務器端使用Ms4w(MapServer for Windows)軟件進行地圖服務器和Web服務器的配置,該軟件包是一種Windows環境下的壓縮安裝包,里面包含了Apache和MapServer運行所必需的庫。配置成功之后啟動Apache,然后將該系統網站部署到Apache下的htdocs目錄下即可運行。
該系統以山東省東營市利津縣的工程數據為例,用戶在瀏覽器中輸入該系統網站地址后可進入“三網”綠化工程信息服務系統主界面(紅色高亮部分是東濱路小班),如圖4所示。

圖4 系統主界面
圖5是東濱路小班的工程進度查詢結果展示頁面,包括工程各階段小班數量、小班面積以及小班的基本信息表。

圖5 工程進度查詢結果頁面
基于開源WebGIS技術開發的東營市“三網”綠化工程信息服務系統,實現了“三網”綠化工程空間數據與工程信息的統一管理,使工程信息能夠及時得到更新發布等,為“三網”綠化工程造林工作者提供信息和決策分析提供支持。系統通過數字地圖以及疊加的Google Earth影像地圖等方式為公眾提供信息服務,大大提高了“三網”綠化工程對公眾的透明度,方便公眾進行監督。目前該系統原型已經交付東營市利津縣使用,運行基本穩定,可滿足“三網”綠化工程在信息服務方面的需求。
[1]邵云凱.以河口區為例,談如何搞好“三網”綠化改善生態環境[J].林業資源管理,1995(2):18-21.
[2]李世明,李增元,陸元昌.利用開源軟件開發基于WebGIS的縣級林業空間信息共享系統[J].林業科學,2006,42(7):141-144.
[3]吳保國,林政.基于COM的B/S模式系統對林業信息化建設的啟示[J].林業資源管理,2001(2):51-55.
[4]李源泰,李紅波,趙俊三.開源GIS在WebGIS中的應用初探[J].地理空間信息,2010,8(2):100-102.
[5]熊靜,張箐.基于MapServer的遙感影像發布系統的研究[J].遙感信息,2007(1):53-57.
[6]MapServer Documentation OGC Support and Configuration.[2010-10-07].http://mapserver.org/ogc/filter_encoding.html.