论文部分内容阅读
【摘 要】本文阐述了利用开源软件MapServer进行WebGIS技术研究的重要意义,详述了MapServer的特点、体系结构及实现地图网络发布的关键技术,并结合应用实例,开发实现了基于MapServer的城市地名地址信息发布系统。
【关键词】开源软件;MapServer;WebGIS;体系结构;地图发布
随着WebGIS的应用日益广泛,如何低成本高效率地开发WebGIS已经成为GIS产业发展的迫切需求,基于MapServer的WebGIS解决方案正好迎合了这一点。MapServer是由美国明尼苏达大学和NASA 联合开发的一个具有强大的空间数据网络发布功能的开源WebGIS软件平台。一方面其强大的功能和商业软件相比毫不逊色,另一方面,作为一款开源软件,其具有新技术跟进及时、价格低廉、安全性好、代码透明等特点。目前,国外对MapServer的研究与应用已较为成熟,而国内的研究与应用甚少。通过开源软件技术路线,我们可以发展和掌握较多的自主知识产权, 对GIS产业国产软件的自主创新有着重要意义。
1 MapServer特點
MapServer是面向对象的,基本配置文件MapFile和MapScript模块的API组织都是基于对象的。MapServer基于C语言开发,利用多个开源的外部支持库(GEOS、OGR/GDAL、Proj.4等)实现对多种失量和栅格数据以及投影变换的支持。MapServer没有自己的数据格式,但可通过集合PostGIS和开源数据库PostgreSQL实现对地理空间数据的存储和SQL查询操作。同时,MapServer基于ka-map,MapLab,Cartoweb,Chameleon等一系列客户端JavaScript API来支持对地理空间数据的传输与表达,并且遵守开放地理空间协会(Open Geospatial Consortium,OGC)制定的WMS、WFS、WCS、WMC、SLD、GML和Filter Encoding等一系列规范。总而言之,从技术角度而言,MapServer比其他同类产品采用更便捷的安装方法,支持更多的数据类型,支持更广的系统平台。
2 MapServer体系结构
2.1 MapServer的数据源。从数据存储位置上划分,MapServer数据源有四种:1)本地数据:直接读取存储在本地的地图数据,如shappfile文件等;2)局域网数据:存储在局域网数据服务器上,基于TCP/IP协议通过空间数据引擎或空间数据库访问,如ArcSDE、Oracle Spatial等;3)广域网数据:存储于远程数据服务器上,基于HTTP 协议接收远程发布的遵守OGC互操作规范的地图数据,如Web地图服务WMS (Client / Server)等;4)分布式数据:存储于多台数据服务器上,通过“融合(Fusion)MapServer”机制实现数据集成与共享,类似于ERSI用“版本”来管理工作流的方式(Managing work flow with versions)[1]。从数据存储格式上划分,MapServer数据源主要有矢量地图数据和栅格地图数据,通过使用GDAL/OGR外部支持库来实现对多种矢量及栅格数据访问的支持,详细的支持数据格式列表可见http://www.gdal.org[2]。2.2 MapServer的核心--MapServer CGI程序。MapServer实际运行时在物理上就是一个CGI程序。CGI主要的功能就是在服务器应用程序和客户之间传递信息,其工作流程为:当浏览器通过URL告知Web Server调用MapServer CGI模块时,Web Server就为CGI模块创建一个进程(CGI程序);CGI模块运行并加载URL指定的MapFile文件,读取MapFile文件中的TEMPLATE文件(HTML文件),并将TEMPLATE文件中CGI 变量的替换变量(template substitutions)替换成具体的值(同时根据MapFile中指定的路径读取相关地图数据);处理完TEMPLATE文件后,CGI模块将TEMPLATE文件处理结果以HTML的形式返回给Web Server,Web Server再将HTML文件输出到用户浏览器上。这时TEMPLATE文件(HTML文件)就作为用户的交互界面。2.3 MapServer的地图服务接口类型。MapServe使用许多开源类库来完成数据格式转换、地图投影转换等,而本身专注于地图绘制、地图服务接口环境、兼容OGC互操作规范等方面。MapServer的地图服务接口类型主要有:1)Mapscript模式的地图服务:MapServer的Mapscript支持多种高级脚本程序语言(PHP、Python、C#等)生成交互式的Web地图服务程序;2) CGI模式地图服务:使用"HTTP GET"或者"HTTP POST"两种方式接受参数输入,动态创建地图或者执行查询操作;3) OGC互操作规范服务:支持Web地图服务WMS (Client/Server),Web地图要素服务WFS (Client/Server),Web制图环境WMC, Web图层服务WCS[3].三种接口类型运行时在物理上均是CGI程序,均读取相同的MapFile地图配置文档,MapFile(*.map文件)是MapServer数据的核心,它将各种地图要素组织成具有层次关系的对象系统,定义了MapServer加载的数据中的对象之间的相互关系,数据来源,使用的数据格式,用户交互和对OGC 协议的支持等[4],类似于ArcGIS的mxd地图配置文档。MapFile文档的编辑方式很多,可以用专业地图文档编辑工具也可以直接用文本编辑器。MapServer体系结构图如图1所示。
3 地图网络发布的实现
3.1构建MapServer开发平台。在进行MapServer开发前首先需要搭建好基础开发平台,本文选择了如下开源软件来配置基础开发平台:Web服务器为Apache2.2.4,WebGIS服务器为MapServer4.10.1,数据库服务器为PostgreSQL/PostGIS( Geographic Object for PostgreSQL)(采用局域网数据)。对初涉者来说构建MapServer开发平台较为困难和繁琐,因为需要编译MapServer自身及其所需的大量开源支持类库的源代码。MapServer官方网站发布了已经编译好的版本MS4W(MapServerForWindows),其安装过程较为复杂,可参见参考文献:[4]。MapServer配置好后就可以用其专用的开源工具MapLab来配置MapFile文件了,如图2所示。也可以用文本编辑工具(如写字板)直接编辑*.map格式的文件来配置MapFile文件。3.2开发方式选择。MapServer有两种开发方式:MapServerCGI和MapScript。本文采用了MapScript结合PHP的开发方式。利用MapScript模块就需要其他服务器端解决方案(指脚本语言),如PHP(以CGI模 块安装在WebServer上)。MapScript模块作为PHP的扩展模块,放在PHP安装路径的extensions目录下。MapScript模块保留MapFile文件的层次对象结构,向PHP提供对象结构的API。那么,与 MapServer CGI模块无法灵活修改不同,程序员在服务器端就可以使用PHP通过调用MapScript的API灵活的选择、修改MapFile文件[5]。
同时,结合PHP对众多数据库——非空间数据库,如Oracle, MySQL等的支持,使MapScript在WebGIS中整合空间数据和非空间数据变的容易。
虽然可以通过修改源代码来使MapServer CGI具有需要的特性,但难以实现较为复杂的动态交互,而利用其他服务端脚本语言和MapScript可以更容易实现复杂的WebGIS功能。
5 结束语
MapServer通过支持OGC协会的若干标准,支持分布和互操作。不论是使用MapServer CGI模块或服务端脚本语言结合MapScript,都可以实现服务端与客户浏览器的动态交互。MapServer在网络地图发布方面的强大功能有待进一步探索,对于从事WebGIS开发的组织而言,研究MapServer无疑符合其长远利益。本文对MapServer的原理及应用只做了初步探讨,旨在抛砖引玉。
参考文献:
[1]胡楠,闵星.基于MapServer的网络地图发布技术应用研究[J].天津测绘,2010,5:45-46
[2]宋现锋,刘军志等.开源代码技术的FLASH地图实现方法[J].地球信息科学,2006,12:101-105
[3]熊靜,张箐.基于MapServer 的遥感影像发布系统的研究[J].遥感信息,2007,1:53-56
[4]Jeff Mckenna. MS4W(MapServer For Windows)Installation[EB/OL]. [2012-11-26].http://maptools.org/ms4w/index.phtml?page=README_INSTALL.txt
[5]Jeff McKenna.PostGIS/PostgreSQL[EB/OL]. [2012-11-26].http://mapserver.gis.umn.edu/docs/reference/vector_data/postgis/
[6]杜雄.基于MapServer数据互操作与Web共享模式的研究[EB/OL].[2013-10-16].http://www.cnblogs.com/charmdx/articles/450711.html
【关键词】开源软件;MapServer;WebGIS;体系结构;地图发布
随着WebGIS的应用日益广泛,如何低成本高效率地开发WebGIS已经成为GIS产业发展的迫切需求,基于MapServer的WebGIS解决方案正好迎合了这一点。MapServer是由美国明尼苏达大学和NASA 联合开发的一个具有强大的空间数据网络发布功能的开源WebGIS软件平台。一方面其强大的功能和商业软件相比毫不逊色,另一方面,作为一款开源软件,其具有新技术跟进及时、价格低廉、安全性好、代码透明等特点。目前,国外对MapServer的研究与应用已较为成熟,而国内的研究与应用甚少。通过开源软件技术路线,我们可以发展和掌握较多的自主知识产权, 对GIS产业国产软件的自主创新有着重要意义。
1 MapServer特點
MapServer是面向对象的,基本配置文件MapFile和MapScript模块的API组织都是基于对象的。MapServer基于C语言开发,利用多个开源的外部支持库(GEOS、OGR/GDAL、Proj.4等)实现对多种失量和栅格数据以及投影变换的支持。MapServer没有自己的数据格式,但可通过集合PostGIS和开源数据库PostgreSQL实现对地理空间数据的存储和SQL查询操作。同时,MapServer基于ka-map,MapLab,Cartoweb,Chameleon等一系列客户端JavaScript API来支持对地理空间数据的传输与表达,并且遵守开放地理空间协会(Open Geospatial Consortium,OGC)制定的WMS、WFS、WCS、WMC、SLD、GML和Filter Encoding等一系列规范。总而言之,从技术角度而言,MapServer比其他同类产品采用更便捷的安装方法,支持更多的数据类型,支持更广的系统平台。
2 MapServer体系结构
2.1 MapServer的数据源。从数据存储位置上划分,MapServer数据源有四种:1)本地数据:直接读取存储在本地的地图数据,如shappfile文件等;2)局域网数据:存储在局域网数据服务器上,基于TCP/IP协议通过空间数据引擎或空间数据库访问,如ArcSDE、Oracle Spatial等;3)广域网数据:存储于远程数据服务器上,基于HTTP 协议接收远程发布的遵守OGC互操作规范的地图数据,如Web地图服务WMS (Client / Server)等;4)分布式数据:存储于多台数据服务器上,通过“融合(Fusion)MapServer”机制实现数据集成与共享,类似于ERSI用“版本”来管理工作流的方式(Managing work flow with versions)[1]。从数据存储格式上划分,MapServer数据源主要有矢量地图数据和栅格地图数据,通过使用GDAL/OGR外部支持库来实现对多种矢量及栅格数据访问的支持,详细的支持数据格式列表可见http://www.gdal.org[2]。2.2 MapServer的核心--MapServer CGI程序。MapServer实际运行时在物理上就是一个CGI程序。CGI主要的功能就是在服务器应用程序和客户之间传递信息,其工作流程为:当浏览器通过URL告知Web Server调用MapServer CGI模块时,Web Server就为CGI模块创建一个进程(CGI程序);CGI模块运行并加载URL指定的MapFile文件,读取MapFile文件中的TEMPLATE文件(HTML文件),并将TEMPLATE文件中CGI 变量的替换变量(template substitutions)替换成具体的值(同时根据MapFile中指定的路径读取相关地图数据);处理完TEMPLATE文件后,CGI模块将TEMPLATE文件处理结果以HTML的形式返回给Web Server,Web Server再将HTML文件输出到用户浏览器上。这时TEMPLATE文件(HTML文件)就作为用户的交互界面。2.3 MapServer的地图服务接口类型。MapServe使用许多开源类库来完成数据格式转换、地图投影转换等,而本身专注于地图绘制、地图服务接口环境、兼容OGC互操作规范等方面。MapServer的地图服务接口类型主要有:1)Mapscript模式的地图服务:MapServer的Mapscript支持多种高级脚本程序语言(PHP、Python、C#等)生成交互式的Web地图服务程序;2) CGI模式地图服务:使用"HTTP GET"或者"HTTP POST"两种方式接受参数输入,动态创建地图或者执行查询操作;3) OGC互操作规范服务:支持Web地图服务WMS (Client/Server),Web地图要素服务WFS (Client/Server),Web制图环境WMC, Web图层服务WCS[3].三种接口类型运行时在物理上均是CGI程序,均读取相同的MapFile地图配置文档,MapFile(*.map文件)是MapServer数据的核心,它将各种地图要素组织成具有层次关系的对象系统,定义了MapServer加载的数据中的对象之间的相互关系,数据来源,使用的数据格式,用户交互和对OGC 协议的支持等[4],类似于ArcGIS的mxd地图配置文档。MapFile文档的编辑方式很多,可以用专业地图文档编辑工具也可以直接用文本编辑器。MapServer体系结构图如图1所示。
3 地图网络发布的实现
3.1构建MapServer开发平台。在进行MapServer开发前首先需要搭建好基础开发平台,本文选择了如下开源软件来配置基础开发平台:Web服务器为Apache2.2.4,WebGIS服务器为MapServer4.10.1,数据库服务器为PostgreSQL/PostGIS( Geographic Object for PostgreSQL)(采用局域网数据)。对初涉者来说构建MapServer开发平台较为困难和繁琐,因为需要编译MapServer自身及其所需的大量开源支持类库的源代码。MapServer官方网站发布了已经编译好的版本MS4W(MapServerForWindows),其安装过程较为复杂,可参见参考文献:[4]。MapServer配置好后就可以用其专用的开源工具MapLab来配置MapFile文件了,如图2所示。也可以用文本编辑工具(如写字板)直接编辑*.map格式的文件来配置MapFile文件。3.2开发方式选择。MapServer有两种开发方式:MapServerCGI和MapScript。本文采用了MapScript结合PHP的开发方式。利用MapScript模块就需要其他服务器端解决方案(指脚本语言),如PHP(以CGI模 块安装在WebServer上)。MapScript模块作为PHP的扩展模块,放在PHP安装路径的extensions目录下。MapScript模块保留MapFile文件的层次对象结构,向PHP提供对象结构的API。那么,与 MapServer CGI模块无法灵活修改不同,程序员在服务器端就可以使用PHP通过调用MapScript的API灵活的选择、修改MapFile文件[5]。
同时,结合PHP对众多数据库——非空间数据库,如Oracle, MySQL等的支持,使MapScript在WebGIS中整合空间数据和非空间数据变的容易。
虽然可以通过修改源代码来使MapServer CGI具有需要的特性,但难以实现较为复杂的动态交互,而利用其他服务端脚本语言和MapScript可以更容易实现复杂的WebGIS功能。
5 结束语
MapServer通过支持OGC协会的若干标准,支持分布和互操作。不论是使用MapServer CGI模块或服务端脚本语言结合MapScript,都可以实现服务端与客户浏览器的动态交互。MapServer在网络地图发布方面的强大功能有待进一步探索,对于从事WebGIS开发的组织而言,研究MapServer无疑符合其长远利益。本文对MapServer的原理及应用只做了初步探讨,旨在抛砖引玉。
参考文献:
[1]胡楠,闵星.基于MapServer的网络地图发布技术应用研究[J].天津测绘,2010,5:45-46
[2]宋现锋,刘军志等.开源代码技术的FLASH地图实现方法[J].地球信息科学,2006,12:101-105
[3]熊靜,张箐.基于MapServer 的遥感影像发布系统的研究[J].遥感信息,2007,1:53-56
[4]Jeff Mckenna. MS4W(MapServer For Windows)Installation[EB/OL]. [2012-11-26].http://maptools.org/ms4w/index.phtml?page=README_INSTALL.txt
[5]Jeff McKenna.PostGIS/PostgreSQL[EB/OL]. [2012-11-26].http://mapserver.gis.umn.edu/docs/reference/vector_data/postgis/
[6]杜雄.基于MapServer数据互操作与Web共享模式的研究[EB/OL].[2013-10-16].http://www.cnblogs.com/charmdx/articles/450711.html