第一作者:费建瑶(1991-),女,甘肃临夏人,在读硕士生,研究方向为草地遥感与地理信息系统。E-mail:[email protected]
本研究欲通过改进数据存取方式、增加矩阵运算以提高雪灾监测与预警系统对数据的更新效率和对矩阵的处理能力。使用Tomcat Web服务、GeoServer地图服务、PostgreSQL数据库、OpenLayers地图数据访问框架、J2EE技术架构、雪灾风险评估Logistic线性回归模型、雪灾家畜死亡率估测BP-ANN模型以及MATLAB矩阵运算功能设计开发青海省牧区雪灾监测与预警系统,以实现雪灾监测与预警数据、区域属性信息的web页面展示及查询,雪灾风险概率运算,雪灾家畜死亡率运算以及数据导入等功能,解决以往雪灾风险监测系统对数据资料更新不及时的问题,提高风险监测与预警系统的矩阵运算能力,同时减少重复的数据操作,方便用户对青海省牧区雪灾监测及预警数据的管理。
In this study, we aimed to improve the speed of data updating and matrix calculating capacity in a monitoring and early warning system for snow disaster by improving the means of data access and increasing application of the matrix operation. In this study, we designed a monitoring and early warning system for snow disaster in Qinghai Province using Tomcat as a Web server, GeoServer as a map server, PostgreSQL as a database, OpenLayers as map access, J2EE as a standard software, logistic linear regression for snow disaster assessment, BP-ANN as a model for livestock mortality estimation, and MATLAB for matrix calculation. We also designed a Web-page display and query for regional attribute and snow disaster information, risk probability of snow disaster, livestock mortality due to snow disaster, data import, and other functions. This system was optimized to solve the problem that a snow disaster monitoring system could not update data in sufficient time, to add the function of matrix calculus, and to reduce duplication of data operations, which are convenient for the user to manager the data of monitoring and early warning of snow disaster in pastoral areas of Qinghai Province.
青藏高原地区是我国主要牧区之一, 同时也是我国三大积雪分布区之一。青海省牧区位于青藏高原东北部, 属高寒牧区, 冬春季易受到雪灾的影响[1]。由于该牧区是天然牧区, 生产方式较落后, 基础设施薄弱, 冬春季受降雪量的影响较大, 故对自然灾害的抵抗能力相对较差[2], 尤其是将畜牧业作为主要经济来源, 其经济状况和生命财产安全易受到雪灾的威胁[3]。根据1949-2002年气象及雪灾资料显示, 该牧区遭受的雪灾冻害发生频繁, 造成的直接经济损失严重[4]。所以, 青海省牧区的雪灾监测和预防工作显得很重要。而地理信息系统(Geographic Information System, GIS)的应用使针对雪灾相关数据资料的统计分析变得较为容易。从20世纪60年代至今, GIS的应用越来越广泛, 相关产品也越来越多[5]。地理信息系统在采集、处理、存储、管理、分析、输出地理空间数据及属性信息中发挥了很大作用, 方便了大家对地理空间数据及业务的处理[5]。网络地理信息系统(WebGIS)则是将GIS的单机环境逐渐转换为网络环境, 减少了数据操作人员对系统环境的依赖, 同时增加了数据资源的共享。
目前, 已经有很多学者通过遥感技术及GIS较准确地对牧区积雪的变化进行监测分析。王玮[6]利用遥感和地理信息系统等技术, 根据2003-2010年青藏高原地区积雪数据集、气象观测数据、家畜、草地、社会经济资料及雪灾预警模型, 设计开发了基于ArcGIS Server和Flex(Adobe Flex)等技术的青藏高原牧区积雪监测与雪灾预警系统。萨楚拉[3]以内蒙古草原牧区雪灾快速监测技术和雪灾风险评价方法为基础, 结合内蒙古2003-2012年共10年的积雪时空动态监测分析数据, 以Visual C#语言为开发平台, 借助ArcEngine设计实现了内蒙古草原牧区雪灾监测与风险评价辅助决策系统; 王建忠等[7]基于Geomedia WebMap和SQL Server 2000开发了新疆牧区雪灾预报预警系统; 贺俊杰等[8]以Windows 98为工作平台使用VB6.0(Visual Basic 6.0)设计开发了雪灾监测服务系统。这些系统使雪灾相关资料更好地服务于雪灾风险监测工作, 在设计及思想上做了很大贡献, 但仍然存在一些问题, 如数据资料的更新缓慢, 手工处理过程繁杂, 系统的运算能力较弱, 以及系统缺乏灵活性等。这是由于雪灾风险监测与预警需要以大量的数据作为分析及解释的基础, 而数据的基础是对原始气象收集资料去云干扰、去异常值及插值补值的处理[9]。所以, 在进行WebGIS系统开发时, 系统的功能常遭到约束, 可操作的数据范围常受到限制, 不能及时更新数据资料。而GeoServer具有开源和灵活的特点, 虽然ArcGIS Server在进行地图渲染、切片时的效率高于GeoServer, 且较后者更节约存储空间, 但是使用GeoServer可以增加开发的灵活性和系统的可移植性, 而且不会受付费问题的影响[10]。使用开源框架虽然会降低开发效率、增加耗时, 但是却具有低成本及易扩充的特点。开源软件大众协同、开放式共享、持续创新的特点令开源项目更具有发展潜力, 这点从全球开源软件项目风险投资的持续增长中也可以看出[11]。MATLAB强大的数字处理能力在其提供了MATLAB Builder for java这个工具之后, 使J2EE也能很好地利用MATLAB的内置函数, 从而开发出具有较强运算能力的系统。通过以XML的方式读取系统模块配置参数, 可增加系统的灵活性, 将重复的数据处理工作模块化, 降低了人工成本。开发Web系统则是为了方便客户端的使用, 不过相应地会增加服务器的负荷。而这些特点在一定程度上能弥补上述系统中存在的问题。
本研究以青海省雪灾风险综合评价的Logistic回归模型[1]、雪灾家畜死亡率估测BP-ANN模型[12]为基础, 将人均GDP、年均温、最大雪深、积雪覆盖日数、坡度、平均温度、春季雪灾概率、雪灾综合风险、均温小于-5 ℃的持续天数和积雪覆盖率10项风险因子作为输入数据, 将区域边界图、县行政区划图、水系湖泊图几项区域信息作为基础数据, 使用GeoServer地图服务, PostgreSQL数据库、MVC(Model模型, View视图, Controller, 控制器)设计模式以及J2EE(Java 2 Platform Enterprise Edition), 以实现包含青海省牧区雪灾发生概率评估、雪灾家畜死亡率的预测、区域信息及雪灾监测与预警历史数据查询、超阈值预警信息发布等功能的青海省牧区雪灾监测与预警的WebGIS系统。
青海省牧区雪灾监测与预警系统是基于青海雪灾风险综合评价的Logistic回归模型和雪灾家畜死亡率估测BP-ANN模型结合区域边界图、县行政区划图、水系湖泊图几项区域信息最终以可视化方式展示青海省牧区雪灾风险区划图、雪灾家畜危害区划图, 并提供历史雪灾监测与预警数据查询以及属性查询、数据导入、超阈值预警信息发布等功能的WebGIS。该系统的雪灾监测与预警功能主要依赖雪灾风险概率运算以及雪灾家畜死亡率运算。根据影响因子计算出雪灾风险概率及家畜死亡率, 并将结果数据进行渲染, 生成雪灾风险区划图及雪灾家畜危害区划图, 然后将栅格图片发布至Web页面, 便于可视化显示。在获取到雪灾发生概率和雪灾家畜死亡率之后, 参照青海雪灾风险等级[13]及雪灾预警分级评价标准[1]筛选高风险等级的数值及其坐标值, 并在系统内发布预警信息。
其中, 雪灾风险概率运算主要以马晓芳等[1]提出的青海雪灾风险综合评价的Logistic回归模型作为参考:
Logistic(P)=-12.559+0.601x1+2.544x2+3.066x3+1.724x4+7.837x5。
式中:x1、x2、x3、x4、x5分别为坡度、积雪覆盖日数、年均温、最大雪深、人均GDP; P为雪灾发生的概率[1]。该功能以人均GDP、年均温、最大雪深、积雪覆盖日数、坡度5项影响因子作为数据输入, 通过数字矩阵转换以及回归运算输出雪灾发生概率的栅格数据即空间分布。
而雪灾家畜死亡率的计算则以高金龙等[12]训练并提出的雪灾家畜死亡率估测BP-ANN模型为参考, 将雪灾发生概率、平均温度、春季雪灾概率、均温小于-5 ℃的持续天数和积雪覆盖率5项影响因子作为输入层, 通过数字矩阵转换以及BP-ANN模型运算模拟输出未知雪灾事件导致的家畜死亡率的栅格数据即空间分布。
超阈值及其对应坐标的提取则是根据雪灾风险概率运算以及雪灾家畜死亡率的运算结果, 依照青海雪灾风险等级及雪灾预警分级评价标准, 筛选高风险等级的数值, 并且追踪其对应的坐标值, 记录数值, 然后生成预警信息, 进行系统内预警信息的发布。
该系统的主界面为青海省区域边界图、县行政区划图、水系湖泊图的叠加显示, 左上角系统触发属性查询、雪灾监测与预警历史数据查询、预警信息查询窗口。可在搜索栏中进行属性信息的查询, 也可在地图元素中点击获取属性信息。雪灾监测与预警历史数据的查询需要在获取结果后确认是否显示, 以加载图层。顶部的菜单栏中可以进行雪灾风险评估与预警、系统维护功能的切换, 页面上方为坐标信息的显示, 右下角具备鹰眼功能, 右上角可以选择需要显示的图层。
该系统遵循MVC的分层设计思想, 将系统整体上分为数据层、应用逻辑服务层以及表现层, 在此不进行详细说明。这种设计模式可增加代码的可维护性和重用性, 使组件分离、系统结构更清晰[14], 并且将部分逻辑分析处理转由浏览器承担, 可缓解服务器的压力。图2为青海省牧区雪灾监测与预警系统层次结构图。服务器使用Tomcat, 采用B/S(Browser/Server)结构, 即浏览器和服务器模式, 使客户端的操作不受操作环境的影响, 只需要考虑浏览器。
根据系统功能模块的需求, 整理设计关于影响因子、区域信息、系统参数的数据库, 即创建用于查询及管理的属性数据表、部分地图的空间数据表、系统参数表以及栅格地图, 其中栅格地图、部分矢量地图以文件形式存储。数据内容包括青海村庄、乡(镇)、县、省道、湖泊、县道、河流及中国省界, 元素类型、运算参数、文件存储目录, 人均GDP、年均温、最大雪深、积雪覆盖日数、坡度、平均温度、春季雪灾概率、雪灾综合风险、均温小于-5 ℃的持续天数以及积雪覆盖率。
根据青海雪灾风险综合评价的Logistic回归模型[1]、雪灾家畜死亡率估测BP-ANN模型[12]、青海雪灾风险等级及雪灾预警分级评价标准, 利用MATLAB与Java的混合开发完成系统的分析运算功能, 生成青海省牧区雪灾风险概率及家畜死亡率, 筛选高风险等级的数值及其对应坐标值。该运算在MATLAB中设计实现, 以输入输出为界限进行功能的构建, 方便在Java中调用。
数据是系统进行运算与逻辑分析的基础, 各功能模块依附的框架所支持的数据类型不同。属性数据使用关系数据表进行存储, 区域信息的矢量数据以空间数据表、GML、KML形式存储, 用于空间运算的栅格数据则使用Geo tiff形式存储。而调用这些数据进行不同操作时需要转换数据。主要的转换操作有图像与数字矩阵间的相互转换、栅格及矢量数据的图片化展示、栅格及矢量数据的PostgreSQL存储。这些操作分别使用MATLAB(geotiffread、geotiffwrite等)、GeoServer(REST API)以及PostgreSQL(PostGIS)实现, 为系统对雪灾影响因子及青海省区域信息的处理提供了良好的支持。
对分析运算和逻辑处理后的数据进行前台页面的展示, 包括区域信息的图层叠加、地图元素属性的查询、雪灾风险区划图及雪灾家畜危害区划图的显示、超阈值预警信息的发布。为了提高加载速率, 部分矢量地图使用GML/KML形式加载, 栅格地图依赖WMS(Web Map Server)使用Geoserver进行发布。
该系统属于WebGIS系统, 包含地图服务GeoServer, 用于展示青海省区域信息、雪灾监测与预警数据及简单的空间分析处理; 进行前台页面地图展示的核心组件OpenLayers, 用于图层展示并向GeoServer发送相关业务请求; 进行数据操作、数据模型处理以及逻辑业务处理的基于J2EE实现的系统核心部分, 用于青海雪灾风险综合评价Logistic回归运算、雪灾家畜死亡率BP-ANN估测、超阈值及其对应坐标值的提取、地图元素属性查询及修改; 支持空间数据的PostgreSQL数据库, 用于数据存储、数据转换及数据运算(图3)。
本系统依赖GeoServer地图服务, 依照WMS(Web Map Server)、WFS(Web Feature Server)以及WCS(Web Coverage Server)规范进行栅格及矢量地图的发布、地图要素的操作以及空间分析。使用Openlayers向GeoServer发送XML请求获取地图元素, 并在前台页面进行地图展示。其空间数据的处理及运算部分主要依赖于PostgreSQL、MATLAB(MATLAB Builder for Java)以实现图像与数字矩阵的转换、模型矩阵的运算及风险等级和预警数据的生成。数据的存储使用PostgreSQL, 分为属性数据和空间数据, 并辅以tif(Geo tiff)格式以文件形式存储栅格数据, 为数据的查询和空间分析处理提供数据支持。
与单一地调用地图服务展示地图数据不同的是, 该系统使用MATLAB的MATLAB Builder for Java功能对数字矩阵进行回归运算, 从而获取目标数据。MATLAB Builder for Java是MATLAB Compiler的一个扩展功能, 该功能可以将MATLAB中设计好的算法直接转成Java类, 为Java与MATLAB的混合开发提供了便利, 这种设计可以增强系统的运算能力。
利用MATLAB设计实现系统的运算功能是本研究的重要环节, 系统中将其分为4部分, 图像转为数字矩阵、模型的运算分析、数字矩阵转图像和地图数据存储。上文中提到的青海省区域信息(村庄、乡镇、县、省道、县道、湖泊、河流)以矢量数据和关系数据表形式存储, 可以直接在地图中获取元素及其信息, 比如祁连县(位于青海省东北部)。而用于模型运算的影响因子(人均GDP、年均温、最大雪深、积雪覆盖日数、坡度、雪灾发生概率、平均温度、春季雪灾概率、均温小于-5 ℃的持续天数和积雪覆盖率)则为栅格数据, 该系统中使用tif格式, 便于MATLAB进行运算。从ArcMap中导出的每一个影响因子的地图数据文件包含5类, 分别为.png(标记图像文件)、tfw(坐标文件)、tif.aux.xml(栅格辅助信息)、tif.ovr(金字塔文件)、tif.xml(影像文本信息, 为非必需文件), 而用于模型运算的为.png标记图像文件。MATLAB拥有矩阵运算能力和图形化功能, 其内置geotiffread、regress、geotiffwrite等函数可实现图像读入、矩阵转换、矩阵运算、异常值处理、重新绘图等。MATLAB与Java的混合编程简化了编程的复杂性, 同时增加了系统处理复杂模型的能力。但是由于图形矩阵容易消耗内存, 若需要的存储空间超过内存大小或者连续的存储空间不足都会造成内存溢出, 所以在MATLAB的代码设计中尽量减少for循环的使用, 提前为容易消耗内存的变量分配连续的内存空间, 并及时回收整理内存。系统设计将运算功能和查询功能分开, 也是为了缓解内存的消耗, Logistic回归运算、BP-ANN模型运算、数值及坐标的提取不必实时进行, 只需在系统收到运算命令后进行相应的矩阵运算。而首次生成的tif文件(青海雪灾风险概率或青海雪灾家畜死亡率)在进行空间分析和渲染后生成需要的结果图, 存储后供下次查询时直接使用, 无需再次进行复杂的运算, 这样既可以减少服务器的压力, 也能缩短系统的响应时长。此功能需要中间参数表的支持, 以便进行相关数据的存储, 包括数据日期、雪灾风险概率及雪灾家畜死亡率文件的存放目录、数据版本号等信息。超阈值及其坐标的提取是针对风险概率及家畜死亡率进行的运算, 将筛选的数据记录在独立的数据表中, 前台页面调用时以预警信息的形式显示。
以xml进行系统参数文件的读取, 是考虑到OpenLayers在调用函数访问GeoServer地图服务时, 由于读取地图的方式不一样, 导致主要参数的不同。KML和GML文件不经过GeoServer地图服务就可以在页面上呈现, 而shp(shape)和tif类型的文件则需要通过OpenLayers的WFS和WMS方法访问GeoServer从而显示地图。在xml中修改url、featureNS、featureType等参数, 系统在加载时读入。以Excel导入方式进行地图元素属性以及主要信息表的维护, 该功能使用Jxl包(jar包)来完成对Excel文件的读写, Jxl包含操作Workbook、Sheet及Cell的类。在数据写入层进行Excel文件的存储和数据库表的更新。
系统中Logistic线性回归模型、雪灾家畜死亡率估测BP-ANN模型的实现依赖MATLAB Builder for java 工具。在MATLAB中使用net.trainParam方法训练出理想的网络, 使用矩阵运算实现多元回归算法, 利用deploytool生成相应的jar包, 然后在Java中进行调用, 使用方法与一般的类一样。实现过程中对代码的执行效率进行了简单测试(MATLAB使用clock和etime, Java使用System.currentTimeMillis), MATLAB中的执行时间明显小于Java中的。
青海省牧区雪灾监测与预警系统的主要功能包括属性信息查询、雪灾监测与预警历史数据查询、雪灾风险区划图及雪灾家畜危害区划图的展示、雪灾风险概率及家畜死亡率的运算、超阈值及其对应坐标值的提取、系统用户管理、数据导入(图4)。系统的主要目的为计算雪灾风险概率、家畜死亡率、超阈值及其对应坐标值, 查询管理区域信息数据、雪灾风险监测与预警数据。
根据区域信息图的矢量数据, 抽取其属性数据, 建立属性信息表, 在进行地图元素属性查询时, 将关联的属性信息以列表的形式展示, 或者在地图元素中直接获取。
提供历史数据查询功能是由于影响因子为变量, 运算结果仅是某段时间内的监测与预警数据, 所以雪灾风险区划图、雪灾家畜危害区划图及预警信息会因此产生不同时期的数据, 系统需要将这些数据都保存下来, 并提供查询。
该模块提供基于某一版本影响因子数据的雪灾风险区划图、雪灾家畜危害区划图的展示; 记录超过阈值的雪灾风险概率、家畜死亡率, 并在系统内部发布预警信息。若雪灾风险区划图及雪灾家畜危害区划图为第一次加载, 或者没有使用过雪灾风险概率或家畜死亡率运算功能, 则加载时间较长, 因为需要调用运算功能处理矩阵数据。
该模块主要供GIS数据维护者使用, 为了尽可能减少数据维护者的工作, 该系统在数据导入模块中实现了属性数据和空间数据的维护功能, 使用Excel文件、GML/KML文件以及tiff栅格数据文件进行属性数据或空间数据的导入。数据的导入可以按照需求, 以日期及版本作区分, 可以以日、月、年作为频次。
该模块用于青海省牧区雪灾概率、家畜死亡率的运算、超阈值及其对应坐标的提取。以规范的影响因子作为前提, 选择相应的运算参数进行运算以获取雪灾风险概率及家畜死亡率, 针对其运算结果筛选并提取超阈值及其对应坐标值, 生成记录, 以备使用。
本研究使用GeoServer、Tomcat、Openlayers、PostgreSQL以及J2EE开源框架, 利用MATLAB、雪灾概率回归方程、BP-ANN模型算法实现的青海省牧区雪灾监测与预警系统, 在一定程度上满足通过影响因子计算雪灾风险概率及雪灾家畜死亡率的需求, 提高了系统与数据维护人员及用户的交互能力, 同时增加了系统的矩阵运算能力。另外, 系统将模型运算转由系统服务器处理, 整体上减少了手工整理数据的过程, 增加了系统实时处理数据的能力。虽然该系统的数据处理能力及效率有待提高, 但该系统是模型实际化的一种尝试, 对日后继续设计完善WebGIS的运算功能提供了一种思路。该系统使用的风险评价模型较单一, 数据的处理也较简单, 不能完全满足复杂的GIS需求, 所以其适用性欠佳。虽然目前还有其他学者提出的雪灾风险评估模型, 但是系统、算法、模型设计环节中存在的诸多困难以及有限的技术水平导致无法灵活地应用这些模型, 造成理论模型丰满, 实际应用欠佳的现象。这也是研究与实际应用之间的屏障, 希望在今后的研究中逐渐改善。
(责任编辑 武艳培)
The authors have declared that no competing interests exist.
[1] |
|
[2] |
|
[3] |
|
[4] |
|
[5] |
|
[6] |
|
[7] |
|
[8] |
|
[9] |
|
[10] |
|
[11] |
|
[12] |
|
[13] |
|
[14] |
|