MapServer 简介

MapServer是用C语言编写的一个开源地理空间数据谊染引擎,起源于20世纪90年代中期美国明尼苏达大学(University of Minnesota)、NASA 及明尼苏达州自然资源部(Minnesota Department of Natural Resources,MNDNR) 的一个合作项目一ForNet,这是一个基于麻省理工学院模式的许可证(MIT-style License)发布的开源软件,用于在Web上发布空间数据和交互式地图应用,可支持所有主流的操作系统,包括Windows.Linux.Mac OS X 等。它的定位不是实现全功能的GIS,而是提供满足Web 应用的大多数核心GIS功能。2009 年11月发布的最新版本为5.6.0 beta5。

它起源于 UMN和美国国家航空航天局的合作项目ForNet,以及之后的TerrSIP项目。可以说政府的支持在MapServer前期的发展中起了很大的作用,1994年MapServer之父Steve Lime和他的MapServer为更多的人熟悉。MapServer在发展壮大中,并不是孤立的,而是得到了许多开源社区和开源爱好者的支持。2005年11月,MapServer基金会成立,基金会本着"促进专业的开源网络制图开发环境和社区。即使最初集中于网络制图的项目,但希望能够给其他开源地理信息的项目提供资助"的宗旨,不仅促进了MapServer的专业化发展,而且促进了整个开源网络制图技术的发展。随着开源地理信息系统软件的进一步发展以及开源网络制图环境的进一步优化,2006年2月MapServer基金会正式改名为开源地理空间基金会(OSGeo),Autodesk公司将MapGuide作为开放源代码加入了该基金会,进一步促进了 MapServer的发展。

MapServer是一套基于胖服务器端/瘦客户端模式的实时地图发布系统,客户端发送数据请求时,服务器端实时的处理空间数据,并将生成的数据发送给客户端。MapServer 的核心部分是C语言编写的地图操作模块,它本身许多功能的实现依赖一些开源或免费的库.

MapServer 基于C 语言,利用GEOS、OGR/GDAL 对多种矢量和栅格数据的支持,通过Proj.4共享库实时的进行投影变换。同时,还集合PostGIS 和开源数据库PostgreSQL 对地理空间数据进行存储和SQL 查询操作,基于ka-map、MapLab、Cartoweb 和Chameleon 等一系列客户端JavaScript API来支持对地理空间数据的传输与表达,并且遵守OGC制定的WMS、WFS、WCS、WMC、SLD、GML 和Filter Encoding 等一系列规范。

概览

MapServer是一个用来在网上展现动态空间地图的流行的开源项目。它具有以下特点:

  • 支持显示和查询数以百计的栅格,矢量和数据库格式
  • 能够运行在多种不同的系统上(Windows, Linux, Mac OS X等)
  • 对流行的脚本语言和开发环境(PHP, Python, Perl, Ruby, Java, .NET))提供支持
  • on-the-fly 投影
  • 高质量绘制模型
  • 完全可定制的应用输出
  • 许多现成的开源应用环境

在最基本的形式中,MapServer就是待在Web服务器上的一个不活动的CGI程序。当一个请求发给MapServer之后,他会使用请求的URL中传递的信息和Mapfile,创建一个请求的地图的图像 请求可以返回图例,标尺,参考地图及CGI传递的变量值。MapServer应用解析

一个简单的MapServer包含以下几部分,如图所示:

MapServer原理示意

MapFile

MapServer应用的结构化的文本配置文件。它定义了地图的领域,用来告诉MapServer数据在哪以及在哪输出图像。它还定义了地图图层。包括他们的数据源,投影和符号。它必须有一个.map扩展名,否则MapServer识别不了。MapFile文件将各种地图要素组织成具有层次关系的对象系统。数据来源,使用的数据格式,用户交互和对OGC协议的支持也在MapFile中定义。MapFile中包括的对象及其层次关系:

Geographic Data

MapServer可以利用多种类型的地理信息数据源。默认的是ESRI数据格式,其他格式的数据也支持。

HTMLPages

是用户和MapServer之间的接口。它们通常位于Web根目录。在其最简单的形式中,MapServer可以被调用来放置一个静态的地图图像到HTML页面上。为了使地图能够交互,图像被放置在页面的一个HTML 表单上。

