开源实验之MapServer的安装和使用

开源实验之MapServer的安装和使用

2016-10-27 作者: 肖芳 浏览: 2910 次

摘要: MapServer简介 在开源WebGIS领域,MapServer的历史和名气都超过GeoServer,很早就被列入OSGeo项目组。 与GeoServer不同,MapServer用C语言编写,采用传统的CGI架构,融合了Pro4j、GDAL等开源项目。对比...

MapServer简介

在开源WebGIS领域,MapServer的历史和名气都超过GeoServer,很早就被列入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更适合高负荷的大型互联网地图应用。

关注“开源集思”公众号
获取免费资源

随机推荐


Copyright © Since 2014. 开源地理空间基金会中文分会 吉ICP备05002032号

Powered by TorCMS

OSGeo 中国中心 邮件列表

问题讨论 : 要订阅或者退订列表,请点击 订阅

发言 : 请写信给: osgeo-china@lists.osgeo.org