摘要:WebGIS是將Web技術(shù)和GIS技術(shù)相結(jié)合的新技術(shù),有著廣泛的應(yīng)用。通過WebGIS技術(shù),客戶端僅需使用瀏覽器(不一定包含專門插件)就可以對分布在Web上的GIS數(shù)據(jù)進(jìn)行查詢、分析等交互操作。
實現(xiàn)WebGIS技術(shù)之一是在服務(wù)器端使用CGI技術(shù),由美國明尼蘇達(dá)大學(xué)開發(fā)的MapServer就是采用這種技術(shù)。本文將詳細(xì)介紹實現(xiàn)WebGIS的開源軟件MapServer4.4.2的配置文件和它的兩個獨(dú)立模塊,及應(yīng)用它們開發(fā)WebGIS的方法。
關(guān)鍵詞:MapServer,WebGIS,開源,CGI,腳本語言
1,背景介紹
地理信息系統(tǒng)對地表信息建立數(shù)學(xué)模型,利用計算機(jī)技術(shù)對數(shù)據(jù)進(jìn)行存儲,處理,分析。其中采用Web技術(shù)的地理信息系統(tǒng)即WebGIS。WebGIS的關(guān)鍵特征是面向?qū)ο蟆⒎植际胶突ゲ僮?。它將GIS數(shù)據(jù)和功能封裝成對象,并且這些對像支持分布式計算,可以存儲在不同的服務(wù)器上;對象通過一致的通信協(xié)議,可以方便的進(jìn)行交換和交互操作[1]。
WebGIS的實現(xiàn)方法之一是利用Common Gateway Interface(CGI)技術(shù)。在服務(wù)器端通過CGI應(yīng)用程序連接Web Server和GIS空間數(shù)據(jù)庫,客戶端僅須使用瀏覽器就可以對空間數(shù)據(jù)進(jìn)行查詢分析[2]。美國的明尼蘇達(dá)大學(xué)(University of Minnesota),提供的WebGIS解決方案:MapServer,就是利用CGI技術(shù)。MapServer支持三層體系結(jié)構(gòu)[3],如下:
CGI
GIS空間數(shù)據(jù)庫
MapServer
CGI模塊
或者
腳本語言+Mapscrīpt
Web服務(wù)器
客戶端瀏覽器
相比與由商業(yè)企業(yè)提供的眾多WebGIS解決方案,MapServer是開源項目。這就意味著你可以免費(fèi)使用MapServer,并具有自行修改、復(fù)制以及再分發(fā)的權(quán)利[4]。同時MapServer還有眾多的優(yōu)點(diǎn)[5]:
1) 支持的矢量格式:ESRI shapefiles, PostGIS, ESRI的ArcSDE等(通過OGR庫實現(xiàn))。支持的柵格格式:TIFF/GeoTIFF, EPPL7等(通過GDAL庫實現(xiàn))。
2) 對shapefile文件,可以建立四元樹空間索引。
3) 完全支持定制的template的輸出。
4) 支持微軟和Apple公司共同研制的字型標(biāo)準(zhǔn)TrueType。
5) 支持分塊的(tiled)矢量和柵格數(shù)據(jù)。
6) 地圖元素(如比例尺、圖例,參照圖等)自動控制 。
7) 圖像比例自動調(diào)節(jié)。
8) 利用邏輯或正則表達(dá)式生成專題地圖。
9) 特征標(biāo)注(包含標(biāo)注沖突解決)。
10) 可以通過URLs動態(tài)的對MapServer進(jìn)行配置。
11) 支持動態(tài)的投影變換。
12) 對Open Geospatial Consortium若干網(wǎng)絡(luò)規(guī)范的支持:WMS (client/server), non-transactional WFS (client/server), WCS (server only), WMC, SLD, GML和Filter Encoding[6]。
2,MapServer的組成及開發(fā)方法
MapServer是使用C語言編寫的開源軟件,它本身又依賴一些開源的或免費(fèi)的庫,如Shapelib, FreeType, Proj.4, GDAL/OGR[5]。
(一)必須的庫:
a)GD Library:MapServer通過使用GD graphics library來表現(xiàn)GIF, PNG和JPEG格式的圖像。這些圖像通過MapServer CGI在瀏覽器上瀏覽。
b)Regex:Regex是一個正則表達(dá)式庫。
(二)可選的庫:
a) JPEG library:由GD調(diào)用生成JPEG圖像。
b) PNG library:由GD調(diào)用生成PNG圖像。
c) Zlib:由libpng用來提供圖形壓縮功能。
d) FreeType 2:由GD.調(diào)用提供TrueType支持。
e) PROJ.4:Proj.4用于動態(tài)的投影變換。WMS, WFS或WCS Services也需要它的支持。
f) GDAL/OGR:MapServer使用GDAL/OGR庫來讀入raster (GDAL) and vector (OGR)格式的數(shù)據(jù)
g) ArcSDE:ArcSDE是ESRI公司的空間數(shù)據(jù)庫引擎(它不是免費(fèi)的)用于支持MapServer進(jìn)入SDE數(shù)據(jù)庫。
h) EPPL7:用來讀取EPPL7數(shù)據(jù)庫和舊版本的Erdas LAN/GIS文件。它是作為MapServer的內(nèi)置庫。
MapServer可以看作是兩個獨(dú)立模塊的統(tǒng)稱:MapServer CGI模塊和Mapscrīpt模塊。在服務(wù)器端可以使用任一模塊,編寫WebGIS程序。不過它們使用相同的配置文件MapFile。本文的重點(diǎn)就是介紹MapFile文件,及使用兩個模塊開發(fā)WebGIS的方法。
2.1,MapFile文件
MapFile文件將各種地圖要素組織成具有層次關(guān)系的對象系統(tǒng)[5]。數(shù)據(jù)來源,使用的數(shù)據(jù)格式,用戶交互和對OGC協(xié)議的支持也在MapFile中定義。MapFile中包括的對象及其層次關(guān)系:
MapObject
Querymap
Symbol
Projection
WebObject
Reference Map
Outputformat
Scalebar
Lengend
Layer Object
Label Object
Label Object
Feature
Projection
Class Object
Join Object
Label Object
Style Object
Grid Object
MapFile的語法很簡單。MapFile的關(guān)鍵字包括對象名(圖2中的所有對象)、對象屬性(keyword),對象結(jié)束標(biāo)記“END”。對象名和對象結(jié)束標(biāo)記“END”大小寫不敏感;屬性名大小寫敏感,配置ESRI的shapfile文件要使用大寫,PostGIS的卻總是小寫。在MapFile文件中,符號“#”對單行注釋。MapFile文件以“.map”為擴(kuò)展名,可以使用各種文字編輯器編寫。以下是MapFile的一個例子:
#
# Start of map file
#
NAMECHINA
STATUS ON
SIZE 400 300
SYMBOLSET ../etc/symbols.sym
FONTSET ../etc/fonts.txt
EXTENT 73 35 137 45
UNITS DD
SHAPEPATH "../data/china"
IMAGECOLOR 255 255 255
#
# Start of web interface definition
#
WEB
TEMPLATE "/ms4w/apps/myapps/htdocs/temp.html"
IMAGEPATH "/ms4w/tmp/ms_tmp/"
IMAGEURL "/ms_tmp/"
END#END WEB
#