刘天悦 吴保国
(北京林业大学,北京,100083)
山东省东营市“三网”绿化工程是由东营市委、市政府决定,利用5 a或更长时间,针对东营市特殊的营林立地条件,围绕构建全市林业生态防护体系和林业产业体系建设目标,以路域林网、水系林网和农田林网等“三网”绿化为骨架的一项重大基础战略工程[1]。东营市现有的“三网”绿化工程管理系统是基于Visual FoxPro的工程数据管理系统,该系统只是单纯的对属性数据的操作,缺少空间位置的概念,无法向公众提供“三网”工程绿化的进展情况。因此,为了保证该绿化工程的顺利实施和监督,需要采用WebGIS等信息技术建立一个面向公众的“三网”绿化工程信息服务系统,为工程实施信息管理及公众提供服务。
目前大多数商业GIS软件商基本上都支持WebGIS开发,例如ESRI的ArcGISServer。但商业WebGIS软件价格太高,系统开发与运行维护费用居高不下,导致很多单位无力承担。由于开源WebGIS是开放的,可以免费获取,采用开源WebGIS进行信息服务系统开发与运行维护费用低,因此开源WebGIS逐渐在我国各行业得到广泛应用。但是在林业行业中,开源GIS的应用研究并不多,主要有李世明等人利用开源软件开发了基于WebGIS的县级林业空间信息共享系统,用于公众通过Web浏览器访问林业空间信息[2]。
本研究以山东省东营市“三网”绿化工程建设为研究对象,调研梳理相关管理业务流程,从需求入手,深入研究“三网”绿化工程的数据信息处理要求、功能要求,结合工程管理的内容,进行系统关键技术的应用分析与研究。最终在开源WebGIS技术的基础上实现一个“三网”绿化工程信息服务系统的研建,使工程信息能够及时得到更新发布等,为“三网”绿化工程造林工作者提供便捷的管理支持,也为广大林农提供直观的展示。
2.1.1 系统总体架构
“三网”绿化工程信息服务系统采用的是浏览器/服务器(Browser/Server,B/S)架构模式。该架构模式的优势是可服务更多的用户[3]。由于该系统完全采用开源GIS技术实现,因此,系统之间的数据接口及功能接口均采用开放地理信息系统协会(OpenGISConsortium,OGC)的GIS互操作标准规范,保证系统开放性、扩展性和可伸缩性。系统的框架结构采用目前较常用的3层架构模式,分为表达层、业务层和数据层,如图1所示。其中表达层指客户端浏览器;业务层包括部署系统网站的Web服务器和发布地图服务的地图服务器两部分组成;数据层指系统使用的开源数据库,包括空间数据和工程属性数据两部分组成,空间数据包括基础地图数据(如县中心、乡镇中心、乡镇边界等)和重大工程小班数据等,工程属性数据主要是指与工程造林相关的的一些数据表(如造林模式表、造林树种表等)。
2.1.2 系统功能设计
根据系统的总体目标和用户需求,“三网”绿化工程信息服务系统主要包括空间信息展示子系统和工程信息查询统计子系统两部分组成,空间信息展示子系统包括地图浏览、漫游、谷歌影像叠加等功能;工程信息查询统计子系统包括属性查图和图查属性两部分,主要包括造林小班查询、工程进度查询、重大工程查询、造林模式查询和造林树种查询等,系统功能详细设计如图2所示。
图1 系统框架结构
2.2.1 开源WebGIS组件选择
构建一个利用开源WebGIS实现的“三网”绿化工程信息服务系统,开源WebGIS组件的选择是否适当对系统本身性能的优劣会产生重要影响。开源WebGIS组件的选择主要包括地图服务器、开源WebGIS开发客户端和开源空间数据库的选择。
2.2.1.1 地图服务器选择
目前最流行的两种开源地图服务器是MapServer和GeoServer。
GeoServer是按地理信息系统协会OGC(OpenGIS Consortium)规范采用J2EE实现的地理信息系统服务器,地图一般通过xml文件发布。GeoServer的特点是支持在线编辑,允许用户对数据进行更新、删除、插入操作。
MapServer是美国明尼苏达大学利用C语言开发的一个开放源码的地理信息系统服务器,地图通过Map文件发布。MapServer的特点是能够快速生成地图服务,对发布的网络地图服务WMS(Web Map Service)服务支持较好,利用GEOS、OGR/GDAL对多种矢量和栅格数据的支持,通过Proj.4共享库实时地进行投影变换,避免了不同数据格式转换所造成的地图投影转换等。由于“三网”绿化工程信息服务系统是一个面向公众的服务系统,该系统主要功能提供了工程信息查询等功能,不需要提供用户在线编辑,因此,“三网”绿化工程信息服务系统选择MapServer作为系统使用的地图服务器。
图2 系统功能设计
2.2.1.2 WebGIS 开发客户端
WebGIS开发客户端目前流行的主要有OpenLayers和Google Map API等。
Google Maps API是谷歌公司自己推出一个免费的编程API(需要申请一个API授权码),开发人员可以使用它来定制WebGIS客户端地图显示。
MetaCarta公司研制开发的OpenLayers技术就是一些用于WebGIS客户端的JavaScript包构成的。由于OpenLayers实现访问地理空间数据的方法符合行业标准及WMS和WFS规范;实现了类似与Ajax那样无需刷新即可更新页面;并且OpenLayers提供图层类、工具类等能够比较容易地实现地图发布和地图浏览等基本功能,操作方便。在此基础上,进一步实现属性信息显示、绘制图层等功能,为用户提供了便捷的查询功能。相比Google Earth API开发,使用OpenLayers作为客户端框架开发更加简单且地图服务加载更快。因此,“三网”绿化工程信息服务系统的客户端选择基于JavaScript动态脚本语言的OpenLayers作为WebGIS客户端开发组件。
2.2.1.3 开源数据库选择
目前比较流行的开源数据库管理系统主要有PostgreSQL和MySQL两种。由于地图服务器选择了 MapServer,并且MapServer集成并采用PostGIS和开源数据库PostgreSQL对地理空间数据进行存储和Filter查询操作,因此,为了减轻开发工作,“三网”绿化工程信息服务系统的空间数据库选择PostgreSQL。
2.2.2 开源WebGIS组件工作流程
2.2.2.1 空间数据导入 PostgreSQL
PostGIS是PostgreSQL数据库的基础上增加了存储管理空间数据的能力。空间数据是利用PostGIS模块导入到PostgreSQL数据库中的,主要有两种方法。若导入Shapfile文件,一种方法是使用界面工具Shape File to PostGIS Importer导入;另一种是输入命令的方式,即使用Postgres_home/bin文件夹中的shp2pgsql命令,它会首先创建一个CEEAT TABLE语句和相应的AddGeometryColumn方法,遍历dbf文件中的每一条记录,然后创建成为一个 SQL INSERT语句,命令为shp2pgsql-s 4326 小班.shp xiaoban>xiaoban.sql(其中4326 为投影类型),最后执行该sql语句,在命令提示符下键入:psqld postgis-f xiaoban.sql postgres(其中 postgis是数据库名,postgres是该数据库的用户名),执行完成后,空间数据就导入到 PostGIS 数据库中[4]。
2.2.2.2 MapServer发布地图服务
网络地图服务采用OGC国际GIS组织的网络地图服务(Web Map Service,WMS)接口,它支持地图图层定制与特殊符号定制,也支持分布式的栅格地图发布服务。
MapServer服务器中关键的结构配置文件是Map文件,定义了地图范围、数据源、地图图层、投影方式以及符号标记等内容,MapFile文件将各种地图要素组织成具有层次关系的对象系统。数据来源、使用的数据格式、用户交互以及对OGC协议的支持也在MapFile中定义。MapServer地图发布服务的具体工作流程如下[5]:
①Map Server接收到Web Server传送的参数时,先由参数中所指定的路径读取Mapfile文件(.Map文件)。
②根据Mapfile中指定的data路径读取相关数据,由于使用PostGIS作为数据源,因此,数据从PostGIS数据库中取得。
③Map Server接收相关信息,先进行文字属性信息的转图工作,这项工作是让FreeType Font Engine配合GD Graphics Library将文字信息转成图像,再将空间信息由GD Graphics Library转成图像格式,最后Map Server将文字图形叠加到几何图形中去;图形制作完成后,保存至客户端参数中指定的目录。
④Map Server根据Mapfile中定义的信息,读取指定的模板,进行html及画面显示的配置与相关资料、图形(如比例尺寸、样本图、参考文字)的制作及嵌入工作,将动态生成的空间信息图嵌入模板,可生成能够供客户端使用的页面文件。
2.2.2.3 OpenLayer实现地图浏览等功能
系统采用 OpenLayers的 JavaScript、Prototype框架以及Rico库的一些组件,以MapServer中发布的地图服务为操作对象实现地图浏览、查询等功能。
地图浏览时,当Web Server接收到用户对WebGIS系统的请求后,以CGI命令将相关的空间参数传送给Map Server,Map Server根据接收的各项参数,读取Mapfile文件(.Map)中关联的PostGIS中的地图空间数据和属性数据,包括各个工程小班图层等,然后生成供客户端使用的html文件;最后将结果处理后发送回Web Server,Web Server根据Map Server的格式做成结果以http协议传回给Openlayers客户端,将地图显示在Web页面上,系统开源WebGIS组件的整体工作流程如下图3所示,开源数据库PostgreSQL中存放空间数据和工程数据;MapFile配置文件通过文件中的数据访问路径连接到PostgreSQL中,并且使用WMS和WFS空间数据服务对数据库中空间数据进行各种操作;最终通过OpenLayers技术将空间数据以及操作结果以Html等页面以及一些图片(png等)的形式在客户端浏览器中展示。
图3 开源WebGIS组件工作流程
系统数据库设计主要包括小班空间数据表设计和树种、造林模式等一些表的设计。
小班空间数据表的前两个字段为FID和Shape,FID存放小班在地图中的要素编号,Shape存放小班的几何特性,其它字段为常规的小班调查因子字段,共85个属性因子字段,例如地类、调查类别、工程进度、小班面积、造林时间等,如表1所示。
表1 小班空间数据
造林模式表、造林树种表等是根据工程信息服务的需求进行设计的。通过查看造林模式,公众用户可以清楚地了解到每一造林地区的培养目标、造林树种和立地条件等情况,并对整个绿化工程造林情况有了整体的认识;通过查看造林树种信息,公众用户了解到具体每一块小班种的是什么树以及该树种都有哪些特性等,表2是造林模式表实例,表3为造林树种表实例。
表2 造林模式表实例
表3 造林树种表实例
3.2.1 空间信息展示
地图界面设计是由Openlayers和MapFile文件的配置两部分实现的。其中,地图的基本操作功能由Openlayers实现,绘制地图的颜色、符号、线条宽度、注记及显示位置等在Map-File文件中进行定义。
地理底图具有地图的基本操作,并实现地图多尺度表达,放大到不同的级数,显示的信息量不同。空间信息展示包括地图缩放、漫游、比例尺以及叠加Google Map影像等。
3.2.1.1 地图显示实现
空间数据的组织是MapServer中的Mapfile文件定义,它定义了地图范围,告诉MapServer程序到哪里导入或者导出数据,还定义了地图的图层,包括数据源、投影以及符号等,以.map为扩展名;然后由Openlayers提供的 Layers的扩展OpenLayers.Layer.WMS连接 WMS服务器以获得图像,显示在浏览器上,地图图层添加实现的代码如下:
3.2.1.2 地图漫游、缩放等基本功能实现
地图漫游、缩放等基本功能是使用Openlayers提供的Control类为地图浏览添加的工具和按钮,比如说PanZoomBar方法控制着地图左侧不同尺度工具是否显示,主要代码如下所示:
地图多尺度表达通过控制每个图层最大和最小放大倍数来实现,即通过修改Mapfile中MaxScale的值设定地图的放大和缩小倍数。
3.2.1.3 叠加 Google Map 影像
空间信息展示功能可以添加Google Map中的免费遥感影像。通过SetCenter方法可固定到东营市的影像所在位置,主要代码如下所示:
3.2.2 工程信息查询
该功能主要包括空间数据和属性数据间的双向查询,包括属性查图和图查属性两种方式。
3.2.2.1 属性查图
系统的属性查图采用两种方式,一种是目录树查图,即采用系统主界面左边的目录树进行地图定位查询;另一种是条件查图,即通过选择输入一定的查询条件对小班等空间数据进行查询,系统会根据您的输入进行检索,若检索到满足条件的小班,该系统会将该小班在地图上定位并高亮度显示。
目录树查图即根据重点工程项目的名称(如东滨路、褚官河)或者行政区划(如东营区、利津县)进行查询,整个查询过程是按照目录树的形式进行的,实现原理是利用网页传递过来的坐标参数在客户端建立一个新的图层,在此图层上绘制点(线、面),叠加到地理底图中,达到空间定位的效果。如鼠标单击行政区划中的利津县,则定位到利津县所在中心点,并在地图上高亮显示,在程序查询利津县节点并写入的同时,将超链接的网页和传递的坐标链接到页面中,利用JavaScript写的Request函数可以获取得到X、Y坐标值,然后利用Openlayers提供的类绘制出该点:
条件查图是通过WFS(Web Feature Service)服务中的Filter Encoding来进行查询,Filter编码主要包括 Property-IsEqualTo(等于)、PropertyIsNotEqualTo(不等于)、Property-IsLessThan(小于)、PropertyIsBetween(范围查询)和PropertyIs-Like(模糊查询)等[6]。用户在查询页面中输入查询条件后,系统会根据查询条件选择不同的Filter编码方式,比如说用户输入要查询条件如“小班号=**”即查看小班号为**的小班,系统的Filter编码就会选择PropertyIsEqualTo方式进行查询。
3.2.2.2 图查属性
图查属性是通过地图查询工程小班属性信息,包括点选、框选、任意多边形选、圆选等方式,以点选为例,点击地图后得到点的位置坐标,然后通过该点坐标查询到该要素,从而得到小班的属性信息。主要代码如下所示:
服务器端使用Ms4w(MapServer for Windows)软件进行地图服务器和Web服务器的配置,该软件包是一种Windows环境下的压缩安装包,里面包含了Apache和MapServer运行所必需的库。配置成功之后启动Apache,然后将该系统网站部署到Apache下的htdocs目录下即可运行。
该系统以山东省东营市利津县的工程数据为例,用户在浏览器中输入该系统网站地址后可进入“三网”绿化工程信息服务系统主界面(红色高亮部分是东滨路小班),如图4所示。
图4 系统主界面
图5是东滨路小班的工程进度查询结果展示页面,包括工程各阶段小班数量、小班面积以及小班的基本信息表。
图5 工程进度查询结果页面
基于开源WebGIS技术开发的东营市“三网”绿化工程信息服务系统,实现了“三网”绿化工程空间数据与工程信息的统一管理,使工程信息能够及时得到更新发布等,为“三网”绿化工程造林工作者提供信息和决策分析提供支持。系统通过数字地图以及叠加的Google Earth影像地图等方式为公众提供信息服务,大大提高了“三网”绿化工程对公众的透明度,方便公众进行监督。目前该系统原型已经交付东营市利津县使用,运行基本稳定,可满足“三网”绿化工程在信息服务方面的需求。
[1]邵云凯.以河口区为例,谈如何搞好“三网”绿化改善生态环境[J].林业资源管理,1995(2):18-21.
[2]李世明,李增元,陆元昌.利用开源软件开发基于WebGIS的县级林业空间信息共享系统[J].林业科学,2006,42(7):141-144.
[3]吴保国,林政.基于COM的B/S模式系统对林业信息化建设的启示[J].林业资源管理,2001(2):51-55.
[4]李源泰,李红波,赵俊三.开源GIS在WebGIS中的应用初探[J].地理空间信息,2010,8(2):100-102.
[5]熊静,张箐.基于MapServer的遥感影像发布系统的研究[J].遥感信息,2007(1):53-57.
[6]MapServer Documentation OGC Support and Configuration.[2010-10-07].http://mapserver.org/ogc/filter_encoding.html.