一种基于MapServer和OpenLayers的地理空间信息网络发布方案

2018-07-03 04:39逯永光测绘出版社北京100045
测绘通报 2018年6期
关键词:空间信息空间数据图层

逯永光(测绘出版社,北京 100045)

20世纪90年代,随着计算机网络技术的发展及人们对地理空间信息需求的不断增加,进而两者结合产生了WebGIS技术,这使得地理空间信息网络共享成为可能。自WebGIS技术出现以来,在互联网技术的不断推动下,WebGIS技术获得了飞速发展。很多GIS厂商和组织推出了各自的WebGIS产品,主要分为商业软件和开源软件。其中,商业软件主要有ArcGIS Server、SuperMap iServer、MapGIS Server等,开源软件中主要有GeoServer、MapServer等。一般来说,商业软件功能较为齐全,编辑操作页面友好,有完善的售后支持服务,需要付费使用,利用其开发应用系统的成本很高。开源软件主要由各种公益组织负责开发维护,不定时地补充其功能,利用其开发应用系统,难度一般较商业软件高,需要结合其他软件,但是成本相对较低。

目前,在国内,开源软件主要在科研院所和高校中应用较多,不仅是因为其可以免费使用和分发,而且主流的开源软件功能也很齐全,配合其他配套软件,可以满足一定的科研需求。本文主要对一种基于MapServer和OpenLayers的地理空间信息网络发布方案进行了论述,并给出了一些优化建议。

1 主要技术概述

1.1 MapServer

MapServer采用C语言编写,起源于20世纪90年代中期美国明尼苏达大学和NASA的一个合作项目——ForNet,用于在Web上发布地理空间数据和实现交互式地图应用,可支持所有主流的操作系统,包括Windows、Linux等。

MapServer提供了2种工作模式:CGI和MapScript,一般选用CGI模式进行应用系统开发。当客户端发送数据请求时,服务器端CGI程序基于Mapfile文件实时读取和处理地理空间数据,并将处理结果返回到客户端显示。系统整合了GDAL、OGR、Pro4j等开源库,通过Pro4j库进行实时投影变换,支持Oracle Spatial、PostgreSQL、SHP、TIF等多种空间数据格式,在客户端可通过OpenLayers等对返回的地理空间数据进行表达和绘图,并且遵循OGC规范,支持WMS、WFS、WFS-T、WCS、WPS等操作。

Mapfile文件是MapServer应用系统的核心,其对象层次组织结构如图1所示。Map对象是Mapfile文件的根节点,包含其他所有的对象,是应用级的参数,主要负责地图空间范围、坐标单位、字体文件、符号文件、空间数据路径等的设置。二级子节点中,Outputformat对象用来设置地图输出格式,Reference对象用来设置鹰眼图,Legend对象用来设置地图图例,Scalebar对象用来设置地图比例尺,Querymap对象用来定义查询结果的渲染方式。Projection对象用来定义地图坐标系,Symbol对象用来设置地图使用符号。Web对象用来定义一个Web接口运行时的参数,如临时图像存放路径、查询为空或失败时返回值、最小最大缩放比例、Metadata等,其中Metadata在配置OGC服务时需要使用。Layer对象是指地图所包含的图层,图层在地图上显示的顺序为倒序(第一个图层在最下面,最后一个图层在最上面),具体设置图层元数据、比例尺、数据类型、数据路径、投影、对应主题、标签等。一个Mapfile文件最多可以包含100图层,可满足绝大多数应用需要。

图1 Mapfile文件对象组织结构

1.2 Openlayers

Openlayers是目前一个主流的用于WebGIS客户端开发的JavaScript包,用于实现标准格式发布的地图数据访问,其可以支持的地图格式包括ArcGIS地图、Bing地图、Google地图、OpenStreetMap、WorldWind、WMS、WFS、WCS及用户自定义地图等,可以结合MapServer实现轻量级的WebGIS系统。

OpenLayers代码一般嵌在HTML代码中,除了在代码中添加已有控件即可实现的鼠标拖动、要素选取、量测、放大缩小、滚轮缩放、鹰眼图等操作功能外,基于Prototype.js还可实现地图浏览的Ajax效果,或对已有的操作和数据类型进行扩展,为系统开发更多的功能,如自定义查询结果显示方式、添加网络处理服务(WPS)接口等。OpenLayers常见功能控件具体见表1。

1.3 OGC规范

开放地理空间信息联盟(Open Geospatial Consortium,OGC)是一个公益性的国际标准组织,它基于XML规范制定了数据和服务的一系列标准,如WMS、WFS、WCS、GML等,目前已被绝大多数WebGIS软件所支持,成为多源跨平台实现地理空间信息网络共享的重要方式之一。

表1 OpenLayers常见控件及实现功能

WMS(web map service)规范主要包含以下3个操作:GetCapabitities操作可返回服务级元数据;GetMap操作返回一幅地图图像,其坐标系和图像大小等参数通过HTTP请求传入确定,也可以通过服务器端配置文件确定;GetFeatureInfo操作返回在地图上指定位置处的要素信息。

