何 鑫
(山西省交通科学研究院,山西 太原 030006)
随着国民经济的飞速发展及人民生活水平的不断提高,人们对于空间地理的需求也在不断增加,地理信息系统(GIS)在卫星定位、车载导航、城市总体规划、地下管道维护、交通疏导等领域有着广泛的前景与应用价值[1]。然而随着近年来计算机技术的发展以及所需处理地理空间数据量的空前增长,GIS在结构组成和技术应用等方面已经与传统的GIS技术有了很大的区别。现阶段的GIS,是利用网络互联出版发布空间数据,为用户提供空间数据的检索分析等功能。基于以上环境特点,与互联网相结合的地理信息系统(WebGIS)应运而生了[2]。
WebGIS是将地理信息系统通过网络技术来扩展和完善的一种技术。它是基于网络的Browser/Server,即浏览器/服务器模式[3],将客户端和服务器之间通过互联网进行信息交换。该技术解决了海量空间数据和属性数据库统一管理以及分布式数据与异构平台兼容等问题,同时还提供图形化界面,方便用户进行信息检索和查询、统计分析等。WebGIS主要用于地理信息数据发布、查询以及建模服务等。
GeoServer是一个开源项目,它是依托OpenGIS服务器规范,利用JavaEE语言实现的,能够运行在任何基于JavaEE/Servlet的容器之上。数据源的支持主要有MySQL、PostgreSQL、Oracle等,能够对应输出多种格式的网络地图资源,例如png、gif、jpeg等。当嵌入MapBuilder时,可以支持 AJAX的地图客户端OpenLayers[4-5]。
GeoServer提供了全面遵循OGC(Open GIS Consortium,开放地理空间信息联盟)开放标准的网络地图服务和网络要素服务规范,并支持WFS-T(Web Feature Service-Transactional)[3,6]。其中网络地图服务能将地理位置信息数据转换成地图图层影响,并根据上述数据绘制地图;网络要素服务能对数据进行增删改查操作,并能将数据转换成要素级的地理标记语言编码[2,6]。利用GeoServer可以方便地发布地图数据以及在用户之间迅速共享空间地理信息[3]。
OpenLayers是一个专为WebGIS客户端开发提供的JavaScript类库,用于实现符合行业标准格式的地图数据访问方法。OpenLayers采用OpenGIS的WMS和WFS规范,从而保证了开发人员可以自由添加功能,为地理空间数据的信息化处理提供了极大的便利[2,4]。
OpenLayers使用来自Prototype.js和Rico中的一些组件,并采用面向对象的设计方式开发[2]。其中Prototype.js的部分组件已经被整合到OpenLayers当中,并不断在此基础上完善面向对象的开发,Rico则实现了圆角化DIV。OpenLayers在利用的地图数据资源方面可以提供给用户较多的选择。开发者可以通过OpenLayers实现在浏览器中对地图数据的平移、放大、缩小、选取面、选取线、要素选择、图层叠加等操作。这是由于浏览器中的DOM(文档对象模型)由JavaScript实现,与OpenLayers相同,这使得OpenLayers与页面的其他组件可以良好地契合,不存在浏览器的依赖性[2,7]。
WebGIS服务系统开发主要涉及地图服务器技术、空间数据库技术、客户端显示技术,这里我们采用基于B/S的四层结构来进行系统的开发。GeoServer服务器为地图服务层、MySql为数据层、Django+Python为Web服务层、OpenLayers为视图层。Web服务层响应客户端请求,根据请求类型调用GeoServer服务器所提供的地图图层,与此同时Web服务层通过OpenLayers优化从MySql数据库中调用的地理信息数据并渲染地图,最终客户端利用浏览器实现对空间数据的显示和用户的交互。系统体系结构如图1所示。
图1 系统体系结构
根据系统开发的目标,最终确定系统的功能模块,主要涉及对地图、图层的放大、缩小、平移、浏览等基本操作,以及对截取的部分卫星地图进行相关的算法处理,例如:像素查询、影响线性增强、影像锐化、影响模糊、边缘检测、剖面分析、主成分分析、植被指数计算、正射矫正、匀光匀色处理、影像镶嵌、Pansharp融合等。系统功能模块如图2所示。
图2 系统功能模块
当用户需要访问地图数据时,JavaScript通过浏览器向Web应用服务器发送XMLHttpRequest对象调用请求,Web应用服务器根据对应请求将参数传递给地图服务器,地图服务器根据系统客户端发送的网络地图服务请求生成对应的地图信息并返回给客户端,客户端通过Ajax回调函数接收返回结果,并将接收到的地图数据进行解析,拆分出其中的空间特征信息和属性信息,以网络地图服务及属性窗口的形式显示在页面上,用户则可根据浏览器查看返回的地图信息。整个系统的工作流图如图3所示。
图3 系统工作流图
本系统采用浏览器/服务器模式(B/S),使用Python语言和Django开发框架及MySQL数据库进行开发,该系统具有多层结构、分布式和面向对象的组件体系结构等特点。系统基于MVC(Model、View、Controller,即模型、视图、控制器)的3层结构开发,使得客户端(浏览器端)、应用服务器端与基础数据服务器端更加独立清晰,同时使系统的升级和功能的扩充变得容易,系统开发模式如图4所示。
图4 系统开发模式
3.1.1 地图加载
地图浏览是系统最基本的GIS功能。以WebGIS的方式实现这一功能需要提供地图服务。这一步的完成需要GeoServer的配合。在GeoServer中,创建工作空间、MySQL数据源,在已经连接数据库的基础上,即可发布数据库中指定数据的空间信息。
在发布地图信息的时候,可以对待发布的图层进行样式渲染,这样能够使发布的地图更加美观鲜明。与此同时,本系统在地图发布过程中,引入了OpenStreetmap这一开源的地图服务,可以更加自由直观地编辑和查阅相关地图信息。
要实现对GeoServer发布的地图服务的解析和显示,需要借助于OpenLayers,它能够提供常用的解析函数和地图控件。为了使建立的开发工程能够对其进行引用,需要把OpenLayers的文件包整体放入到工程的发布文件目录下。在建立好工程后即可对其进行相关开发。
3.1.2 常用GIS功能
通过对OpenLayers API和OpenStreetmap的调用,可以实现地图的拖拽、放大、缩小、距离测量、面积测量、地物查询、区域卫星显示等常用GIS功能,也为后续算法功能模块的实现提供必要的地图图层信息。
3.2.1 影像锐化
在拍摄卫星地图影像时,会由于各种原因导致拍摄的影像效果不理想,平滑的影像会导致轮廓边界的模糊,影像锐化技术可以使模糊的边缘清晰化,以减少这类拍摄产生的不良效果。影像锐化处理是为了强化影像边缘,使模糊的影像变得更加清晰,颜色变得鲜明突出,影像的质量有所改善,产生更适合人眼观察和识别的影像,其根本原因是因为影像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算)使影像变的清晰。通过锐化处理后,目标影像的边缘变得鲜明,也为边缘提取、图像分割、区域识别、区域形状提取等分析操作奠定基础[8-9]。
截取部分卫星图层信息,选择影像锐化选项即可对其进行锐化处理,将所选图层作为参数传递后台函数进行处理,生成锐化后的地图影像,并将锐化结果显示在浏览器的相应区域。
如图5所示,左侧影像为待处理的卫星地图影像样例,右侧为锐化后的影像,可以看出锐化效果明显。
图5 影像锐化演示
3.2.2 植被指数计算
通过不同卫星波段的探测数据组合来反映植被生长情况的指数即为植被指数。植被在近红外波段及可见光波段反射与土壤背景之间存在着明显的差异性,根据植被监测的物理基础我们得知,植物叶面在近红外波段有很强的反射特性,而在可见光波段有很强的吸收特性。比值植被指数又称为绿度,为二通道反射率之比,该指数能较好地反映植物的生长差异情况及覆盖程度,并且与植物量的增长呈正相关,在高密度、生长旺盛的植被环境监测中特别适用[10]。
图6 植被指数计算样例
图7 植被指数计算参数及输出目录设定
截取部分卫星图层信息,这里我们选择图6作为计算样例,对其进行植被指数计算。选择红波段和近波段的参数值,如图7所示,其中红波段参数为3,近波段参数为2,并选择输出目录作为结果输出路径。点击确定开始计算植被指数信息。以图层信息作为参数存储在XmlHttpRequest对象里,调用XmlHttpRequest对象的方法向服务器的URL发送异步请求,参数传递后台函数进行处理,并将处理结果存储到数据库结果集表中以备后续查询,将HttpResponse对象返回给客户端,客户端解析响应对象的ResponseXML包含的数据信息,并将结果以图片的形式呈现在浏览器相应区域。后台计算作业完成状态如图8所示。
图8 后台进度及计算结果显示
当计算完成时,即可在之前选取的输出路径查看计算结果输出图片,图9即为结果输出,可以看出计算结果很好地反应样例的植被覆盖情况。
图9 植被指数计算结果输出
3.2.3 集群管理
当我们需要处理很大数据量的数据时,单个虚拟计算节点已经无法满足计算负载需求,此时我们可以引入集群的概念,重新虚拟化一个或多个新的计算节点,所谓集群是指为用户提供一组网络资源及服务的一个整体,包含多个计算机节点的一组计算机系统。而对于地理信息服务系统,在数据处理时也同样实现了集群化管理的功能。对于单个的虚拟计算节点,可以查看其在近两个小时的CPU使用率,内存使用率及负载情况,如图10所示。用于分析计算节点的计算能力及负载情况,评估是否需要增设节点以满足当前的计算需要。
图10 计算节点使用情况评估
如果当前节点超出设定阈值,已无法满足当前的计算量时,这就需要添加新的虚拟节点,可以为新的虚拟节点分配系统类型,硬盘及内存大小等相关参数以满足计算需要。当虚拟节点资源过剩时,可以关闭部分虚拟节点以达到降低资源消耗的节能效果。
本系统的数据信息具有空间查询和地图分析的功能及数据统计及查询分析的能力,因此可用于公路选线及改建工程中。系统通过DBMS数据库与WebGIS相结合,生成公路选线框架,剥离公路数据与模型,通过数据采集公路信息对数据进行统一处理及分类,并通过空间模型数据分析、选线分析、里程分析、最优路径分析等实现数据的最优化,将公路改建方案与实际路况直观对比输出分析,为道路的选线与改建提出良好的建议。
本系统可实现对已知公路数据进行编码存档,建立数据库分析路网组成,并通过空间地理信息分析,规划空间元素,为公路的规划设计提供科学合理的解决方案。可减少由于经验的不足及资料的局限造成的资源及资金浪费,并将公路设计中的施工与避让两个要素与地形地貌分析相结合,通过建筑及植被分析,计算避让权重,有效减少施工量及施工难度,将不同标段分级分属性不同颜色标识,为最终道路设计图的形成提供直观、合理、最优的建议。通过数据库定期更新,为公路规划设计的后续进行提供实时的参考资料和数据分析,为公路的数据化建设提供良好的发展基础。
WebGIS作为一种新兴的地理信息系统开发手段,正逐步运用于各行各业的信息管理系统中,空间信息作为世界万物的基本属性,逐步引起了人们重视,随着网络的普及以及人们生活水平的提高,WebGIS技术将成为我们生活及工作领域中最重要的技术实现。
本文针对地图操作和影像处理的需求,设计并开发了开源的GIS地理信息服务系统。其中开源数据库MySQL用来存储数据,开源地图服务器GeoServer用来提供地图服务,开源JavaScript类库OpenLayers用来表现地图,并在此基础上使用Python语言和Django开发框架构建平台显示。
本系统具有常用的GIS功能,基本实现了系统的设计目标。用户亦可通过更多的地理信息数据资源结合自己的需求及Web服务实现功能更加强大的WebGIS系统平台。