教程:基于MapServer的WebGIS开发
- WebGIS
- 2007-09-15
- 114热度
- 0评论
摘要:WebGIS是将Web技术和GIS技术相结合的新技术,有着广泛的应用。通过WebGIS技术,客户端仅需使用浏览器(不一定包含专门插件)就可以对分布在Web上的GIS数据进行查询、分析等交互操作。
实现WebGIS技术之一是在服务器端使用CGI技术,由美国明尼苏达大学开发的MapServer就是采用这种技术。本文将详细介绍实现WebGIS的开源软件MapServer4.4.2的配置文件和它的两个独立模块,及应用它们开发WebGIS的方法。
关键词:MapServer,WebGIS,开源,CGI,脚本语言
1,背景介绍
地理信息系统对地表信息建立数学模型,利用计算机技术对数据进行存储,处理,分析。其中采用Web技术的地理信息系统即WebGIS。WebGIS的关键特征是面向对象、分布式和互操作。它将GIS数据和功能封装成对象,并且这些对像支持分布式计算,可以存储在不同的服务器上;对象通过一致的通信协议,可以方便的进行交换和交互操作[1]。
WebGIS的实现方法之一是利用Common Gateway Interface(CGI)技术。在服务器端通过CGI应用程序连接Web Server和GIS空间数据库,客户端仅须使用浏览器就可以对空间数据进行查询分析[2]。美国的明尼苏达大学(University of Minnesota),提供的WebGIS解决方案:MapServer,就是利用CGI技术。MapServer支持三层体系结构[3],如下:
CGI
GIS空间数据库
MapServer
CGI模块
或者
脚本语言+Mapscrīpt
Web服务器
客户端浏览器
相比与由商业企业提供的众多WebGIS解决方案,MapServer是开源项目。这就意味着你可以免费使用MapServer,并具有自行修改、复制以及再分发的权利[4]。同时MapServer还有众多的优点[5]:
1) 支持的矢量格式:ESRI shapefiles, PostGIS, ESRI的ArcSDE等(通过OGR库实现)。支持的栅格格式:TIFF/GeoTIFF, EPPL7等(通过GDAL库实现)。
2) 对shapefile文件,可以建立四元树空间索引。
3) 完全支持定制的template的输出。
4) 支持微软和Apple公司共同研制的字型标准TrueType。
5) 支持分块的(tiled)矢量和栅格数据。
6) 地图元素(如比例尺、图例,参照图等)自动控制 。
7) 图像比例自动调节。
8) 利用逻辑或正则表达式生成专题地图。
9) 特征标注(包含标注冲突解决)。
10) 可以通过URLs动态的对MapServer进行配置。
11) 支持动态的投影变换。
12) 对Open Geospatial Consortium若干网络规范的支持:WMS (client/server), non-transactional WFS (client/server), WCS (server only), WMC, SLD, GML和Filter Encoding[6]。
2,MapServer的组成及开发方法
MapServer是使用C语言编写的开源软件,它本身又依赖一些开源的或免费的库,如Shapelib, FreeType, Proj.4, GDAL/OGR[5]。
(一)必须的库:
a)GD Library:MapServer通过使用GD graphics library来表现GIF, PNG和JPEG格式的图像。这些图像通过MapServer CGI在浏览器上浏览。
b)Regex:Regex是一个正则表达式库。
(二)可选的库:
a) JPEG library:由GD调用生成JPEG图像。
b) PNG library:由GD调用生成PNG图像。
c) Zlib:由libpng用来提供图形压缩功能。
d) FreeType 2:由GD.调用提供TrueType支持。
e) PROJ.4:Proj.4用于动态的投影变换。WMS, WFS或WCS Services也需要它的支持。
f) GDAL/OGR:MapServer使用GDAL/OGR库来读入raster (GDAL) and vector (OGR)格式的数据
g) ArcSDE:ArcSDE是ESRI公司的空间数据库引擎(它不是免费的)用于支持MapServer进入SDE数据库。
h) EPPL7:用来读取EPPL7数据库和旧版本的Erdas LAN/GIS文件。它是作为MapServer的内置库。
MapServer可以看作是两个独立模块的统称:MapServer CGI模块和Mapscrīpt模块。在服务器端可以使用任一模块,编写WebGIS程序。不过它们使用相同的配置文件MapFile。本文的重点就是介绍MapFile文件,及使用两个模块开发WebGIS的方法。
2.1,MapFile文件
MapFile文件将各种地图要素组织成具有层次关系的对象系统[5]。数据来源,使用的数据格式,用户交互和对OGC协议的支持也在MapFile中定义。MapFile中包括的对象及其层次关系:
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的关键字包括对象名(图2中的所有对象)、对象属性(keyword),对象结束标记“END”。对象名和对象结束标记“END”大小写不敏感;属性名大小写敏感,配置ESRI的shapfile文件要使用大写,PostGIS的却总是小写。在MapFile文件中,符号“#”对单行注释。MapFile文件以“.map”为扩展名,可以使用各种文字编辑器编写。以下是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
#