| 利用GDAL和OpenCV的海平面上升淹没模拟 |
2. 河北省信息传输与信号处理重点实验室,河北 秦皇岛,466004
2. Hebei Key Laboratory of Information Transmission and Signal Processing, Qinhuangdao 466004, China
由于全球温室效应造成两极冰川融化,导致海平面不断上升,沿海城市部分区域将面临被海水淹没的威胁。当前对淹没模拟已经取得了较大的进展,大量研究机构和人员致力于使用新的方法和理论对海水淹没进行科学、准确的描述,对海洋预警、沿海城市开发、海啸灾害模拟等方面具有重要参考价值,因此沿海城市的海水淹没模拟成为地理信息系统和海洋领域的交叉研究热点。
国内外对淹没模拟进行了大量的研究,Bates等[1]通过实验指出总体上基于DEM(digital elevation model)栅格数据的淹没模拟取得结果较好。刘仁义等[2]提出依据水淹是否具有连通性,将水淹分为有源淹没和无源淹没两种。张东华等[3]实现了种子淹没算法,用以计算淹没范围。随着地理信息系统(geographic information system, GIS)技术的不断发展,研究人员借助成熟的GIS平台,将水淹模拟研究系统化,提出了格网模型[4]。另有一些研究团队,为了解决平面模型的不足,建立与分析了在QTM(quaternary triangular mesh)下的陆地水淹没模型[5],计划对全球范围内海水淹没进行模拟。但球面离散格网在水淹模拟分析的应用上仍处于初步阶段,其新型数据的组织方式和精度仍存在巨大挑战。这些研究所用到的技术大致分为两类:一类是利用ArcGIS、MapInfo、SuperMap等商业化的成熟GIS系统[6-9]; 另一类是自主开发的轻量级软件[10]。成熟的GIS软件一般具有完整的遥感图像处理系统和对应的二次开发平台接口,这些应用程序接口(application programming interface,API)让用户既可以使用其强大的遥感信息处理功能,又可以针对自身需求进行快速开发。然而,这些GIS平台多是价格昂贵、专利授权的,其开发的软件必须依赖对应的主系统,还可能存在版权、兼容性、可移植性差等问题。
基于以上的背景分析,本文针对海水淹没模拟方面的需求,探索了使用开源软件技术对沿海城市进行海水淹没模拟的思路,主要使用GDAL(geospatial data abstraction library)、OpenCV(open source computer vision library)进行相关算法功能的实现,建立了一个功能专一、可移植性强、对软硬件要求较低的海水淹没分析系统。
1 系统总体设计系统主要使用了GDAL和OpenCV进行开发。GDAL是一个开源读取和处理的栅格和矢量地理数据C/C++类库,支持几十种栅格和矢量的遥感GIS数据格式[11]。作为一个出色的类库,它不仅为应用程序提供了单独的栅格抽象数据模型和矢量抽象数据模型,还提供了丰富的命令行工具,使用非常方便。ArcGIS、Map Server、QGIS等几十种GIS软件均选择了GDAL作为底层数据处理的工具。OpenCV是优秀的计算机视觉开源库,选择其数据容器作为本系统图像存储的基础,不仅高效易用,还可以兼容其丰富的图像处理函数。整个系统分为数据存储层、业务逻辑层和用户界面层3层。
1) 数据存储层是系统的底层模型结构。为了弥补OpenCV对于遥感数据格式支持的不足,采用使用GDAL模型拓展的Mat数据结构,使得底层数据结构既可以兼容OpenCV的操作,同时又包含必要的坐标系、经纬度、比例尺等遥感图像信息。
2) 业务逻辑层是功能实现的核心,接受用户请求并返回结果。可以分为GUI服务、淹没模拟和图像处理3部分:①GUI服务部分和用户界面层紧密联系,主要包括图像读取、选择和图像显示。采用Signal and Slot的通信机制编写,这部分包括浮动面板移动、改变显示区范围、图像缩放、滚动、旋转、全屏等用户对于界面的操作。②淹没模拟部分是业务层的核心功能。对遥感图像数据以及数字高程模型(digital elevation model, DEM)数据进行处理,设计淹没算法,将生成的淹没范围叠加到遥感图像上,海平面上升对应的淹没范围用不同的颜色显示。③图像处理部分是海水淹没分析的基础功能,包括图像增强、配准和信息查询等功能,主要基于OpenCV和GDAL的API编写,例如,查看遥感图像坐标信息使用了GDAL中的GDALInfo方法。
3) 用户界面层基于Qt框架搭建,主要完成用户交互以及效果展示的功能。用户交互主要包括读写遥感数据图像、漫游图像、选择图像处理功能以及进行海水淹没分析设置,效果展示主要包括显示遥感图像和淹没范围。
2 系统主要功能实现 2.1 数据读取使用GDAL中的RasterIO获取图像数据,OpenCV中使用imread函数打开图像数据。OpenCV从3.4版本开始在imread函数中添加了对遥感图像读取的支持,其底层实现依赖GDAL,但只能实现图像内容打开,并没有添加对遥感信息(坐标系等)的支持。因此,本系统按照OpenCV的思路,重新改写并简化了imread的底层实现,使得读取的数据既包含用户需要的遥感数据信息,又原生支持OpenCV的各种工具。
首先,系统定义了数据结构MapLayer类用来表示数据集的概念。接着,在类的实现中,使用m_dataset成员表示GDAL的数据集指针,并根据数据集指针,获得图像数据的相关遥感信息,主要包括坐标系,经纬度等。由m_dataset->GetRasterBand获得某波段信息,并使用RasterIO方法按行依次读入图片数据。最后,将GDAL的格式转化为符合OpenCV中Mat的数据格式,这些方法包括:数据类型转换、通道(波段)转换、颜色表转换等。数据读取模块程序流程如图 1所示。
![]() |
| 图 1 数据读取模块程序流程图 Fig.1 Flow Chart of Data Reading Module |
2.2 淹没分析
在进行沿海城市海水淹没范围分析时,需要用到该地区的遥感卫星图像作为底图显示。将DEM作为系统的基础高度模型,这样就可以在卫星图的基础上,将淹没结果直观展示出来。在栅格模型中,每一个区域由一个栅格点,或者称为像素点来表示,并且为每一个栅格点赋予一个高程值,因此淹没区的准确程度极大程度上依赖DEM数据的精度。本文选择了具有30 m精度的ASTER GDEM (advanced spaceborne thermal emission and reflection radiometer global DEM)V2版作为基础数据。
基于栅格模型的海水淹没分析分无源和有源两种。无源淹没顾名思义就是无源头的淹没,即所有高程值低于淹没值的点全部计入淹没区。这种淹没又被称为降雨性淹没,是因为这种淹没更像整个区域大面积均匀降水,不考虑区域连通,更不考虑地表地形的水流路径。因此,无源淹没在洪水模拟中,常常被用作地形平坦、地表类型相对单一的区域。从计算机处理的角度来看,无源淹没算法简单高效,通常只需要按某种顺序遍历待分析区域每个格网单元并做出相应的处理即可。有源淹没是相对无源淹没而提出的。与无源淹没只考虑高度不同的是,有源淹没是一种具有源头的淹没,从淹没源头开始,所有流水能到达的范围才会计入淹没范围。例如,洪水淹没模拟中,大坝崩塌时,水流会根据地形的不同流向地势较低的地方,但洪水可能会被洼地周围的高地阻拦而不会流入洼地中,即使洼地的中的高程值满足被淹没的要求。在现实中,有源淹没的情形也更加复杂,涉及到区域连通、水流方向等多个方面的问题。有源淹没算法流程如图 2所示。
![]() |
| 图 2 有源淹没算法流程图 Fig.2 Flow Chart of Source Submergence Algorithm |
正是因为有源淹没相对接近流水的真实情况,因此,在洪水淹没中占有重要的地位。但其考虑问题较多,包括低洼地连通性分析、地表径流形成、水流方向判断等问题,导致其程序效率较低。目前,许多研究都使用了种子蔓延算法来进行计算机模拟,简单来说,就是首先选择一个种子点作为计算起点,然后处理该栅格,并计算其周围8个栅格的高程,选择合适的栅格加入种子列表,直到种子列表中没有符合要求的点便结束淹没模拟,整个过程看起来像是从种子点蔓延到四周,直至淹没边界。
有源淹没需要考虑水的流向对淹没结果产生的影响,有源淹没常使用种子蔓延算法,这是一种扩散探测算法,其核心思想是将给定的淹没点作为种子,经过向周围8个方向进行蔓延,若符合淹没条件,则标记为淹没,并将此点加入种子集合,若不符合淹没条件,则标记为淹没边界。当种子集合中不含有任何点时,可以认为,此时从初始种子点开始,所有水能淹没的地方均已标记完毕,即完成了有源淹没。从计算机程序算法的角度来看,有源淹没的实质与图的广度优先遍历或者深度优先遍历很相似,当遍历条件不满足时,便结束整个过程。因此,本系统的算法设计基于深度优先遍历完成。
2.3 图形界面显示系统前台用户界面,从上到下依次为菜单栏、工具栏、软件主区域、状态栏。菜单栏包括系统全部的操作,工具栏是对图像常用工具的映射,包括放缩、复位等,状态栏用于系统展示重要操作后的结果或用户提示。其中主区域根据功能不同采用了多个浮动窗口,使得窗口位置可以由用户自行按照喜好调整。主区域分为4个窗口,左上角窗口为本地图片浏览器,左下角窗口为图像管理器,中间窗口为主显示区,右边窗口为图像处理功能选择区。显示界面如图 3所示。
![]() |
| 图 3 显示界面 Fig.3 Display Interface |
2.4 试验
本文以渤海沿岸从北戴河到绥中的海岸带为研究区域,进行海水淹没模拟试验。遥感图像采用的是Landsat5 TM秋季无云数据,行编号为32,条带号是121。DEM数据采用是30 m精度的ASTER GDEM V2版。采用有源淹没算法进行淹没范围模拟,并进行着色和渲染,实现不同海平面上升水位下的海水淹没模拟。当用户在图 3(a)右侧窗口中设置并进行海水淹没分析时,其淹没结果效果图以4级颜色展示。将卫星遥感图与淹没模拟图相结合,将淹没区叠加在卫星图像上,使得淹没范围的展示更加直观。图 3(b)是有源淹没的结果的局部放大图,其中蓝、黄、橙、红依次代表海平面上升为0~10 m、11~20 m、21~50 m、51~100 m对应的淹没范围。
3 结束语本文系统地论述了基于GDAL和OpenCV的海水淹没模拟系统,实现了有源淹没算法及淹没范围的可视化,为海水淹没系统实现提供了一种解决方案。不依赖现有的GIS软件及其二次开发平台,而是针对海水淹没分析这一功能使用开源库进行了深度开发,使得软件具有自由分发、精简、依赖性低、易于移植等优势。
| [1] |
Bates P D, De Roo A P J. A Simple Raster-Based Model for Flood Inundation Simulation[J]. Journal of Hydrology, 2000, 236(1/2): 54-77. |
| [2] |
刘仁义, 刘南. 基于GIS的复杂地形洪水淹没区计算方法[J]. 地理学报, 2001, 56(1): 1-6. |
| [3] |
张东华, 刘荣, 张咏新, 等. 一种基于DEM的洪水有源淹没算法的设计与实现[J]. 东华理工大学学报(自然科学版), 2009, 32(2): 181-184. DOI:10.3969/j.issn.1674-3504.2009.02.015 |
| [4] |
丁志雄, 李纪人, 李琳. 基于GIS格网模型的洪水淹没分析方法[J]. 水利学报, 2004(6): 56-60. DOI:10.3321/j.issn:0559-9350.2004.06.010 |
| [5] |
邢华桥, 侯妙乐, 王磊, 等. 基于球面QTM的大范围有源淹没算法研究[J]. 测绘通报, 2015(12): 46-49. |
| [6] |
李发文, 张行南, 杜成旺. 基于GIS和数学形态学的洪水淹没研究[J]. 水利水电科技进展, 2005, 25(6): 14-16. DOI:10.3880/j.issn.1006-7647.2005.06.004 |
| [7] |
杨军, 贾鹏, 周廷刚, 等. 基于DEM的洪水淹没模拟分析及虚拟现实表达[J]. 西南大学学报(自然科学版), 2011, 33(10): 143-148. |
| [8] |
栾维新, 崔红艳. 基于GIS的辽河三角洲潜在海平面上升淹没损失评估[J]. 地理研究, 2004, 23(6): 805-814. DOI:10.3321/j.issn:1000-0585.2004.06.011 |
| [9] |
毕京佳, 黄海军, 刘艳霞. 采用遥感和GIS技术的洪水痕迹提取与范围估测[J]. 遥感信息, 2016, 31(6): 147-152. DOI:10.3969/j.issn.1000-3177.2016.06.022 |
| [10] |
邢华桥, 侯妙乐, 王磊, 等. 基于球面QTM的海平面上升淹没模拟系统[J]. 系统仿真学报, 2015, 27(11): 2 689-2 694. |
| [11] |
申焕, 石晓春, 胡勇修. 利用GDAL扩展ArcGIS Engine对HDF文件的支持[J]. 测绘地理信息, 2013, 38(3): 43-45. |
2020, Vol. 45




