蘇小冰
(西南林業(yè)大學(xué),云南 昆明 650224)
近年來(lái),隨著操作系統(tǒng)的發(fā)展,Linux作為一個(gè)開(kāi)源的操作系統(tǒng),擁有良好的安全性、可靠性和穩(wěn)定性,尤其在可靠性方面,Linux和很多商用的UNIX系統(tǒng)具有可比性。它比大多數(shù)的桌面操作系統(tǒng)更加的穩(wěn)定可靠,特別是作為Web服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器時(shí),它的這一特點(diǎn)將會(huì)使它在眾多操作系統(tǒng)中脫穎而出。
與此同時(shí),隨著計(jì)算機(jī)技術(shù)的快速發(fā)展,地理信息系統(tǒng)(GIS,Geographic Information System)應(yīng)用程度的不斷深入和應(yīng)用范圍的逐漸擴(kuò)大,GIS正處于急劇變化與發(fā)展之中,WebGIS成為近年來(lái)GIS研究領(lǐng)域的一個(gè)前沿課題。如今已有很多基于Linux的WebGIS軟件,因此建立一個(gè)基于Linux的WebGIS平臺(tái),把Linux的安全、穩(wěn)定可靠與WebGIS結(jié)合起來(lái),有利于GIS軟件的研究、開(kāi)發(fā)和應(yīng)用。
隨著Web技術(shù)的發(fā)展,出現(xiàn)了數(shù)據(jù)與服務(wù)處理分離、服務(wù)與數(shù)據(jù)分布式等變化,交互性能大大增強(qiáng),其系統(tǒng)架構(gòu)也由原來(lái)的兩層架構(gòu)發(fā)展成為三層架構(gòu)乃至多層架構(gòu)(N-tier architecture)。多層架構(gòu)是在三層架構(gòu)的基礎(chǔ)上對(duì)中間層進(jìn)行細(xì)分,對(duì)于典型的三層架構(gòu),系統(tǒng)被劃分為:表示層(UI)、業(yè)務(wù)邏輯層(BLL)和數(shù)據(jù)訪問(wèn)層(DAL)。表示層負(fù)責(zé)內(nèi)容的展現(xiàn)和與用戶的交互;業(yè)務(wù)邏輯層是表示層與數(shù)據(jù)訪問(wèn)層的橋梁,負(fù)責(zé)邏輯的判斷、業(yè)務(wù)處理、數(shù)據(jù)傳遞等;數(shù)據(jù)訪問(wèn)層完成所有與數(shù)據(jù)庫(kù)交互的操作。使用三層或多層架構(gòu)可以使系統(tǒng)結(jié)構(gòu)清楚,分工更明確,有利于后期的維護(hù)和升級(jí)。
目前,現(xiàn)有的WebGIS按照負(fù)載的輕重和處理性質(zhì)分為基于服務(wù)端的WebGIS模式和基于客戶端的Web-GIS模式?;诜?wù)端的WebGIS大部分都采用的是三層或多層架構(gòu),GIS的絕大部分功能是在服務(wù)器端實(shí)現(xiàn),而基于客戶端的 WebGIS則采用插件技術(shù)(Plugin)模式、ActiveX模式和GIS Java Applet模式,GIS數(shù)據(jù)和數(shù)據(jù)處理功能在客戶端實(shí)現(xiàn),對(duì)于一般應(yīng)用具有操作方便、靈活等優(yōu)點(diǎn),但對(duì)于處理大量數(shù)據(jù)和完成復(fù)雜的GIS空間操作能力有限。因此,本文主要探討基于服務(wù)端的WebGIS實(shí)施方案。
當(dāng)前,支持Linux系統(tǒng)的商用WebGIS軟件已有很多,這類軟件提供了豐富的GIS功能,例如制圖、地圖查詢、地理編碼等空間分析功能,還附帶了WebGIS的管理和維護(hù)等工具,此外還為專業(yè)用戶提供了二次開(kāi)發(fā)的接口,比如ArcGIS Server為用戶提供用于空間數(shù)據(jù)管理、制圖、3D可視化和基于瀏覽器的編輯、地理處理、空間分析、建模等功能。對(duì)于開(kāi)發(fā)人員而言,提供的多層組件可用于為桌面、移動(dòng)客戶端、智能客戶端、網(wǎng)絡(luò)瀏覽器和企業(yè)模式構(gòu)建和部署Java的應(yīng)用和服務(wù)。這類商業(yè)軟件功能強(qiáng)大、界面友好,但軟件和維護(hù)費(fèi)用高,有時(shí)受條件限制,不能選用。其實(shí)在Linux系統(tǒng)下,還有一些開(kāi)源的 WebGIS軟件做的也不錯(cuò),比如 MapServer,它起源于明尼蘇達(dá)大學(xué)自然資源學(xué)系和NASA(美國(guó)航空航天局)合作的UMN ForNet項(xiàng)目。
MapServer是一套基于胖服務(wù)器端/瘦客戶端模式的實(shí)時(shí)地圖發(fā)布系統(tǒng),客戶端發(fā)送數(shù)據(jù)請(qǐng)求時(shí),服務(wù)器端實(shí)時(shí)的處理空間數(shù)據(jù),并將生成的數(shù)據(jù)發(fā)送給客戶端。MapServer基于C語(yǔ)言,利用GEOS、OGR/GDAL對(duì)多種矢量和柵格數(shù)據(jù)的支持,通過(guò)Proj.4共享庫(kù)實(shí)時(shí)的進(jìn)行投影變換。同時(shí),還集合PostGIS和開(kāi)源數(shù)據(jù)庫(kù)PostgreSQL對(duì)地理空間數(shù)據(jù)進(jìn)行存儲(chǔ)和SQL查詢操作,基于ka-map、MapLab、Cartoweb和Chameleon等一系列客戶端JavaScript API來(lái)支持對(duì)地理空間數(shù)據(jù)的傳輸與表達(dá),并且遵守OGC制定的 WMS、WFS、WCS、WMC、SLD、Gml和Filter Encoding等一系列規(guī)范,支持GNU/Linux等Unix系統(tǒng)、Windows及MacOS X等。
MapServer的工作流程如圖1所示:①用戶的訪問(wèn)的參數(shù)由 Apache Web Server傳遞給 MapServer;②MapServe收到Web Server傳送的參數(shù)時(shí),先由參數(shù)所定義的文檔(Map File)中獲得空間數(shù)據(jù)的相關(guān)信息;③獲得空間數(shù)據(jù)信息后,向空間數(shù)據(jù)發(fā)出數(shù)據(jù)服務(wù)請(qǐng)求;④在得到相應(yīng)空間數(shù)據(jù)后,再把這些信息傳遞給MapS-erver;⑤MapServer通過(guò)空間變換等一系列處理后,由GD Graphics library將空間數(shù)據(jù)生成為PNG或JPG圖形;⑥圖形文件生成后,MapServer按照定義獲取指定的模版文檔(Template File),把相應(yīng)的圖形動(dòng)態(tài)的嵌入到html文檔中;⑦最后,將生成的符合瀏覽器標(biāo)準(zhǔn)的html文檔由Web Server將結(jié)果返回給客戶端。
圖1 MapServer工作流程
經(jīng)以上分析,筆者提出一種基于Linux的WebGIS平臺(tái)方案,如圖2所示,前端模塊選擇Openlayers,A-pache提供WEB服務(wù),MapServer提供地圖服務(wù)。
圖2 WebGIS平臺(tái)方案
OpenLayers是一個(gè)用于開(kāi)發(fā)WebGIS客戶端的JavaScript包。OpenLayers實(shí)現(xiàn)訪問(wèn)地理空間數(shù)據(jù)的方法都符合行業(yè)標(biāo)準(zhǔn),比如OpenGIS的WMS和WFS規(guī)范。在使用中通過(guò)OpenLayers.Layer.WMS可以直接調(diào)用 MapServer地圖服務(wù),在操作方面,OpenLayers除了可以在瀏覽器中幫助開(kāi)發(fā)者實(shí)現(xiàn)地圖瀏覽的基本效果,比如放大(Zoom In)、縮?。╖oom Out)、平移(Pan)等常用操作之外,還可以進(jìn)行選取面、選取線、要素選擇、圖層疊加等不同的操作。甚至可以對(duì)已有的OpenLayers操作和數(shù)據(jù)支持類型進(jìn)行擴(kuò)充,為其賦予更多的功能。
WEB服務(wù)負(fù)責(zé)將復(fù)雜的GIS功能轉(zhuǎn)交給地圖服務(wù)器處理,并將地圖服務(wù)器處理后的結(jié)果返回給客戶端。提供WEB服務(wù)的Apache是世界使用排名第一的Web服務(wù)器軟件,它免費(fèi)、穩(wěn)定且性能卓越,可以運(yùn)行在幾乎所有廣泛使用的計(jì)算機(jī)平臺(tái)上,由于其跨平臺(tái)和安全性被廣泛使用,是最流行的Web服務(wù)器端軟件之一。
MapServer提供地圖服務(wù),前面也介紹了 MapS-erver的特點(diǎn)和工作流程,在MapServer工作過(guò)程中,MapFile文件很重要,它是MapServer唯一能夠識(shí)別的地圖配置文件,文件中包含了對(duì)數(shù)據(jù)源、數(shù)據(jù)格式、用戶交互、相關(guān)規(guī)范的支持等描述信息。
地圖數(shù)據(jù)則可以靈活的選擇不同的存儲(chǔ)方式,MapServer自身支持多種矢量、柵格格式數(shù)據(jù),比如ESRI的shapefile。此外MapServer還集合PostGIS和開(kāi)源數(shù)據(jù)庫(kù)PostgreSQL對(duì)地理空間數(shù)據(jù)進(jìn)行存儲(chǔ)和SQL查詢操作。因此,可以根據(jù)不同的應(yīng)用進(jìn)行選擇地圖數(shù)據(jù)的存儲(chǔ)方式。
關(guān)于開(kāi)發(fā),可以使用 MapServer CGI模塊或 Map-Script模塊開(kāi)發(fā)WebGIS程序。利用MapServer CGI模塊開(kāi)發(fā)要準(zhǔn)備MapFile需要的資源,配置MapFile,設(shè)計(jì)用戶交互界面(即html文件,可以使用腳本語(yǔ)言,如JavaScript)。利用MapScript模塊就需要其他服務(wù)器端解決方案(指腳本語(yǔ)言),MapScript支持的語(yǔ)言有PHP、Perl、Python、Java、Tcl等,程序員在服務(wù)器端就可以使用這些語(yǔ)言通過(guò)調(diào)用MapScript的API靈活的進(jìn)行開(kāi)發(fā)。
基于上述方案,筆者采用Ubuntu操作系統(tǒng),根據(jù)數(shù)據(jù)配置了Mapfile文件,使MapServer能正確的發(fā)布地圖數(shù)據(jù),并使用Openlayers連接訪問(wèn) MapServer,在瀏覽器中實(shí)現(xiàn)了地圖的放大、縮小、平移、距離度量、點(diǎn)查詢等基本功能,以及比例尺、鷹眼地圖、地圖單位等信息的顯示。
本方案所涉及的軟件全為免費(fèi)的開(kāi)源軟件,整體框架兼容OGC規(guī)范,可以方便地與其他支持WMS規(guī)范的系統(tǒng)進(jìn)行互操作。并且在使用中,整個(gè)系統(tǒng)能夠流暢的進(jìn)行各種操作,系統(tǒng)運(yùn)行穩(wěn)定。當(dāng)然本方案也由不足之處,在進(jìn)行二次開(kāi)發(fā)的時(shí)候,由于不同軟件支持的開(kāi)發(fā)語(yǔ)言不同,如Openlayers使用JavaScript和html語(yǔ)言,MapServer使用PHP或Java等開(kāi)發(fā)語(yǔ)言,因此復(fù)雜的二次開(kāi)發(fā)需要開(kāi)發(fā)人員掌握多種編程語(yǔ)言才能進(jìn)行熟練的開(kāi)發(fā)。
本文提出的方案成本低廉,系統(tǒng)架構(gòu)較易擴(kuò)展,支持多種數(shù)據(jù)源,對(duì)于簡(jiǎn)單的應(yīng)用可以快速的開(kāi)發(fā)實(shí)現(xiàn),復(fù)雜的應(yīng)用也可通過(guò)二次開(kāi)發(fā)實(shí)現(xiàn),對(duì)于中小型Web-GIS系統(tǒng)或者研究都是一個(gè)不錯(cuò)的選擇。
[1]Jeff McKenna.An Introduction to Map Server[EB/OL].[2011-11-20].http://www.mapserver.org/introduction.html.
[2]趙 芳.基于 MapServer的教育地理信息系統(tǒng)構(gòu)建[J].測(cè)繪科學(xué),2011,36(1):180~183.
[3]劉 南,劉仁義.WebGIS原理及其應(yīng)用——主要WebGIS平臺(tái)開(kāi)發(fā)實(shí)例[M].北京:科學(xué)出版社,2002.
[4]于占福.Linux平臺(tái)下基于矢量格式的 WebGIS平臺(tái)的研究與實(shí)現(xiàn)[D].北京:中國(guó)科學(xué)院遙感應(yīng)用研究所,2004.
[5]呂 寧.基于WebGIS的網(wǎng)絡(luò)地圖服務(wù)的設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:中國(guó)地質(zhì)大學(xué),2006.
[6]路金閣,楊永國(guó).基于開(kāi)源軟件的 WebGIS服務(wù)器構(gòu)建[J].測(cè)繪與空間地理信息,2008,31(5):145~147.