教程:基于MapServer的WebGIS开发

来源:百度文库 编辑:神马文学网 时间:2024/04/28 04:47:32
教程:基于MapServer的WebGIS开发
[ 来源:互联网 | 时间:2007年09月15日 | ] 【大中小】
摘要: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
#