基于开源框架的农业地理信息系统设计与开发
2020-07-10田明璐李琳一叶有灿
袁 涛,田明璐,马 超,李琳一*,王 笑,叶有灿
(1上海市农业科学院农业科技信息研究所,上海 201403;2上海市浦东新区农村改革发展服务中心,上海 201202;3上海市农业农村委员会信息中心,上海 200335)
进入21 世纪,农业信息化对于发展现代农业产业和实现现代化农业管理的重要作用日益彰显,且已成为国际上农业发展的热点之一[1]。农业生产以农业用地为载体,表现为农作物在地理空间上的覆盖与蔓延。地理信息系统(Geographic information system,GIS)是20世纪60年代开始迅速发展起来的集地理空间数据处理与计算机技术于一体的一门交叉技术学科,它是在计算机软、硬件支持下,对空间对象的地理分布以及与之相关的属性实现采集、存储、管理、处理、检索、分析和显示等功能,为用户解决各种应用问题的技术系统[2]。农业生产的空间占有性天然地具有与地理信息系统这种地理空间数据管理技术相结合的内在需求,因此,利用农业地理信息系统对农业生产进行管理就成为一种必然。
我国的农业学者和技术人员在研究和实践过程中开发了很多农业地理信息系统。如王培等[3]开发的昌吉农业基础地理信息系统,提出了基于乡镇一级农业地理信息系统的设计与开发思路,为实现乡镇的无纸化办公和为乡镇基层领导提供相关决策提供了新的解决办法;范幸龙等[4]提出了基于3S技术并应用于现代烟草种植管理的农业地理信息系统设计方案,为烟草行业更好地利用3S技术,加快推进行业数字化、信息化提供了参考;张会波[5]探讨了一种应用于黑龙江垦区的农业地理信息系统架构解决方案,并利用ArcGIS平台进行了实现。此外,将农业地理信息系统应用于耕地质量管理、土壤重金属污染评价和预警、土地资源管理方面等也都比较常见[6-8]。由于不同区域的农业特征和需求不同,这些农业地理信息系统的特点也不尽相同,但也有一些相同的特征:如这些农业地理信息系统的主要用户是政府的农业管理部门;大都基于成熟的商业地理信息平台进行二次开发而成,应用比较广泛的如美国ESRI公司的ArcGIS系列、美国MapInfo公司的MapInfo系列、北京超图软件股份有限公司的SuperMap等[9]。这些商业软件平台功能强大,提供了丰富的二次开发接口,开发简便快捷,但价格昂贵,市场价格一般在30万—50万元人民币,财政能力相对比较薄弱的区县和中等规模的农场无法承受。
为了解决这种需求和价格之间的矛盾,本研究拟基于多个开源框架设计开发农业地理信息系统。其中,空间数据的管理通过PostgreSQL数据库管理系统进行,利用GeoServer地图管理与发布服务框架进行网络地图的发布以及地图数据的编辑与管理,地图前端的显示和渲染通过OpenLayers开源框架实现。
1 开源框架简介
为了最大程度地减轻用户的经济负担,整个农业地理信息系统基于多个开源框架进行开发,不会涉及版权问题,并通过二次开发将多个开源框架进行整合。具体来说,属性数据和空间数据的存储采用PostgreSQL数据库管理系统,地图数据的网络发布与编辑管理采用GeoServer框架,前端采用OpenLayers框架进行地图的可视化显示。
1.1 PostgreSQL数据库管理系统
PostgreSQL是加州大学伯克利分校计算机系开发的对象关系型数据库管理系统,具有强大的跨平台性,是目前支持平台最多的数据库管理系统之一[10]。它支持大部分SQL标准并且提供了许多其他特性,包括复杂查询、外键、触发器、视图、事务完整性等。更重要的是,它支持空间数据管理,可以用来管理电子地图数据,以及各个地图图层和图斑之间的空间关系。
1.2 GeoServer地图管理与发布服务框架
GeoServer是遵循OpenGIS Web服务器规范的J2EE 实现,利用GeoServer可以方便地发布网络地图数据,允许用户对空间数据进行更新、删除、插入等操作,通过GeoServer可以比较容易地在用户之间迅速共享空间地理信息。GeoServer兼容Web地图服务(Web Map Service,WMS)和Web要素服务(Web Feature Service,WFS),支持PostgreSQL、Oracle、VPF、 MySQL、ArcSDE、Shapefile、MapInfo等多种数据库管理系统和多种空间数据格式,并支持上百种地图投影,能够将网络地图输出为jpeg、gif、png、SVG、KML等多种格式,并能够运行在任何基于J2EE/Servlet的容器之上[11]。除此之外,GeoServer还具有包含、相交、距离小于、相同、重叠、穿过等多种空间分析功能。
1.3 OpenLayers前端地图显示框架
OpenLayers是一个用于开发WebGIS客户端的JavaScript包。OpenLayers支持的地图来源包括Google Maps、Yahoo Map、微软Virtual Earth、百度地图、天地图等,用户还可以上传自己制作的地图,与其他的图层在OpenLayers中进行叠加。除此之外,OpenLayers实现访问地理空间数据的方法都符合行业标准,它支持Open GIS协会制定的WMS和WFS网络服务规范,可以通过远程服务的方式,将以开放地理空间信息联盟(Open Geospatial Consortium,OGC)服务形式发布的地图数据加载到基于浏览器的OpenLayers 客户端中进行显示[12]。在操作方面,OpenLayers除了可以在浏览器中帮助开发者实现地图浏览的基本效果,比如放大、缩小、平移等常用操作之外,还可以进行选取面、选取线、要素选择、图层叠加等不同的操作,甚至可以对已有的OpenLayers操作和数据支持类型进行扩展,为其赋予更多的功能。同时,在OpenLayers提供的类库当中,它还使用了类库Prototype.js和Rico中的部分组件,为地图浏览操作客户端增加Ajax 效果。
2 系统总体设计
与开源框架相对应,系统整体架构为3层设计,分别为数据层、服务层和应用层(图1)。其中数据层主要利用PostgreSQL数据库管理系统存储各种类型的空间数据以及空间数据之间的关系,具体包括数据格式转换、统一的空间参考、数据空间关系以及开放的API访问接口等;服务层主要通过GeoServer来实现空间数据管理、空间分析、WMS/WFS/KML服务、Web服务、网络地图发布等多种功能,并分别实现向下与数据层、向上与应用层之间的通信;应用层主要通过OpenLayers框架来实现地图显示、地图操控、查询统计、地图导出等与用户交互相关的功能。
3 关键技术
3.1 页面缓存技术
即使现在网速已经快了很多,但网页显示速度和流畅度仍然是影响用户体验的一个重要因素,尤其是电子地图的放大、缩小以及漫游操作中的用户体验。通常情况下电子地图一般存储在数据库或者是硬盘的文件管理系统中,当用户需要查看某部分地图时,通过系统向服务器发送请求,服务器根据用户的请求将该部分地图读取出来,然后推送给用户。此种方式在地图数据量较大或者有网速瓶颈时极易产生卡顿现象。为了最大程度地优化用户体验,提高地图操作流畅度,本设计采用了页面缓存技术。具体做法为:在地图初始化的时候,不但把用户请求区域范围内的电子地图(图2中区域O)调到系统内存中推送给用户,而且把用户请求区域范围以外一定面积内的地图也从数据库或文件夹调到系统内存中。这样在用户移动或者缩小地图的时候,系统就会把周边需要显示范围内的那部分地图直接从内存中调取出来,推送给用户,而不用再到数据库中读取,这就大大加快了电子地图显示的速度,优化了用户体验。例如当用户鼠标拉动地图向左移动的时候,就会直接显示地图右侧的B区域;相应的,当用户鼠标拉动地图向右移动的时候,就会直接显示地图左侧的D区域;而当用户缩小地图的时候,就会直接将周边的A、B、C、D和E区域全部显示出来。
3.2 WFS与WMS
WFS和WMS是地图显示的两种常用技术,各有优劣,一般结合应用。WFS指的是Web要素服务,电子地图在系统后台以地图要素(Feature)的形式存在,当用户发出请求时,系统按照用户的请求将相应的矢量地图要素推送到网页前端,矢量地图要素在网页前端实时完成地图渲染。这种技术一般在两种情况下应用:一种是地图数据量不大,矢量地图要素在推送到网页前端以后可以在前端实时快速渲染,不会影响用户体验;另一种是用户需要在鼠标滑过地图某一区域范围如标注点、地块等要素时实时显示该要素的属性信息,而无需鼠标点击,这时候就需要应用该技术。WMS指的是Web地图服务,此时电子地图在后台已经完成渲染,当用户向系统发送请求时,系统将渲染好的地图以图片格式推送到网页前端。此种技术一般在需要传输的地图数据量较大时采用,因为大数据量的矢量地图要素直接推送到网页前端进行实时渲染,会占用大量时间,使网页显示时产生卡顿,而WMS技术可以很好地解决这个问题。
3.3 数据与显示分离
传统的shp格式的电子地图,数据和显示通常是一体化的。当用ArcGIS打开一幅电子地图,想要对地图进行专题渲染时,一般是通过一些相关的属性操作,将该地图的样式保存为一个mxd文档。当下次再打开该mxd文档时,此shp格式电子地图的样式可以原样显示,如果换作另外一个mxd文档打开此电子地图,则样式丢失。为了解决这个问题,利用QGIS来设置地图样式,该地图样式设置完成后会生成一个.sld格式的皮肤文件,保存该.sld皮肤文件,当下次打开此shp格式电子地图时,无论加载此地图的文档是否改变,只要加载相应的.sld皮肤文件,则该地图的样式就可以保留。
3.4 功能模块封装技术
构建服务主要利用Web服务(WebService)来完成。Web服务顾名思义就是一个运行在Web上的服务,它通过网络为应用程序提供服务方法,类似一个远程的服务提供者,主要是基于可扩展标记语言(eXtensible Markup Language,XML)并利用简单对象访问协议(Simple Object Access Protocol,SOAP)实现跨平台信息传递的一种技术。在整合开源框架的过程中,共实现了2种粒度的封装,第一种是接口级封装,粒度较小,将各个功能以函数组的形式封装成接口,系统需要二次开发的时候直接根据接口说明调用接口即可,无需关心底层的实现方式,将多个接口组合起来即可轻松实现自己所需的功能;第二种是模块级封装,粒度较大,例如将放大、缩小、漫游、识别、全图等地图常规操作功能封装到一起,封装成一个工具条,在系统需要二次开发时,开发人员可直接将整个工具条拉过来调用,即可实现地图的常规操作功能,无需关心这些功能的实现方法。
4 系统应用
基于上述3个开源框架和系统架构,开发的农业地理信息系统主要具有以下几个方面的功能:①系统以“天地图”基础地理数据和遥感影像为基础底图,能够实现电子地图和遥感影像之间的自由切换;②系统具有放大、缩小、漫游、识别、全图等地图基本操作功能;③系统能够实现测量功能,包括测量图斑面积大小和线段长度,在面积较小和距离较短时计量单位分别为平方米和米,在面积较大和距离较长时计量单位自动变为平方千米和千米;④能够以多种方式进行查询,包括模糊查询、鼠标点击地图查询、鼠标拉框查询以及通过地图查询数据库和通过数据库查询地图等;⑤能够实现矢量格式和栅格格式电子地图的上传和存储。针对矢量格式的电子地图,可以方便地生成专题地图,根据用户选择进行属性数据统计,并可将统计结果导出到用户电脑上。
本系统被应用在拥有3 300余hm2的长江农场。在长江农场的应用主要分为3个方面:①种植结构调查。长江农场整体上对于下属各个分部有总体要求,每个分部需要种植某个品种多大面积。在前期调查的基础上,制作成专题地图呈现于农场负责人面前,负责人可以直观查看各品种水稻分布位置和面积大小。②水稻长势监测。通过无人机监测的影像,对长江农场跃进分部的600余hm2水稻长势进行分析,将水稻长势分析结果按照优、中、差3个等级进行分类,并将分类结果以专题地图的形式显示在系统中。农场负责人根据水稻长势进行决策,确定水稻下一阶段水肥管理措施(图3)。③灾害监测。在台风过后,对长江农场部分区域的水稻利用无人机获取影像数据,并对影像进行提取,得到水稻倒伏范围与面积数据。农场负责人根据水稻倒伏情况,做出相应管理决策。
5 结论
通过对多个开源框架的整合,所开发的农业地理信息系统架构灵活、轻便快捷,可以实现商业地理信息平台的绝大部分功能,能够满足农业信息化建设中对农业资源管理、农业规划、农业专题地图制作的需要。通过将开源框架封装成一个个Web服务的形式,极大减少了系统开发人员的重复工作,提高了系统开发的效率,降低了系统开发的难度,能够根据用户的个性化需求快速地搭建出用户所需的系统。同时,整个系统无需利用商业软件,绕开了软件版权费用问题,系统开发和对外服务成本大幅降低,解决了区县级管理部门和中型农场信息化管理中预算不足的难题。