WFS(web feature service)规范支持对地理要素的插入、更新、删除等,对应于桌面版GIS软件中的查询功能,包括空间查询、属性查询,以及基于空间关系和属性域的共同查询。WFS主要操作包括GetCapabilities、DescribeFeatureType、GetFeature等。其中,GetCapabilities操作可返回服务级元数据;DescribeFeatureType操作返回选中要素结构,以便客户端进行查询和其他操作;GetFeature操作可根据查询条件返回一个GML数据文档,该文档可以被客户端代码解析和表达。

WCS(web coverage service)规范主要针对空间影像数据,主要包含以下3个操作:GetCapabilities、GetCoverage和DescribeCoverageType。GetCapabilities操作可返回服务级元数据;GetCoverage操作根据条件返回指定栅格数据;DescribeCoverageType操作可获取某一个栅格数据图层的描述信息。

2 地理空间数据网络发布实现

本文设计的地理空间信息网络发布系统框架如图2所示,系统采用3层体系结构:数据层、业务层、显示层。其中,数据层主要存放系统所需的地理空间数据,可以选用空间数据库或文件系统;业务层包括地图服务器MapServer和网络服务器Apache,Apache负责监听浏览器请求并转发给MapServer CGI程序,由后者对请求进行解析,读取数据层中地理空间数据并处理为指定格式,最后经由Apache反馈给客户端进行绘制;显示层由Web浏览器组成,是用户与WebGIS交互的接口。

图2 发布方案框架

本文中,在服务器端采用文件系统存放待发布的矢量数据(SHP格式)和栅格影像,部署MapServer软件和Apache。客户端主要基于HTML和OpenLayers开发,实现地图浏览和操作功能。

2.1 MapServer和Apache安装

MapServer安装方式分为源代码编译和二进制文件两种,考虑源代码编译的难度较高,本文选择二进制文件安装方式。MapServer在Windows平台下的安装包有MS4W和OSGeo4W两种,其中OSGeo4W是一个软件合集,除了MapServer之外,还包含GRASS、OpenEV、uDig等数十种软件,而MS4W则主要包含MapServer和Apache,可满足本文需求,故选择MS4W软件包进行安装。

MS4W软件包中包含Apache Web服务器、MapServer和MapScript模块,通过官网下载之后,将其解压到硬盘的根目录下,然后运行其根目录下的apache_install.bat,即可完成Apache Web服务器的安装,至此软件安装完成。打开浏览器,在地址栏输入http:∥127.0.0.1/cgi-bin/mapserv.exe,如果返回信息为“No query information to decode.QUERY_STRING is set,but empty.”则表明安装成功,可以进行下一步的地理空间数据网络发布。

2.2 地理空间数据网络发布

地理空间数据网络发布包括WMS、WFS和WCS,WMS和WFS发布使用的数据为SHP格式的世界地图,WCS发布使用的数据为TIF格式的遥感影像。

首先对待发布数据进行规范化处理,包括数据格式转换、投影转换等。将所有矢量数据统一转换为SHP格式数据,空间坐标系为WGS-84。栅格影像使用ERDAS软件进行规范处理,坐标系选择WGS-84。

其次需要配置网络发布所需的字体文件、符号文件及Mapfile文件。字体文件和符号文件不再赘述,主要基于具体应用需求进行制作和配置。Mapfile文件配置是网络服务发布的核心,主要包括Map对象、Web对象、Layer对象、Class对象等。

Web对象主要用于配置网络服务的元数据,包括WMS、WFS、WCS,部分代码如下:

Web

Metadata

"wms_title" "worldmap-wms"

"wms_onlineresource" "http:∥127.0.0.1/cgi-bin/mapserv.exe?"

"wms_srs" "EPSG:4326"

"wms_enable_request" "*"

"wfs_title" "worldmap-wfs"

"wfs_onlineresource" " http:∥127.0.0.1/cgi-bin/mapserv.exe?"

"wfs_srs" "EPSG:4326"

"wfs_abstract" "This text describes the wfs

service"

"wfs_enable_request" "*"

"wcs_onlineresource" " http:∥127.0.0.1/cgi-bin/mapserv.exe?"

"wcs_enable_request" "*"

"wcs_label" "tif wcs"

End

End

Layer对象用于配置服务发布所需图层,包括矢量数据图层和栅格数据图层,部分代码如下:

Layer

Name "worldmap"

Type polygon

Data "../data/world"

Metadata

"wms_title" "layer01"

"wms_srs" "EPSG:4326"

"wfs_title" "layer02"

"wfs_srs" "EPSG:4326"

"gml_featureid" "id"

"wfs_enable_request" "*"

End

Class

Name "world"

Style

Color 255 255 255

Outlinecolor 96 96 96

Backgroundcolor 45 180 135

End

End

End

Layer

name "world_raster"

Type Raster

Data "../data/world.tif"

Metadata

"wcs_label" "name"

"wcs_rangeset_name" "my name"

