摘要:城市内涝的提前预报是降低灾害损失的有效手段。为了解决城区暴雨沥涝仿真模拟系统的数据管理和用户访问问题,开发了基于WebGIS的城市内涝仿真系统数据后处理平台。该平台包含了空间数据库、数据导入程序、GIS服务和WebGIS客户端。平台根据业务特点对时空数据库进行了优化设计,平台针对静态图层和动态图层分别采用瓦片地图服务和动态地图服务,对于包含大量数据的动态图层采用WMS地图服务,对于少量数据的动态图层采取WFS地图服务。该平台实现了时间、空间、属性数据的统一管理,并且方便了用户访问。
关键词:城市内涝;空间数据库;WebGIS;PostGIS;GeoServer
一、前言
城市内涝是指由于强降水或连续性降水超过城市排水能力致使城市内产生积水灾害的现象。国内的许多城市由于城市迅速扩张、天然水面锐减、地面硬化率高、城市排水管网建设滞后等原因造成内涝现象日趋严重。城市内涝会严重影响人民生活并带来生命财产损失,治理内涝除了城市合理规划、加强排水管网建设等长期措施之外,提前预报是将灾害损失降到最小的有效手段[1]。
城市内涝的研究有三种方法:基于统计模型、实时监测和水文模型,其中只有基于水文模型能够做出精确到时间(天和小时)和范围(社区)的提前预报[2]。近年来国内外基于水文学、水动力学研发了许多内涝仿真模型,能够模拟降水、产汇流、排水等内涝过程,并且能够预测内涝范围和积水深度[3]。其中以国外的暴雨雨水管理模型(SWMM),国内的天津市沥涝仿真系统为代表。需要说明的是天津市城区暴雨沥涝动态仿真模拟系统经过20年的研究、开发和验证,已经在全国北京、天津、武汉、南京、南昌、福州等多个城市试运行或者部署运行,本文接下来针对天津内涝仿真系统进行讨论[4-5]。
天津内涝仿真系统通常包括预处理、模型计算、后处理(显示处理)三个子系统。预处理子系统:首先准备河流水系、DEM高程、行政区、道路、排水管网、泵站阀门等图层文件(Shpefile格式),然后使用ArcGIS对计算区域进行概化,生成网格、通道、结点等图层,最后使用ArcGIS脚本程序对图层文件进行处理,生成文本数据文件以供Fortran计算程序读取。模型计算子系统:模型计算的输入是气象数据和泵站、阀门开启规则以及河流水文数据,输出是积水预报结果。当气象条件(根据雨量站、雷达、数值预报等数据)满足一定的边界条件后启动程序进行内涝计算,计算程序基于二维非恒定流方程进行数值模拟,计算结果输出文本文件。后处理子系统:读取仿真计算产生的文本文件,以及预处理生成的图层文件,生成某一次预报(例如某个时次的面雨量、最大积水水深预测、某一个时次积水水深、积水预警等级等)的结果(Shpefile文件格式),文件同时包括空间和属性数据,不同时间的预报结果用不同文件名区别。用户使用ArcGIS Desktop打开后处理生成的图层文件进行展示。
这种方式存在两个严重问题。1.虽然内涝仿真模型三个子系统都涉及地理信息系统GIS,但是三者使用不同的软件或者计算工具。预处理使用ArcGIS Desktop软件(使用了ArcGIS计算脚本),仿真计算采用Fortran程序,后处理也是用ArcGIS Desktop软件。这样做是因为GIS软件的数学建模和计算能力较差,无法直接建模内涝模型。由于三个子系统之间没有统一的数据库,三个子系统之间通过文件传递数据,海量的数据文件难以进行有效管理,这些文件既包括地图图层文件也包括文本数据文件,不同格式的文件传递增加了系统的复杂性。2.内涝计算结果的展示是通过ArcGIS Desktop打开不同的图层文件进行,用户端必须安装庞大、昂贵的ArcGIS软件。显示需要在一个地图文件上(MXD)叠加不同的图层文件(Shapefile),操作很不方便并且要求用户熟练掌握ArcGIS Desktop的技能,普通用户难以使用。
针对以上问题汕头大学和天津市气象科学研究所的科研团队联合开发了基于WebGIS的城市内涝仿真计算数据后处理平台,通过建设该平台一方面能够对内涝模型计算产生的时间、空间、属性数据进行有效的管理,另一方面方便了用户使用。
二、平台架构
城市暴雨内涝仿真系统包括预处理、模型计算、后处理(显示处理)三个子系统。其中数据后处理子系统(显示处理)包括数据库、GIS服务、WebGIS客户端、用户界面四部分,下面分别对后处理平台的每一部分进行描述。
三、数据库和数据导入程序
(一)数据库选型
城市内涝仿真的计算结果同时包含空间、时间、属性数据,是时空关系数据TGIS(Spatial-Temporal GIS),并且计算结果数据量非常大。以天津气象科研所开发的内涝模型为例,天津主城区(不包含滨海新区等区县)一次积水过程计算会产生超过10万条记录,整个系统一年会产生各种数据3亿多条。面对如此大数据量,数据库选型和数据库设计至关重要。本系统采用带有空间扩展的关系数据库管理系统PostgreSQL+PostGIS作为数据存储方案。采用上述数据存储方案是因为PostgreSQL和PostGIS开源免费,支持OGC规范,支持多种空间数据类型和强大的空间处理函数,并且能够和常用GIS软件进行对接。
(二)数据结构设计
内涝仿真系统需要展示不同时间、不同空间对象的属性值,但是一般不需要针对不同空间对象进行空间关系运算以及跨时间的关联分析,所以数据存储采用TGIS中最常用的序列快照模型。序列快照模型是将一系列时间片段的快照保存起来,各个切片分别对应不同时刻的状态图层,以此来反映地理现象的时空演化过程。序列快照方式的优点是数据模型直接在当前的GIS系统软件中实现,数据库总处于有效状态,数据查询快速方便,缺点是会产生大量的数据冗余。
虽然所有的内涝计算结果都同时包含空间、属性、时间数据,但是其数据的空间部分往往是不变的,只有时间数据和属性数据(积水深度、降雨量等)是改变的。预处理把计算区域离散化为许多不规则多边形,内涝计算结果是每一个不规则多边形在某一个时刻的积水深度和积水等级。因此数据库设计可以把空间字段和时间、属性字段放在不同的表里边,通过视图进行关联。通过这样的设计可以大大减少数据冗余,极大地加快数据加载速度。因为查询时候需要关联多个表,我们也想过使用物化视图来加快关联查询,但是在使用过程中降低数据插入速度并且占用大量空间,经过权衡之后没有被采用。
(三)数据导入程序
内涝计算结果写到数据库有两种方式。第一种是内涝计算程序直接写数据库,第二种是内涝计算输出到文本文件,后处理程序把文件数据导入数据库。由于内涝模型涉及水动力学,需要进行大量的积分等数值计算,内涝计算模型是使用Fortran开发,模型的开发者不熟悉关系数据库,更习惯于输出文本文件。在这种场景下,采用数据文件导入数据库的方式比较合适,通过中间数据文件可以使计算程序和数据库操作相互隔离,并且不需要引入复杂的系统架构和技术(例如消息队列、中间件等)。由于每次数据导入的数据量很大,程序的运行性能至关重要,数据导入程序采用Java和JDBC开发。为了提高数据导入性能,在数据库后台开发了数据导入的存储过程,数据导入程序使用了批量处理和事务处理,大大减少程序和数据库的交互次数。
四、WebGIS
WebGIS是内涝仿真系统数据展示和用户交互操作的核心[6],其体系结构如图1所示。
(一)GIS服务
本系统采用GeoServer作为地图服务软件,GeoServer开源免费,支持OGC标准协议,并且内置支持PostgreSQL,可以直接将PostgreSQL的空间表(或者视图)发布为标准的地图服务。
为了提升系统性能将图层分为静态图层和动态图层,并且采用不同的方法处理。静态图层采用静态瓦片地图服务(WMTS),动态图层采用动态地图服务(WMS、WFS)。静态图层包括基础底图、河流水系、DEM高层、雨量站、排水管网、泵站阀门、网格、通道、结点等,这些图层一般不会发生变化,除了基础底图(采用天地图和政务一张图)外其他图层都是在预处理过程中生成。静态图层的数据处理流程如下:在预处理阶段通过GIS桌面版软件(QGIS、ArcGIS)处理生成静态并加载到空间数据库,使用GeoServer自带的GeoWebCache工具生成不同比例尺的瓦片地图,然后在发布为WMTS(瓦片服务协议)。瓦片是预先生成并存放在服务器端的图片文件,省去了在服务器端实时计算生成图片带来的服务器的负载,也避免客户端实时渲染(WFS)所带来的客户端的卡顿。瓦片地图是一种以空间换时间的策略,能够大大提高响应速度。
动态图层包含雨量站面雨量、雷达估算面雨量、数值预报面雨量、最大积水、积水过程等图层,其中最重要的是积水预报图层。其中自动雨量站的数据通过气象接口传递进来,雷达估算面雨量和数值预报面雨量是气象预报的产品,这些雨量数据经过面插值到不规则网格(内涝预处理生成不规则网格)上。最大积水、积水过程等由仿真模型计算实时生成。动态地图服务包括空间数据库和GIS Server两部分。具体而言GIS Server建立到空间数据库的链接,然后把空间表(或者连接了空间表的视图)发布成WMS、WFS服务,以供WebGIS客户端访问。
对于动态图层也分为两种情况,对于数据量很大的图层(例如最大积水、积水过程),采用GIS服务器动态生成图片的方式发布地图服务,地图服务采用WMS协议。这样做是因为当前浏览器的JavaScript引擎在渲染显示大量地图要素时候性能很差。对于数据量比较小的图层(例如积水片区、社区)采用WFS发布地图服务,WFS根据查询条件动态输出Json格式的数据文件,相对于传输图片可以大大减少客户端和服务器数据传输量,此外在浏览器客户端渲染地图有更好的用户交互性。
(二) WebGIS客户端
WebGIS客户端基于HTML+Javascript,使用OpenLayers作为地图开发的API类库。OpenLayers很好地支持动态地图服务WMS、WFS和WMTS(瓦片地图服务),并内置实现了地图显示和地图交互(放大、缩小等)。WebGIS的程序流程如下:浏览器加载HTML5的Web页面,执行JavaScript程序,JS程序向GIS Server发起WMS、WFS、WMTS请求,然后把地图显示在浏览器页面上。JJS发起WMS的GetMap请求到GIS Server,GIS Server连接数据库发起查询请求,然后根据查询结果动态生成地图图片,JS对返回的图片经过拼接处理后在浏览器上显示。对于数据量比较小的图层(例如积水片区、社区),Openlayers调用WFS服务获取Json然后在客户端渲染。采用客户端渲染会有更好的用户体验,例如当用户更改地图缩放比例和显示范围的时候不需要重新从服务器获取数据,能够实现鼠标移动到某个地图要素上面动态更改要素的显示样式等交互性功能。WebGIS客户端发起WMS请求的UML序列图如图2所示,WFS请求流程除了服务协议不同外,其流程和WMS一样。
五、用户界面
城市内涝仿真系统的显示界面包括图层选择区、日期时间选择区、地图、地图缩放工具、色标组成。图层选择区包括一些选择框,可以控制某个图层(或者图层组)的显示和隐藏,并支持多个图层的动态叠加。日期时间选择区:手工输入或者用日期时间选择控件选择时间, JavaScript会发起WMS或者WFS请求,把时间作为参数传递给后台GIS Server,后台返回该时刻(或者时间范围)的地图图片(WMS的GetMap)或者要素集合(WMS的GetFeatureInfo或者WFS),客户端经过渲染处理后在浏览器上显示。最大积水只有一个启报时间而积水过程有两个时间,一个是启报时间(也就是内涝计算的时间),一个是预报的时间。
六、结语
基于WebGIS的城市内涝仿真系统数据后处理平台作为天津内涝仿真系统的重要组成部分于2015年3月开发成功,并且在天津市主城区、天津市滨海新区、天津市气象台等多个应用系统成功部署。该系统实现了时间、空间、属性数据的统一管理,该系统方便了用户访问,用户只需要使用浏览器就可以浏览和查询面雨量、积水预测、积水预警等预测结果。经过多年的实际使用,该系统达到了预期设计目标,并且为后续其他功能的实现(包括复杂数据查询、自动存图等)提供了良好的平台支撑。
参考文献
[1]解以扬,韩素芹,由立宏.天津市暴雨内涝灾害风险分析[J].气象科学,2004,24(03):342-349.
[2]解以扬,李大鸣,李培彦,等.城市暴雨内涝数学模型的研究与应用[C]//中国气象局武汉暴雨研究所,美国海洋大气局国家强风暴实验室.中美定量降水监测与预报国际研讨会论文摘要文集,2005:1.
[3]陈靖,张容焱,解以扬,等.基于城市暴雨内涝数学模型的福州内涝灾害风险评估[J].暴雨灾害,2020,39(01):89-95.
[4]陈靖,高强,李培彦,等.基于暴雨内涝模型的天津市西青区中小河流暴雨洪涝灾害评估[J].气象科技,2019,47(01):147-153.
[5]陈靖,李大鸣,郝莹,等.分区层化立体多重天津城市暴雨内涝模型研究[J].水动力学研究与进展(A辑),2019,34(03):367-376.
[6]吉杰,朱展浩.基于WebGIS的交互式缓冲区分析查询[J].计算机应用与软件,2012,29(03):235-238.
作者单位:汕头大学
责任编辑:王颖振、郑凯津