地图服务器通常也称作地图引擎,它是WebGIS架构的核心,所有的地图操作都是通过地图服务器完成的。现在的主流开源地图服务器主要是MapServer和GeoServer。GIS 应用服务器,主要用来接收地图请求、动态生成地图图片或地理信息并返回给客户端其中,其中GML 与OWS 服务体系应用最广泛。GML 对地理实体的几何和普通属性进行基于XML 的编码,对空间信息进行统一描述和表示。OWS 包括三个空间信息服务: 网络地图服务WMS(Web Map Service) 、网络要素服务WFS(Web Feature Service)和网络处理服务WPS (Web Proceeeing Service) 。WMS是利用具有地理空间位置信息的数据制作地图的一项服务,它将地图定义为地理数据可视化的表现; WFS支持在遵循HTTP 协议的分布式计算机平台上进行要素查询,返回空间数据要素级GML编码;WPS是一个通用的接口,每个WPS 实现了它支持的过程,以及与其相关的输入和输出。
GeoServer(http://geoserver.org/)是一个遵守OGC开放标准的开源地图服务器,它支持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文档传输至客户端。
具有以下优点:
1) 用 java 语言编写、标准的 J2EE 框架、基于 servlet和STRUTS 框架、 支持高效的 Spring 框架开发;
2) 兼容 WMS 和 WFS 特性、支持 WFS-T 规范;
3) 高效的数据库支持 PostGIS、ShapeFile、ArcSDE,Oracle、MySQL 等;
4) 支持上百种投影;
5) 能够将网络地图输出为 jpeg、gif、png 、SVG、GML、KML等格式;
6)能够运行在任何基于J2EE/servle框架之上;
7)嵌入MapBuilder支持AJAX的地图客户端
8)实现了在线编辑空间数据、生成专题地图;
9)地图发布是用XML文件。
10)支持Goodgle Maps;
11)可发布KML数据,可与GoogleEarth影像叠加。
MapServer(https://mapserver.org/) 源自美国太空总署(NASA)资助的美国明尼苏达大学(University of Minnesota)ForNet项目,最终衍生为一个WebGIS开源软件,是一个功能强大的跨平台的网络地图服务软件包, 可以应用于UNIX/Linux, Windows, MacOSX, Solaris等平台,支持的语言包括 Python,PHP,Perl,Java,Tcl,C# 等。MapServer使用几个知名的开放源代码软件完成数据格式转换、地图投影转换、空间数据库的大数据量处理等, 而本身专注于地图绘制、地图图形格式、接口环境、兼容OGC互操作规范等方面。
MapServer具有强大的空间数据的网络发布功能,支持多种数据格式,使得在WebGIS 中整合空间数据和非空间数据变得更加容易。MapServer是基于胖服务器/瘦客户端模式开发的 WebGIS 平台。主要是因为处理空间数据的任务主要在服务器端完成,在通过客户端发送请求的时候,服务器依据客户端请求,执行相应的操作并返回数据,客户端将数据处理显示返回用户。它的核心模块主要是通过C语言编写完成,提供了两种开发模式,一种是基于CGI的,另一种是MapScript方式; 在服务器端可以使用任一模块,编写WebGIS程序。它遵守OGC制定的WMS、WFS、WCS和GML等一系列规范,支持分布式访问和互操作。MapServer作为WebGIS解决方案是基于对象的,基本配置文件 MapFile 和 MapScript 模块的API组织都是基于对象的。
MapProxy(https://mapproxy.org/)是 WMS 网页地图服务与切片服务提供者的瑞士军刀。它对已有地图服务的数据服务进行缓存、加速和转换,服务任何支持 OGC 标准的桌面与网页客户端。 MapProxy 开发与部署方式灵活,易于同 Apache/Nginx 环境等集成。MapProxy 也能作为一个独立服务器使用,这是对于新用户而言最容易的方式。 MapProxy 的默认示例是一个基本的 WMS 切片客户端,它显示了配置的各个图层;不具备改变投影等复杂功能,但足以验证服务是否正常运行。
先看历史悠久产品成熟的MapServer。Mapserver在国内用户广泛,其内核使用C++编写,基于CGI脚本实现,页面调用支持PHP、JSP等多种语言,并且对OGC的WMS和WFS规范提供支持。Map文件是Mapserver工程中关键的结构配置文件,定义了地图范围、数据源、地图图层、投影方式以及符号标记等内容。如果在Linux平台下快速配置MapServer地图服务器,使用Maptools发布的 FGS(FOSS GIS Suite)套件无疑是最佳方案,套件集成了整套的MapServer、Apache、PHPMapScript以及GDAL库等众多内容,并且提供安装后就可直接浏览的地图DEMO。
再看GeoServer,基于Java和Geotools库开发的Geoserver功能全面且遵循OGC开放标准,并由同时拥有PostGIS与uDig的Refractions公司提供支持。GeoServer对发布WFS-T和WMS服务提供便捷的支持,并以XML文件描述所有地图服务,同时即将加入的FROGS(Framework for Open Geospatial Services)项目将着重提供对WPS规范的支持。GeoServer的开发组很活跃,邮件咨询的问题很快会得到Jody Garnett和组内其他成员的回复。
比较来说,Mapserver对WMS的支持更为高效,而Geoserver则更擅长于结合WFS规范的属性查询。当然,对于使用者来说,最主要的区别还是传统CGI脚本与J2EE在技术上的分歧。但就发展趋势来看,J2EE的架构明显要占据优势,并且Geoserver拥有基于Eclipse RCP平台的开源客户端uDig。随着Geoserver的版本更新,相信其有实力成为今后开源WebGIS解方案的主流选择。
总的来说,功能上:MapServer弱于GeoServer。效率上:Mapserver对WMS(Web Map service)的支持更为高效,而Geoserver则更擅长于结合WFS(Web Feature service)规范的属性查询。