Focus

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
MapServer简介
    在开源WebGIS领域,MapServer的历史和名气都超过GeoServer(20世纪90年代中期,由明尼苏达大学研制),很早就被列入OSGeo项目组。
与GeoServer不同,MapServer用C语言编写,采用传统的CGI架构,融合了Pro4j、GDAL等开源项目。对比J2EE架构的GeoServer,MapServer显得非常精巧,5.6版本的核心部分只有33KB,源代码只有2.2M,包括Apache、Php、Pro4j、GDAL、MapScript在内的完整安装包也只有35M。

安装过程
    和Java一样,C具有良好的跨平台特性,MapServer支持Windows、Linux、Mac OS X等操作系统。

    官方网站对Unix和Windows平台下的源代码安装步骤给出了详细说明。根据说明下载需要的第三方库,然后在Shell命令行模式下编译源代码,对于缺少Unix Shell或DOS操作经验的用户,这是一件比较头疼的事情。好在MapServer已经考虑到不习惯命令行操作的Windows用户,给出了Windows下的已编译安装包ms4w,目前最新版本是3.0beta11。
   
    ms4w的安装过程很简单,下载ms4w,解压缩到硬盘任意目录(目录名最好不要包含中文字符),打开命令提示符窗口,切换到ms4w所在目录,键入apache-install即可。(提示:如果机器上安装有Apache或IIS,运行apache-install之前,请将它们关闭。ms4w安装后不会和原有的Apache冲突。)

看到如下信息,说明安装成功。
Installing the Apache MS4W Web Server service
The Apache MS4W Web Server service is successfully installed.
Testing httpd.conf....
Errors reported here must be corrected before the service
can be started.
The Apache MS4W Web Server service is starting.
The Apache MS4W Web Server service was started successfully.

安装完成后,使用浏览器访问 http://127.0.0.1/cgi-bin/mapserv.exe,MapServer返回如下提示信息
No query information to decode. QUERY_STRING is set, but empty.

发布地图数据
    类似于Arcgis Server和GeoServer,MapServer采用零代码编写的配置文件方式管理地图发布,配置文件被称为Mapfile,后缀名为map。

    Mapfile有三种编写方式:
    1、参考官方文档Mapfile章节,手工编写
    这种方式要求开发人员对Mapfile的编写规则非常熟悉,否则很容易出错。
    2、类似Arcgis Server和GeoServer提供的Web图形化配置界面,MapServer有一个对应的开源项目MapLab,提供基于Web的图形化配置界面
    不过个人感觉,MapLab的易用性远逊于Arcgis Server和GeoServer。
    3、使用开源桌面平台QGIS,自动生成Mapfile文件
    对于新手,推荐使用第三种方式。

以下是测试用的Mapfile文件,MapServer对Mapfile文件的存放位置没有特殊要求,可以存放在不同的计算机上。

# Mapfile文件必须以MAP开头
MAP
# Map的名字 test
NAME test
STATUS ON
# 地图大小
SIZE 800 600
# Projection definition
# Projections are not currenlty supported. If desired, add your own # projection information based on Mapserver documentation.
# Map的坐标系
PROJECTION "init=epsg:4326"
END

# Map的全图范围
EXTENT 75 15 140 55
# Map的坐标单位 DD表示经纬度
UNITS DD
# Map的背景颜色 白色
IMAGECOLOR 255 255 255
# 生成的图片类型,常用gif或png
IMAGETYPE gif
# shp文件的路径,请使用绝对路径
SHAPEPATH "I://cn_data"
#
# Start of web interface definition. Only the TEMPLATE parameter # must be specified to display a map. See Mapserver documentation
# MapServer内置了地图客户端功能,此处是Web客户端相关设置。
# 由于我们使用Openlayers作为地图客户端,MapServer做为地图服务器,此处不做设置
WEB
# HEADER
# TEMPLATE
# FOOTER
# 最小、最大比例尺等级
MINSCALE 1
MAXSCALE 13
# 设置IMAGEPATH,默认路径如下,请使用绝对路径
IMAGEPATH 'I:/ms4w/Apache/htdocs/tmp'
# 设置IMAGEURL,默认路径如下
IMAGEURL '/tmp/'
END
# 设置图层,一个Map下可以包含多个LAYER
LAYER NAME polyline  # 图层名称,MapServer使用该名称
TYPE LINE # 几何类型
STATUS ON
DATA "roa_4m" # shp文件名,不需要带扩展名,路径在前面的SHAPEPATH项中指定
CLASS NAME "roa_4m" # 类名
# TEMPLATE
COLOR 112 0 0 # 颜色
END
END
END # Map File

客户端测试
    接下来测试刚才建立的Mapfile,在浏览器地址栏中输入 http://127.0.0.1/cgi-bin/mapserv.exe?LAYERS=polyline&MAP=I:/ms4w/Apache/htdocs/my.map&FORMAT=gif&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=75,15,140,55&WIDTH=800&HEIGHT=600
大约0.5秒后(初次加载),浏览器显示出中国1:400万道路网,地图发布成功!熟悉OGC标准的朋友可能已经发现,上面的URL是WMS地图请求。

直接通过CGI请求,得到的是一幅静态地图,为了实现地图的缩放、漫游,我们选用Openlayers地图客户端。通过OpenLayers.Layer.WMS可以直接调用MapServer地图服务,测试代码如下:
var ms_layer = new OpenLayers.Layer.WMS(
   "polyline", //OpenLayers中的图层名
   "/cgi-bin/mapserv.exe", //MapServer地图服务器的路径
   { layers: 'polyline', //Mapfile中定义的图层名
     map: 'I:/cn_data/my.map', //Mapfile文件的绝对路径,注意必须使用'/'而不是'\',使用相对路径无法显示地图
     format: 'gif' },
   { reproject: false,
     'numZoomLevels': 20,
     gutter: 15,
     buffer: 0 }
);

滚动鼠标滚轮,地图的刷新速度保持在0.5秒以内。MapServer继承了C语言的特点,地图渲染效率很高。

写在最后
    MapServer提供两种工作方式,CGI方式(适用于CGI、AJAX、FLEX开发人员)和MapScript方式(适用于Php、Java、C#、Python开发人员)。以原生CGI方式效率最高,配合TileCache,可以快速生成大范围的地图瓦片数据。比较基于.Net和J2EE的商业或开源平台,MapServer更适合高负荷的大型互联网地图应用。
posted on 2012-10-17 16:43  Y1  阅读(2161)  评论(0编辑  收藏  举报