MapServer 简介

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

MapServer的核心部分是C语言编写的地图操作模块,它的许多功能都依赖一些开源或免费的库。利用GEOS、OGR/GDAL 对多种矢量和栅格数据的支持,通过Proj.4共享库实时的进行投影变换。MapServer遵循OGC系列规范,可以集成PostGIS和开源数据库PostgreSQL,并对地理空间数据进行存储和SQL查询操作,基于ka-map、MapLab、Cartoweb 和Chameleon 等一系列客户端JavaScript API来支持对地理空间数据的传输与表达,并且遵守OGC制定的WMS、WFS、WCS、WMC、SLD、GML 和Filter Encoding 等一系列规范。

MapServer 的发展历史

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

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

MapServer的特点

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

  • 支持显示和查询数以百计的栅格,矢量和数据库格式。 支持的矢量格式:ESRI shapefiles, PostGIS, ESRI 的ArcSDE等(通过OGR库实现);支持的栅格格式:TIFF/GeoTIFF, EPPL7等(通过GDAL库实现)。 对shapefile文件,可以建立四元树空间索引。
  • 能够运行在多种不同的系统上(Windows, Linux, Mac OS X等)
  • 供两种工作方式,CGI 方式(适用于 CGI、Ajax、Flex 开发人员)和MapScript 方式(适用于 Php、Java、C# 开发人员),以原生 CGI 方式效率最高;
  • 对流行的脚本语言和开发环境(PHP, Python, Perl, Ruby, Java, .NET))提供支持
  • on-the-fly 投影
  • 高质量绘制模型
  • 完全支持定制的template的输出。
  • 许多现成的开源应用环境
  • MapFile 是 MapServer 的核心,它将各种地图要素组织成具有层次关系的对象系统;并定义数据来源,使用的数据格式,用户交互以及对OGC 协议的支持。
  • 支持微软和Apple公司共同研制的字型标准TrueType。
  • 支持分块的(tiled)矢量和栅格数据。
  • 地图元素(如比例尺、图例,参照图等)自动控制。
  • 图像比例自动调节。
  • 利用逻辑或正则表达式生成专题地图。
  • 特征标注(包含标注冲突解决)。
  • 可以通过URLs动态的对MapServer进行配置。
  • 支持动态的投影变换。
  • 对Open Geospatial Consortium若干网络规范的支持: WMS (client/server),non-transactional WFS (client/server), WCS (server only), WMC, SLD,GML 和Filter Encoding。

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

相比与由商业企业提供的众多WebGIS解决方案,MapServer是开源项目。这就意味着你可以免费使用MapServer, 并具有自行修改、复制以及再分发的权利。同时MapServer还有众多的优点:

MapServer是一个开源的基于胖服务器端/瘦客户端模式的实时地图发布系统,客户端发送数据请求时,服务器端实时的处理空间数据,并将生成的数据发送给客户端。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根据以数字格式存储的空间信息创建地图图像。 它可以处理矢量和栅格数据。MapServer可以渲染超过20种不同的矢量数据格式,包括shapefile,PostGIS和ArcSDE几何要素,OPeNDAP,Arc/Info coverage和Census TIGER文件。

并非地图上显示的所有信息都必须采用矢量格式。例如,可以在渲染的矢量数据后面显示区域的航空或卫星照片,以更清楚地了解这些矢量元素如何与现实世界的特征相关。MapServer本机读取两种栅格格式:GeoTIFF和EPPL7,但可以通过GDAL包读取20多种格式(包括Windows位图,GIF和JPEG)。但是,尽管MapServer理解并可以渲染这些栅格类型,但它无法使用空间信息标记图像。

MapServer 的组成部分

WebGIS的实现方法之一是利用Common Gateway Interface(CGI)技术。在服务器端通过CGI应用程序连接WebServer和GIS空间数据库,客户端仅须使用浏览器就可以对空间数据进行查询分析[2]。美国的明尼苏达大学(University of Minnesota),提供的WebGIS解决方案:MapServer,就是利用CGI技术。

MapServer 是利用 C 语言开发的开源 WebGIS 项目,它是一套基于胖服务器端 /瘦客户端模式的实时地图发布系统,客户端发送数据请求时,服务器端实时的处理空间数据,并将生成的数据发送给客户端。

MapServer支持三层体系结构:

  • 应用层:客户端浏览器
  • 中间层: MapServer CGI 模块 / 脚本语言+MapScript, Web服务器
  • 存储层: GIS空间数据库

一个简单的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 的两种模式

MapServer可以看作是两个独立模块的统称: MapServer CGI模块和MapScript模块。在服务器端可以使用任一模块,编写WebGIS程序。不过它们使用相同的配置文件MapFile。

MapServer可以在两种不同的模式下运行:CGI和MapScript。在CGI模式下,MapServer在Web服务器环境中作为CGI脚本运行。这很容易设置并产生快速,直接的应用程序。在MapScript模式下,可以从Perl,Python或PHP访问MapServer API。MapScript接口允许灵活,功能丰富的应用程序,仍然可以利用MapServer的模板工具。

MapServer和GeoServer的对比

MapServer 与 GeoServer 都是得到广泛应用的开源 WebGIS 工具,这两个都是通过网络来发布地图,也常常会被人拿来进行比较。MAPSERVER 同时也是符合OGC的WMS和非事务性WFS,基于CGI, 用C++编写;GEOSERVER 是用Java编写的(您需要安装Java SDK(不是JRE)来运行它),基于servlet并使用struts框架。

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

除了功能上的比较,在开发中进行技术选择时尤其要注意, MapServer 专注于 地图服务功能,可以作为项目的组件(甚至是核心组件),但是其他的功能大部分时间需要由开发人员实现;而 GeoServer 则是已经比较完善的套件,部署安装后基本上就可以作为产品来使用了。

MapServer 不是一个功能齐全的GIS,它没有提供集成的DBMS(数据库管理系统)工具,它的分析能力有限,而且没有地理配准工具。

哪个更好呢?很难说清楚,依赖于你想怎样发布你的数据和你更善长使用什么语言。两者都很出色,并且有优秀的文档和用户群。GEOSERVER实现了让你在线编辑空间数据,生成专题地图。地图发布是用 XML 文件。MAPSERVER善长于生成专题地图,比以前更成熟了,地图发布是通过文本配置文件。

选择哪一个更合适?如果只是发布地图而不允许修改的话我主张使用 MapServer, 维护起来更简单容易些。选择GeoServer是因为想要更好的功能,如在线编辑和数据库的支持像PostgreSQL或Oracle空间数据库,GeoServer 的另一个优势就是有一个免费的客户端软件UDIG。

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 框架、基于 servlet 和 STRUTS 框架、支持高效的 Spring 框架开发;
  2. 兼容 WMS 和 WFS 特性、支持 WFS-T 规范;
  3. 高效的数据库支持 PostGIS、ShapeFile、ArcSDE,Oracle、MySQL 等;
  4. 支持上百种投影;
  5. 能够将网络地图输出为 jpeg、gif、png 等格式;