"wcs_rangeset_label" "my label"

End

Projection

"init=epsg:4326"

End

End

Mapfile文件配置完成后,将其和对应地理空间数据、符号文件、字体文件等置于相应文件夹,并启动MapServer和Apache,即可完成地理空间数据的网络发布。

2.3 WebGIS客户端开发

在客户端通过使用OpenLayers和HTML进行WebGIS客户端开发,加载WMS、WFS和WCS数据服务,实现了地理空间信息的在线浏览和操作功能,部分实现代码如下:

var map=new OpenLayers.Map(“world_demo”);

var wmap=new OpenLayers.Layer.WMS(“wworld”,“http:∥127.0.0.1/cgi-bin/mapserv.exe? “,{layers:”worldmap”});

var wfs_pro=new OpenLayers.Protocol.WFS({version:”1.1.0”,url:”http:∥127.0.0.1/cgi-bin/mapserv.exe?”,featuretype:”worldmap”});

var vmap=new OpenLayers.Layer.Vector(“vworld”,{strategies:[new OpenLayers.Strategy.Fixed()],protocol:wfs_pro});

map.addLayer(wmap);

map.addLayer(vmap);

map.addControl(new OpenLayers.Control.LayerSwitcher());

2.4 系统优化建议

(1) 矢量数据应该尽量选用SHP格式文件。MapServer可以支持多种矢量数据格式,但是以SHP格式文件读取和处理速度较快,并且可以为SHP数据建立空间索引,可进一步提高MapServer的处理效率。

(2) 引入Kamap或Tilecache的瓦片机制。WebGIS系统的底图一般变动较小,与MapServer读取矢量数据,然后进行处理,并将处理结果返回到客户端的模式相比,采用瓦片地图可以省去读取数据和处理数据的步骤,将极大地减少客户端的响应时间。

(3) 优化投影文件。在Mapfile中需要设置地图和图层的投影参数,而MapServer的投影文件由数千种投影组成,如果每次都扫描整个文件查找所设置投影无疑会降低处理速度。因此,需要对投影文件进行优化,删除不需要的投影编码,或将应用较多的投影编码的位置提到文件的前部,即可以减少投影参数的查找时间。

3 结 语

MapServer是一种应用广泛的开源WebGIS软件,并且其功能在不断增强。通过本文对基于MapServer和OpenLayers的地理空间信息网络发布方案进行的论述,笔者认为其可以满足一般的WebGIS开发需求,未来可考虑在服务器端引入其他软件包或在客户端引入其他JavaScript框架,进一步增强应用系统的功能,这也是笔者下一步的研究内容。

参考文献:

[1] OSGeo.MapServer:open source web mapping[EB/OL].[2018-03-06].http:∥www.mapserver.org.

[2] OpenLayers中国社区.OpenLayers JavaScript Mapping Library[EB/OL].[2018-03-06].http:∥www.openlayers.cn/cnapi/files/OpenLayers/Layer-js.html.

[3] 冉祥生.基于MapServer的空间信息发布技术研究[D].成都:西南交通大学,2008.

[4] 高进.基于MapServer的电子海图服务系统研究[D].大连:大连海事大学,2013.

[5] 李信鹏.基于MapServer的遥感影像发布系统的设计与实现[D].北京:中国科学院中国遥感卫星地面站,2007.

[6] 孙岩松.基于矢量瓦片的Web电子海图研究[D].大连:大连海事大学,2017.

[7] 顾颖虹,芮建勋,陈能,等.基于MapServer的WebGIS地图符号化研究与实现[J].上海师范大学学报(自然科学版),2012,41(1):56-61.

[8] 孙伟,马照亭,张成成,等.一种基于MapServer的KML地理信息网络服务实现方法[J].测绘通报,2012(12):53-56.

[9] 郑逢斌,元沐南,王栋.基于开源WebGIS的遥感数据共享方法研究[J].河南大学学报(自然版),2016,46 (4):438-446.

[10] 赵慧芬.基于MapServer和Openlayer的WebGIS开发 [J].测绘与空间地理信息,2013(9):100-101.

[11] 张洁.基于OpenLayers3的自然保护区规划辅助平台的实现 [D].上海:华东师范大学,2017.

[12] 李昕煜.基于JavaScript的WebGIS前端开发及优化[D].长春:吉林大学,2015.

[13] 张楠,张海燕.基于OpenLayers和TileCache的出行示意图设计[J].山东科学,2011,14(3):69-74.

猜你喜欢
空间信息空间数据图层
结合多层特征及空间信息蒸馏的医学影像分割
为《飞舞的空竹龙》加动感
GIS空间数据与地图制图融合技术
解密照片合成利器图层混合模式
基于区间数和复杂网络的空间信息需求响应过程仿真*
基于时效网络的空间信息网络结构脆弱性分析方法研究
基于系统动力学的网络空间信息防御体系能力分析*
用Photoshop图层技术制作精美邮票
网格化存储的几项关键技术分析
随心所欲制作逼真阴影效果