Supermap组件式开发在洪水演进中的应用研究
2020-01-03田林钢魏暄云王素云
田林钢,魏暄云,王素云
(1.华北水利水电大学 水利学院, 河南 郑州 450000;2.河南省豫北水利勘测设计院有限公司 驻郑州办事处, 河南 郑州 450000)
近年来,极端天气的产生愈加频繁,大暴雨造成洪灾的事件也不断出现。对人民生命安全、社会经济发展等方面造成了巨大影响。要想降低洪灾带来的影响就需要研究洪水的过程机理,提前预测洪水。目前国内外学者们在对洪水爆发过程模拟研究时都是使用MIKE,HEC-RAS等专业的模型计算软件,但软件的输出结果往往是表格和数据的形式,难以直观的表现出来[1-2]。因此,如何直观的预报洪水,对洪灾淹没范围等模拟分析显示,在防洪减灾,减少洪灾对周边地区造成的经济损失预估等方面具有重大意义。而三维动态可视化技术能直观的观察洪水淹没的过程情况,可从多方面多角度观察,详细分析洪水不同时刻的情况,为防洪减灾工作提供参考。
随着计算机软硬件的不断发展突破,地理科学与计算机科学、遥感科学等多学科交叉延伸形成的地理信息系统技术也不断发展,其强大的采集、存储、管理、分析和表达空间数据的能力为洪灾过程分析提供了有效直观的辅助工具,成为了目前国内外学者的研究热点[3-4]。如张飞[5]运用GIS技术可以建立一维与二维水利学洪水演进模型,通过洪水影响分析绘制洪水风险图,可以有效评估洪水可能造成的风险和危害。王森等[6]利用30 m分辨率DEM数据的HEC-GeoRAS模拟结果与实测地形资料计算的结果对比分析,在一定条件下误差在可接受范围内。吴勇拓等[7]提出基于AE与IDL的洪水淹没范围估测与模拟系统设计,简化了软件操作过程,为集遥感影像数据处理和GIS应用分析及制图为一体的专业软件系统提供了一种解决方案。使用GIS能有效解决数据不直观的问题,但单纯使用GIS软件成本较高,许多功能用不到造成资源浪费又缺少针对性强的功能。二次开发能解决资源浪费的问题,还能开发更多功能满足使用需要。目前使用二次开发设计的分析系统大多功能不完善,且多是使用国外的ArcGIS软件,没有自主产权且成本昂贵。国内的Supermap、MapGIS等近年来也发展良好,Supermap更是立足于三维建设,在这方面较之国外软件也毫不逊色。本文以XX市河道为例,基于Supermap设计三维洪水动态可视化系统,为洪灾淹没模拟等提供参考。
1 技术支持
1.1 Supermap组件技术介绍
Supermap是国内北京超图公司所研发的软件,北京超图软件股份有限公司是亚洲领先的地理信息系统平台软件企业,其产品更契合国人的使用习惯。现在许多学者使用GIS软件时,大多都是基于国外的ArcGIS等软件研究洪水灾害爆发过程,少有用到国内的GIS平台的案例。国内的GIS经过多年的发展,也有着很大的突破,相较于发展多年ArcGIS在二维方面有着明显优势,Supermap更是立足于三维建设,有机整合了强大的GIS功能和绚丽的三维可视化效果,突破了单纯三维软件的应用瓶颈,提供了三维空间数据管理与查询、三维符号体系、二三维空间分析等实用GIS功能。GIS软件目前广泛运用于各个领域,每个领域使用需求和方式也都各不相同,往往需要针对性的进行二次开发。相比于独立开发难度太大,单纯二次开发受GIS工具提供的编程语言的限制,开发结果往往达预期效果。结合GIS提供的组件式开发既能够达到预期效果,又便捷易懂,成为当前GIS应用开发的主流[8]。超图则推出了iObjects组件供用户进行二次开发,其分为iObjects.Java和iObjects.Net的支持使用Java,C#,C++,VB等开发语言的,为用户提供一个可伸缩的,全面的GIS平台。
1.2 Visual Studio开发工具
Visual Studio是由微软公司推出的集成性开发工具。拥有功能完备的IDE(Integrated Drive Electronics,IDE)技术支持,可用于编码、调试、测试和部署到任意平台,软件环境支持的广泛性与功能都不弱于其它系统。开发效率高且通用性、兼容性强;Visual Studio 2017相较于之前的版本有着明显的优势,更加细致人性化的界面,能自主搭配的功能安装界面,在语言编译方面更侧重于代码的修复和重构,促进编译者的代码正确性和可读性。相较于目前最新的2019版本,在稳定性方面又更有保障。本文使用的是C#语言,是专门为.NET[9]应用而开发出的语言,根本上保证了C#与.NET框架的完美结合。C#避免了C++语言的冗余问题,又具有面对对象语言的一切特性,对比Java语言有更短的开发周期。由此选用了C#语言进行开发设计。
2 系统设计
2.1 系统结构设计
经过初步的研究洪水演进可视化的步骤、使用需要和目前存在的一些问题后,搭建了洪水演进三维动态可视化系统的总体框架,如图1所示。
图1 系统架构图
系统采用B/S架构,结合Supermap iObjects.Net组件和Visual Studio 2017的Forms可视化编程。整个系统主要分为数据中心、业务组件和用户服务三大部分。
数据中心是系统的基础支撑。数据中心又分为空间数据和属性数据[10]。空间数据包括影像资料,空间点、线、面数据等。属性数据则是用于对空间数据进行解释说明的描述性数据。空间数据方面采用Supermap iObjects.Net提供的Workspace控件来访问存储在工作空间中的空间数据;属性数据方面则采用ADO.NET访问存储在数据库中的属性数据,结合C#进行读取。
业务组件是系统的核心,是连接数据中心和用户服务的中转站,也是进行程序命令编译的部分。本系统设计时,主要编写了四个模块,数据处理模块、信息查询模块、动态可视化模块、分析输出模块。
(1) 数据处理模块。现在很多专业计算软件难以直观高效的表达计算结果,国内外学者借助GIS软件对数据强大的采集处理能力来进行充分的说明表达[11]。而往往计算软件又由于输出文件格式等限制,需要从多方面进行格式转化再导入GIS软件中,再转换的过程中往往容易造成数据丢失且转换步骤繁琐等问题。因此本系统设置了数据处理模块,只需选择初始数据类型,程序可自动转换数据并进行导入,一定程度上简化工作步骤,提高了工作效率。
(2) 信息查询模块。系统在观察时,不仅可以查看宏观的洪水演进情况整体判断,也可以根据需要筛选某一类型数据以便更清晰的表达,或者针对某一点的数据信息进行查询显示。
(3) 动态可视化模块。这一模块是借助GIS对数据强大的处理分析能力实现可视化,把表格等数据表现为可全方位多角度观察的三维数据;人体视觉暂留原理[12],即光象一旦在视网膜上形成,视觉将会对这个光象的感觉维持一个有限的时间的现象。人眼的视觉暂留延续的时间一般为0.1 s~0.4 s,只要控制好按一定规律和顺序排列变化图像的时间间隔,看上去就会是平滑连续的视觉效果,也就实现了动态化。
(4) 分析输出模块。分析输出模块是对数据中心部分数据经过计算分析,用颜色或图表等方式加以展示输出,能更直观的反应数据之间的联系。同时还支持数据集[13]的导出。
用户服务是用户的操作界面,由Supermap iObjects.Net提供的SceneControl控件、和LayerControl控件以及菜单栏、按钮等组成的界面,便于用户使用。
2.2 系统主要程序介绍
2.2.1 动态可视化
动态可视化无疑是系统的核心。动态可视化的程序设计思路是使用Supermap对数据强大的处理能力,在数据转换模块中把空间数据转换成图层[14]集合,控制图层集合中每个图层的显示切换时间,达到视觉暂留的时间要求,本次试验中默认使用的是0.1 s。先定义一个LayerCount 变量,使用layersControl控件查询当前工作空间图层集合的总数,循环查询图层名称并存放到NamesCount名称数组中。随后检测程序是否做初始化判断,初始化判断由layernum 1和layernum 2中存放的参数决定。layernum 1存放的是当前图层序号,默认为1,layernum 2存放是最后播放图层序号,默认为图层集合总数。在动态播放前与动态播放后都要进行初始化,即判断其中参数是否为默认值,便可判断是否进行初始化。初始化后对Scene三维场景页面进行刷新并暂停0.1 s。在点击播放按钮后,读取要播放的图层序号,根据初末图层序号设置好进度条,再通过循环语句播放选定的图层。每个图层播放时需要进行刷新,图层播放的时间间隔由延时程序delay()控制,图2是动态化播放流程图。
图2 动态化播放流程图
动态可视化部分代码如下:
Int LayersCount=layersControl1.Scene.Layers.Count;//图层集合数
string[] NamesCount=new string[LayersCount];//名称数组
for (int i=0;i {NamesCount[s]=layersControl1.Scene.Layers[s].Caption;}//进行初始化 for(int i=(int)layernum1.Value-1;i<(int)layernum2.Value;i++){ sceneControl1.Scene.Layers[NamesCount[i]].IsVisible=false;} sceneControl1.Scene.Refresh();//刷新 delay(Time);//暂停时间,0.1 s //播放进度条设置 int TrackValue=(int)layernum2.Value-(int)layernum1.Value +2;//进度条长度 trackBar1.Maximum=TrackValue; //动态播放从layernum1到layernum2的图层 for(int i=(int)layernum2.Value-1;i>=(int)layernum1.Value-1;i--){ sceneControl1.Scene.Layers[layernames[i]].IsVisible=true; sceneControl1.Scene.Refresh();//刷新界面 delay(Time);//Time时间间隔,默认为视觉暂留时间,本次试验使用的是0.1 s} 2.2.2 延时程序 延时程序也是一个关键,用于控制图层播放的时间间隔,默认情况下是以视觉暂留时间0.1 s的间隔进行播放,但可通过设置Time这个参数选择或自定义需要的时间间隔,实现快进、慢放等功能。此外,在初始化完毕刷新时使用延时程序有助于程序的稳定,否则可能会出现界面播放速度难以与程序运行速度匹配的问题。下面是延时程序的代码: public void delay(doublex){ vart=DateTime.Now.AddMilliseconds(x); //x为时间间隔,t为x毫秒后的时间 while (DateTime.Now Application.DoEvents();}//缓解界面刷新,防止界面假死} 2.2.3 防闪屏程序 在使用过程中,由于图层信息刷新速度十分快速,而数据又比较庞大,刷新切换过程中往往对出现窗体闪烁的现象,对此查阅资料后重写了CreateParams函数,将窗体的所有子窗体使用双缓冲[15],结果证明能有效防止闪屏事件的发生。 protected override CreateParams CreateParams{ get{CreateParams cp=base.CreateParams; cp.ExStyle |=0x02000000; return cp;}} 2.2.4 其他程序 此外还有如漫游、放大、缩小、自由缩放、全幅显示等基本操作程序,这些程序同样是三维可视化的一个关键,这些功能实现了多方位多角度的观察XX市河道的情况。 本文以XX市某河道为例,对程序进行测试,看能否实现最初设计的功能,达到预期效果。主界面主要由工作空间资源管理器,图层管理以及场景组成,根据使用需要对Supermap的工具栏和菜单栏有针对性的进行了简化,把常用功能大致归纳为文件、工具、视图、动态播放、帮助五个选项卡,如图3所示。文件有打开关闭新建另存为等选项。工具中有放大、缩小、调整播放速度、查询点面信息等实用工具。视图中可控制三维场景、图层栏、工作空间资源管理器、消息输出等显示隐藏。动态播放下有播放、暂停、继续、停止等功能。帮助中有帮助和关于两个选项,帮助对主要功能提供说明便于使用查阅。 图3 系统主界面 以下是对实现的几个主要功能的介绍。 (1) 数据转换。数据转换功能可以快速添加倾斜模型[16]和MIKE计算结果等数据到项目中,避免了Supermap中数据转化步骤繁琐的问题。从图4所示的数据导入窗口界面可知,添加数据时只需要选择文件或文件夹路径和转换后的数据类型即可。对倾斜模型的快速导入还需输入模型参考点(模型中心点坐标)用以将模型放在正确的位置上。 图4 数据导入窗口 (2) 动态播放及实时监测。从图5对水面渲染模拟水面流动和深色化的对比下可发现,在倾斜影像背景影响下,进行渲染难以观察洪水淹没的具体情况,选用单一深色更便于观察。点击动态播放,将弹出动态播放管理器,该窗口可控制图层的播放、暂停等并同步显示播放的当前图层序号、图层总数,还可对洪水演进时间以及淹没情况可实时监测。如图6所示。 图5 难以清晰观察洪水与可清晰观察洪水(右下)对比 图6 动态播放窗口 (3) 点数据查询。工具选项卡和动态播放管理器中均设有点数据查询,在任意位置点击鼠标左键,则以该点为圆心,出现一个黑色圆圈,同时弹出点查询窗口,窗口则显示为圆心点的信息。图7是使用点数据查询功能点后显示的数据信息。 图7 点数据查询 此外还有放大缩小,各视图窗口的显隐性设置,读取数据库中沿河建筑物信息并显示等功能。 本文通过Supermap iObjects组件和Visual Studio 2017并结合实际案例针对目前GIS软件难以满足本地需求的问题,开发设计了洪水演进动态可视化系统,实验结果表明能实现动态可视化,实时监测查询点面信息等预期功能;简化了界面和转换数据的步骤,能达到提高使用者工作效率的问题;支持从数据源导出数据,且可批量导出。但是在开发中还存在很多问题,数据处理方面,目前对一些误点还需要手动修改,没有实现自动检测删除;程序设计方面,程序的性能和响应速度方面没有达到最优,部分语句如Application.DoEvents()等可利用多线程的方法提高相应速度,也避免多次使用该语句导致程序崩溃;导出数据目前只支持导出为shp格式,需要对此进行拓展补充;本系统目前只能在电脑端本地运行,不能在网页或移动端上使用,使用不够便捷,这一点也是后期需要改善的。3 试验结果与功能介绍
4 结论与展望