逯永光(測繪出版社,北京 100045)
20世紀90年代,隨著計算機網(wǎng)絡(luò)技術(shù)的發(fā)展及人們對地理空間信息需求的不斷增加,進而兩者結(jié)合產(chǎn)生了WebGIS技術(shù),這使得地理空間信息網(wǎng)絡(luò)共享成為可能。自WebGIS技術(shù)出現(xiàn)以來,在互聯(lián)網(wǎng)技術(shù)的不斷推動下,WebGIS技術(shù)獲得了飛速發(fā)展。很多GIS廠商和組織推出了各自的WebGIS產(chǎn)品,主要分為商業(yè)軟件和開源軟件。其中,商業(yè)軟件主要有ArcGIS Server、SuperMap iServer、MapGIS Server等,開源軟件中主要有GeoServer、MapServer等。一般來說,商業(yè)軟件功能較為齊全,編輯操作頁面友好,有完善的售后支持服務(wù),需要付費使用,利用其開發(fā)應(yīng)用系統(tǒng)的成本很高。開源軟件主要由各種公益組織負責(zé)開發(fā)維護,不定時地補充其功能,利用其開發(fā)應(yīng)用系統(tǒng),難度一般較商業(yè)軟件高,需要結(jié)合其他軟件,但是成本相對較低。
目前,在國內(nèi),開源軟件主要在科研院所和高校中應(yīng)用較多,不僅是因為其可以免費使用和分發(fā),而且主流的開源軟件功能也很齊全,配合其他配套軟件,可以滿足一定的科研需求。本文主要對一種基于MapServer和OpenLayers的地理空間信息網(wǎng)絡(luò)發(fā)布方案進行了論述,并給出了一些優(yōu)化建議。
MapServer采用C語言編寫,起源于20世紀90年代中期美國明尼蘇達大學(xué)和NASA的一個合作項目——ForNet,用于在Web上發(fā)布地理空間數(shù)據(jù)和實現(xiàn)交互式地圖應(yīng)用,可支持所有主流的操作系統(tǒng),包括Windows、Linux等。
MapServer提供了2種工作模式:CGI和MapScript,一般選用CGI模式進行應(yīng)用系統(tǒng)開發(fā)。當(dāng)客戶端發(fā)送數(shù)據(jù)請求時,服務(wù)器端CGI程序基于Mapfile文件實時讀取和處理地理空間數(shù)據(jù),并將處理結(jié)果返回到客戶端顯示。系統(tǒng)整合了GDAL、OGR、Pro4j等開源庫,通過Pro4j庫進行實時投影變換,支持Oracle Spatial、PostgreSQL、SHP、TIF等多種空間數(shù)據(jù)格式,在客戶端可通過OpenLayers等對返回的地理空間數(shù)據(jù)進行表達和繪圖,并且遵循OGC規(guī)范,支持WMS、WFS、WFS-T、WCS、WPS等操作。
Mapfile文件是MapServer應(yīng)用系統(tǒng)的核心,其對象層次組織結(jié)構(gòu)如圖1所示。Map對象是Mapfile文件的根節(jié)點,包含其他所有的對象,是應(yīng)用級的參數(shù),主要負責(zé)地圖空間范圍、坐標(biāo)單位、字體文件、符號文件、空間數(shù)據(jù)路徑等的設(shè)置。二級子節(jié)點中,Outputformat對象用來設(shè)置地圖輸出格式,Reference對象用來設(shè)置鷹眼圖,Legend對象用來設(shè)置地圖圖例,Scalebar對象用來設(shè)置地圖比例尺,Querymap對象用來定義查詢結(jié)果的渲染方式。Projection對象用來定義地圖坐標(biāo)系,Symbol對象用來設(shè)置地圖使用符號。Web對象用來定義一個Web接口運行時的參數(shù),如臨時圖像存放路徑、查詢?yōu)榭栈蚴r返回值、最小最大縮放比例、Metadata等,其中Metadata在配置OGC服務(wù)時需要使用。Layer對象是指地圖所包含的圖層,圖層在地圖上顯示的順序為倒序(第一個圖層在最下面,最后一個圖層在最上面),具體設(shè)置圖層元數(shù)據(jù)、比例尺、數(shù)據(jù)類型、數(shù)據(jù)路徑、投影、對應(yīng)主題、標(biāo)簽等。一個Mapfile文件最多可以包含100圖層,可滿足絕大多數(shù)應(yīng)用需要。