MapServer CGI

二进制的可执行文件。可以接收请求彬返回图像,数据等。它位于web服务器的cgi-bin或者scripts目录下。WEb服务器的用户必须有这些目录的执行权限。处于安全的考虑,它们不能为web的根目录下。默认的,这个程序被称作mapserv。

WEB/HTTP Server

当用户的浏览器命中时,提供HTML页面。你需要一个工作的Web(HTTP)服务器。例如Apache或者Microsoft的IIS,它们在你安装的MapServer所在的机器上。

开发方法

MapServer是使用C语言编写的开源软件,它本身又依赖一些开源的或免费的库,如Shapelib, FreeType, Proj.4, GDAL/OGR。

必须的库:

  1. GD Library :MapServer通过使用GD graphics library来表现GIF, PNG和JPEG 格式的图像。这些图像通过MapServer CGI在浏览器上浏览。
  2. Regex:Regex是一个正则表达式库。

可选的库:

  1. JPEG library:由GD调用生成JPEG 图像。
  2. PNG library:由GD调用生成PNG图像。
  3. Zlib:由libpng 用来提供图形压缩功能。
  4. FreeType 2:由GD.调用 提供TrueType支持。
  5. PROJ.4:Proj.4用于动态的投影变换。WMS, WFS 或 WCS Services也需要它的支持。
  6. GDAL/OGR:MapServer 使用GDAL/OGR库来读入raster (GDAL) and vector (OGR)格式的数据
  7. ArcSDE:ArcSDE是ESRI公司的空间数据库引擎(它不是免费的)用于支持MapServer进入SDE 数据库。
  8. EPPL7:用来读取EPPL7 数据库和旧版本的Erdas LAN/GIS 文件。它是作为MapServer的内置库。

MapServer和GeoServer的对比

MapServer和GeoServer的总体对比。

  • 功能上:MapServer弱于GeoServer,QGIS要强于UDIG。
  • 效率上:Mapserver对WMS(Web Map service)的支持更为高效,而Geoserver则更擅长于结合WFS(Web Feature service)规范的属性查询。

MapServer的特点

提供两种工作方式,CGI方式(适用于CGI、AJAX、FLEX开发人员)和MapScript方式(适用于Php、Java、 C#、Python开发人员)。以原生CGI方式效率最高,配合TileCache,可以快速生成大范围的地图瓦片数据。比较基于.Net和J2EE的商 业或开源平台,MapServer更适合高负荷的大型互联网地图应用。MapServer 是基于C写的地图服务软件,比用JAVA写的GeoServer速度要快。而且 MapServer 历史要比 GeoServer 悠久,甚至MapServer 的性能与商业的 ArcIMS 的功能可以娉美。

GeoServer的特点

GeoServer(http://geoserver.org/)是一个符合J2EE规范,且实现了WCS、WMS及WFS规格,支持TransactionWFS(WFS-T),其技术核心是整合了颇负盛名的JavaGISolkit--GeoTools。对于空间信息存储,它支持ESRI Shapefile及PostGIS、Oracle、ArcSDE等空间数据库,输出的GML档案满足GML2.1的要求。由于它是纯Java的,所以更适合于复杂的环境要求,而且由于它的开源,所以开发组织可以基于GeoServer灵活实现特定的目标要求,而这些都是商业GIS组件所缺乏的。GeoServer作为一个纯粹的Java实现,被部署在应用服务器中,简单的如Tomcat等;它的WMS和WFS组件响应来自于浏览器或uDig的请求,访问配置的空间数据库,如PostGIS、OracleSpatial等,产生地图和GML文档传输至客户端。

GeoServer 具有以下优点:

  1. 用 java 语言编写、标准的 J2EE 框架、基于 ser vlet 和 STRUTS 框架、支持高效的 Spring 框架开发;
  2. 兼容 WMS 和 WFS 特性、支持 WFS-T 规范;
  3. 高效的数据库支持 PostGIS、ShapeFile、ArcSDE,Oracle、MySQL 等;
  4. 支持上百种投影;
  5. 能够将网络地图输出为 jpeg、gif、png 等格式;