圖1 Mapfile文件對象組織結(jié)構(gòu)
Openlayers是目前一個主流的用于WebGIS客戶端開發(fā)的JavaScript包,用于實現(xiàn)標(biāo)準格式發(fā)布的地圖數(shù)據(jù)訪問,其可以支持的地圖格式包括ArcGIS地圖、Bing地圖、Google地圖、OpenStreetMap、WorldWind、WMS、WFS、WCS及用戶自定義地圖等,可以結(jié)合MapServer實現(xiàn)輕量級的WebGIS系統(tǒng)。
OpenLayers代碼一般嵌在HTML代碼中,除了在代碼中添加已有控件即可實現(xiàn)的鼠標(biāo)拖動、要素選取、量測、放大縮小、滾輪縮放、鷹眼圖等操作功能外,基于Prototype.js還可實現(xiàn)地圖瀏覽的Ajax效果,或?qū)σ延械牟僮骱蛿?shù)據(jù)類型進行擴展,為系統(tǒng)開發(fā)更多的功能,如自定義查詢結(jié)果顯示方式、添加網(wǎng)絡(luò)處理服務(wù)(WPS)接口等。OpenLayers常見功能控件具體見表1。
開放地理空間信息聯(lián)盟(Open Geospatial Consortium,OGC)是一個公益性的國際標(biāo)準組織,它基于XML規(guī)范制定了數(shù)據(jù)和服務(wù)的一系列標(biāo)準,如WMS、WFS、WCS、GML等,目前已被絕大多數(shù)WebGIS軟件所支持,成為多源跨平臺實現(xiàn)地理空間信息網(wǎng)絡(luò)共享的重要方式之一。

表1 OpenLayers常見控件及實現(xiàn)功能
WMS(web map service)規(guī)范主要包含以下3個操作:GetCapabitities操作可返回服務(wù)級元數(shù)據(jù);GetMap操作返回一幅地圖圖像,其坐標(biāo)系和圖像大小等參數(shù)通過HTTP請求傳入確定,也可以通過服務(wù)器端配置文件確定;GetFeatureInfo操作返回在地圖上指定位置處的要素信息。
WFS(web feature service)規(guī)范支持對地理要素的插入、更新、刪除等,對應(yīng)于桌面版GIS軟件中的查詢功能,包括空間查詢、屬性查詢,以及基于空間關(guān)系和屬性域的共同查詢。WFS主要操作包括GetCapabilities、DescribeFeatureType、GetFeature等。其中,GetCapabilities操作可返回服務(wù)級元數(shù)據(jù);DescribeFeatureType操作返回選中要素結(jié)構(gòu),以便客戶端進行查詢和其他操作;GetFeature操作可根據(jù)查詢條件返回一個GML數(shù)據(jù)文檔,該文檔可以被客戶端代碼解析和表達。
WCS(web coverage service)規(guī)范主要針對空間影像數(shù)據(jù),主要包含以下3個操作:GetCapabilities、GetCoverage和DescribeCoverageType。GetCapabilities操作可返回服務(wù)級元數(shù)據(jù);GetCoverage操作根據(jù)條件返回指定柵格數(shù)據(jù);DescribeCoverageType操作可獲取某一個柵格數(shù)據(jù)圖層的描述信息。
本文設(shè)計的地理空間信息網(wǎng)絡(luò)發(fā)布系統(tǒng)框架如圖2所示,系統(tǒng)采用3層體系結(jié)構(gòu):數(shù)據(jù)層、業(yè)務(wù)層、顯示層。其中,數(shù)據(jù)層主要存放系統(tǒng)所需的地理空間數(shù)據(jù),可以選用空間數(shù)據(jù)庫或文件系統(tǒng);業(yè)務(wù)層包括地圖服務(wù)器MapServer和網(wǎng)絡(luò)服務(wù)器Apache,Apache負責(zé)監(jiān)聽瀏覽器請求并轉(zhuǎn)發(fā)給MapServer CGI程序,由后者對請求進行解析,讀取數(shù)據(jù)層中地理空間數(shù)據(jù)并處理為指定格式,最后經(jīng)由Apache反饋給客戶端進行繪制;顯示層由Web瀏覽器組成,是用戶與WebGIS交互的接口。

圖2 發(fā)布方案框架
本文中,在服務(wù)器端采用文件系統(tǒng)存放待發(fā)布的矢量數(shù)據(jù)(SHP格式)和柵格影像,部署MapServer軟件和Apache。客戶端主要基于HTML和OpenLayers開發(fā),實現(xiàn)地圖瀏覽和操作功能。
MapServer安裝方式分為源代碼編譯和二進制文件兩種,考慮源代碼編譯的難度較高,本文選擇二進制文件安裝方式。MapServer在Windows平臺下的安裝包有MS4W和OSGeo4W兩種,其中OSGeo4W是一個軟件合集,除了MapServer之外,還包含GRASS、OpenEV、uDig等數(shù)十種軟件,而MS4W則主要包含MapServer和Apache,可滿足本文需求,故選擇MS4W軟件包進行安裝。
MS4W軟件包中包含Apache Web服務(wù)器、MapServer和MapScript模塊,通過官網(wǎng)下載之后,將其解壓到硬盤的根目錄下,然后運行其根目錄下的apache_install.bat,即可完成Apache Web服務(wù)器的安裝,至此軟件安裝完成。打開瀏覽器,在地址欄輸入http:∥127.0.0.1/cgi-bin/mapserv.exe,如果返回信息為“No query information to decode.QUERY_STRING is set,but empty.”則表明安裝成功,可以進行下一步的地理空間數(shù)據(jù)網(wǎng)絡(luò)發(fā)布。
地理空間數(shù)據(jù)網(wǎng)絡(luò)發(fā)布包括WMS、WFS和WCS,WMS和WFS發(fā)布使用的數(shù)據(jù)為SHP格式的世界地圖,WCS發(fā)布使用的數(shù)據(jù)為TIF格式的遙感影像。
首先對待發(fā)布數(shù)據(jù)進行規(guī)范化處理,包括數(shù)據(jù)格式轉(zhuǎn)換、投影轉(zhuǎn)換等。將所有矢量數(shù)據(jù)統(tǒng)一轉(zhuǎn)換為SHP格式數(shù)據(jù),空間坐標(biāo)系為WGS-84。柵格影像使用ERDAS軟件進行規(guī)范處理,坐標(biāo)系選擇WGS-84。
其次需要配置網(wǎng)絡(luò)發(fā)布所需的字體文件、符號文件及Mapfile文件。字體文件和符號文件不再贅述,主要基于具體應(yīng)用需求進行制作和配置。Mapfile文件配置是網(wǎng)絡(luò)服務(wù)發(fā)布的核心,主要包括Map對象、Web對象、Layer對象、Class對象等。
Web對象主要用于配置網(wǎng)絡(luò)服務(wù)的元數(shù)據(jù),包括WMS、WFS、WCS,部分代碼如下:
Web
Metadata
"wms_title" "worldmap-wms"
"wms_onlineresource" "http:∥127.0.0.1/cgi-bin/mapserv.exe?"
"wms_srs" "EPSG:4326"
"wms_enable_request" "*"
"wfs_title" "worldmap-wfs"
"wfs_onlineresource" " http:∥127.0.0.1/cgi-bin/mapserv.exe?"
"wfs_srs" "EPSG:4326"
"wfs_abstract" "This text describes the wfs
service"
"wfs_enable_request" "*"
"wcs_onlineresource" " http:∥127.0.0.1/cgi-bin/mapserv.exe?"
"wcs_enable_request" "*"
"wcs_label" "tif wcs"
End
End
Layer對象用于配置服務(wù)發(fā)布所需圖層,包括矢量數(shù)據(jù)圖層和柵格數(shù)據(jù)圖層,部分代碼如下:
Layer
Name "worldmap"
Type polygon
Data "../data/world"
Metadata
"wms_title" "layer01"
"wms_srs" "EPSG:4326"
"wfs_title" "layer02"
"wfs_srs" "EPSG:4326"
"gml_featureid" "id"
"wfs_enable_request" "*"
End
Class
Name "world"
Style
Color 255 255 255
Outlinecolor 96 96 96
Backgroundcolor 45 180 135
End
End
End
Layer
name "world_raster"
Type Raster
Data "../data/world.tif"
Metadata
"wcs_label" "name"
"wcs_rangeset_name" "my name"
"wcs_rangeset_label" "my label"
End
Projection
"init=epsg:4326"
End
End
Mapfile文件配置完成后,將其和對應(yīng)地理空間數(shù)據(jù)、符號文件、字體文件等置于相應(yīng)文件夾,并啟動MapServer和Apache,即可完成地理空間數(shù)據(jù)的網(wǎng)絡(luò)發(fā)布。
在客戶端通過使用OpenLayers和HTML進行WebGIS客戶端開發(fā),加載WMS、WFS和WCS數(shù)據(jù)服務(wù),實現(xiàn)了地理空間信息的在線瀏覽和操作功能,部分實現(xiàn)代碼如下:
var map=new OpenLayers.Map(“world_demo”);
var wmap=new OpenLayers.Layer.WMS(“wworld”,“http:∥127.0.0.1/cgi-bin/mapserv.exe? “,{layers:”worldmap”});
var wfs_pro=new OpenLayers.Protocol.WFS({version:”1.1.0”,url:”http:∥127.0.0.1/cgi-bin/mapserv.exe?”,featuretype:”worldmap”});
var vmap=new OpenLayers.Layer.Vector(“vworld”,{strategies:[new OpenLayers.Strategy.Fixed()],protocol:wfs_pro});
map.addLayer(wmap);
map.addLayer(vmap);
map.addControl(new OpenLayers.Control.LayerSwitcher());
…
(1) 矢量數(shù)據(jù)應(yīng)該盡量選用SHP格式文件。MapServer可以支持多種矢量數(shù)據(jù)格式,但是以SHP格式文件讀取和處理速度較快,并且可以為SHP數(shù)據(jù)建立空間索引,可進一步提高MapServer的處理效率。
(2) 引入Kamap或Tilecache的瓦片機制。WebGIS系統(tǒng)的底圖一般變動較小,與MapServer讀取矢量數(shù)據(jù),然后進行處理,并將處理結(jié)果返回到客戶端的模式相比,采用瓦片地圖可以省去讀取數(shù)據(jù)和處理數(shù)據(jù)的步驟,將極大地減少客戶端的響應(yīng)時間。
(3) 優(yōu)化投影文件。在Mapfile中需要設(shè)置地圖和圖層的投影參數(shù),而MapServer的投影文件由數(shù)千種投影組成,如果每次都掃描整個文件查找所設(shè)置投影無疑會降低處理速度。因此,需要對投影文件進行優(yōu)化,刪除不需要的投影編碼,或?qū)?yīng)用較多的投影編碼的位置提到文件的前部,即可以減少投影參數(shù)的查找時間。
MapServer是一種應(yīng)用廣泛的開源WebGIS軟件,并且其功能在不斷增強。通過本文對基于MapServer和OpenLayers的地理空間信息網(wǎng)絡(luò)發(fā)布方案進行的論述,筆者認為其可以滿足一般的WebGIS開發(fā)需求,未來可考慮在服務(wù)器端引入其他軟件包或在客戶端引入其他JavaScript框架,進一步增強應(yīng)用系統(tǒng)的功能,這也是筆者下一步的研究內(nèi)容。
參考文獻:
[1] OSGeo.MapServer:open source web mapping[EB/OL].[2018-03-06].http:∥www.mapserver.org.
[2] OpenLayers中國社區(qū).OpenLayers JavaScript Mapping Library[EB/OL].[2018-03-06].http:∥www.openlayers.cn/cnapi/files/OpenLayers/Layer-js.html.
[3] 冉祥生.基于MapServer的空間信息發(fā)布技術(shù)研究[D].成都:西南交通大學(xué),2008.
[4] 高進.基于MapServer的電子海圖服務(wù)系統(tǒng)研究[D].大連:大連海事大學(xué),2013.
[5] 李信鵬.基于MapServer的遙感影像發(fā)布系統(tǒng)的設(shè)計與實現(xiàn)[D].北京:中國科學(xué)院中國遙感衛(wèi)星地面站,2007.
[6] 孫巖松.基于矢量瓦片的Web電子海圖研究[D].大連:大連海事大學(xué),2017.
[7] 顧穎虹,芮建勛,陳能,等.基于MapServer的WebGIS地圖符號化研究與實現(xiàn)[J].上海師范大學(xué)學(xué)報(自然科學(xué)版),2012,41(1):56-61.
[8] 孫偉,馬照亭,張成成,等.一種基于MapServer的KML地理信息網(wǎng)絡(luò)服務(wù)實現(xiàn)方法[J].測繪通報,2012(12):53-56.
[9] 鄭逢斌,元沐南,王棟.基于開源WebGIS的遙感數(shù)據(jù)共享方法研究[J].河南大學(xué)學(xué)報(自然版),2016,46 (4):438-446.
[10] 趙慧芬.基于MapServer和Openlayer的WebGIS開發(fā) [J].測繪與空間地理信息,2013(9):100-101.
[11] 張潔.基于OpenLayers3的自然保護區(qū)規(guī)劃輔助平臺的實現(xiàn) [D].上海:華東師范大學(xué),2017.
[12] 李昕煜.基于JavaScript的WebGIS前端開發(fā)及優(yōu)化[D].長春:吉林大學(xué),2015.
[13] 張楠,張海燕.基于OpenLayers和TileCache的出行示意圖設(shè)計[J].山東科學(xué),2011,14(3):69-74.