FloodAnalysisReport
Abstract
Submergedinwatertodeterminethescopeandvisualizationisacorepartoffloodcontrolandflooddamageassessment,XXX,andonthisbasistoanalyzetheimpactofflooding,thestatisticaldatarelatedtocalculationofthefloodedareatoprovideacertaindegreeofdecision-makingthree-dimensionalfloodcontrolsupported....
Keywords:ArcEngine;TIN;ArcGIS;
课程设计
第1章前言
1.1研究课题背景
我国是一个自然灾害十分频繁的国家,洪涝灾害一直严重威胁着人民生命财产安全和社会的稳定与发展。近几十年来,自然资源的开发利用不断扩大,城乡经济建设飞速发展,洪水出现的频率及其造成的损失也不断的增加。因此,快速、准确、科学地模拟、预测和显示洪水淹没范围,以便发挥防洪工程效益,并以非工程措施来减轻洪水危害,对防洪减灾具有重要意义。别是对于城市和蓄滞洪区,如果能够预先获知洪水的淹没范围和水深的分布情况,对于挽救人民的生命财产和减少洪涝灾害损失都具有十分重要的价值。获取洪涝灾害范围和该范围内相对准确的水深分布对洪涝灾害评估和经济损失评估也具有重要的意义。
1.2研究的内容
洪水淹没是一个很复杂的过程,受多种因素的影响,其中洪水特性和受淹区的地形地貌是影响洪水淹没的主要因素。对于一个特定防洪区域而言,洪水淹没可能有两种形式,一种是漫堤式淹没,即堤防并没有溃决,而是由于河流中洪水水位过高,超过堤防的高程,洪水漫过堤顶进入淹没区;另一种是决堤式淹没,即堤防溃决,洪水从堤防决口处流入淹没区。无论是漫堤式淹没还是决堤式淹没,洪水的淹没都是一个动态的变化的过程。
针对目前防洪减灾的应用需求,对于洪水淹没分析的要求可以概化为两种情况,一是在某一洪水水位条件下,它最终会造成多大的淹没范围和怎样的水深分布,这种情况比较适合于堤防漫顶式的淹没情况。另外一种情况是在给定某一洪量条件下,它会造成多大的淹没范围和怎样的水深分布,这种情况比较适合于溃口式淹没。对于第一种情况,需要有维持给定水位的洪水源,这在实际洪水过程中是不可能发生的,处理的办法是可以根据洪水水位的变化过程,取一个合适的洪水水位值作为淹没水位进行分析。对于第二种情况,当溃口洪水发生时,溃口大小是在变化的,导致分流比也在变化。另外一般都会采取防洪抢险措施,溃口大小与分流比在抢险过程中也在变化,洪水淹没并不能自然地发生和完成,往往有人为防洪抢险因素的作用,如溃口的堵绝,蓄滞洪区的启用等。这种情况下要直接-1-
课程设计
测量溃口处进入淹没区的流量是不大可能的,因为堤防溃决的位置不确定,决口的大小也在变化,测流设施要现场架设是非常困难也是非常危险的。所以实际应用时,考虑使用河道流量的分流比来计算进入淹没区的洪量。
第2章系统架构
2.1实现的基本原理及技术路线
2.1.1.实现的基本原理
通过对数字高程模型数据的获取和分析,建立数字高程模型(DEM)。在建立的DEM模型的基础上,并在数据库的支持下,进行洪水淹没分析。洪水淹没分析可以根据给定的洪水位进行计算,得到洪水淹没分析结果。
2.1.2.技术路线
利用GIS技术进行相关处理,应用自身功能,求的低于一定高程的洪水淹没范围,从而计算洪水淹没面积。
由于3D点多采用的沿等高线采点,因此在等高线密集的地方采点较多,等高线稀疏的地方采点少,这样能很好的表示地形的高低起伏,又能有效地减少数据冗余。针对一个特定地区的洪水淹没分析,为了减少数据量和便于分析,一般根据洪水风险,预先圈定一个最大的可能淹没范围,这样处理对于防洪减灾来说是合理的。
系统的框架图如下图1所示:
课程设计
图1系统框架图
2.2系统的实现
2.2.1.应用地理信息系统的优越性
1)地理信息系统是管理空间信息的最佳选择
就传统意义上的数据库而言,无论是Fo_PRO,还是le,Sybase,它们管理的信息类型主要是文字和数字,对图形的管理功能则十分薄弱。众所周知,地理信息系统的数据库包括图形和属性两部分,图形数据库主要负责点(point)、线(line,arc)、面(surface)、体(body)等图形实体的管理,而各类图形实体的属性管理则由Fo_PRO,le等数据库来承担。事实上,人类对地球三维空间中任意实体的表达,应该是图形和属性的并集,这样,才能对物体进行较为精确的描述。所以,只有地理信息系统才能对空间目标进行有效的描述。
2)地理信息系统不仅是一个管理系统,而且还是一个分析系统
对地理信息系统而言,不仅图形实体具有属性信息、拓扑关系,
而且还有大量的分析模型。-3-
课程设计
所以,人们不仅能够得到图形信息,而且还可以图文并茂地对地学现象进行分析研究,为决策提供依据。例如,利用GIS系统的图形和数字高程模型(DEM),可以圈定环境的污染范围和程度,得到地形的坡向图,计算矿体的储量。
2.2.2.洪水淹没面积的计算
1)给定洪水水位下的淹没分析。选定洪水水源入口,设定洪水水位、选出洪水水位以下
的三角单元,从洪水入口单元开始进行三角格网连通性分析,能够连通的所有单元即组成淹没范围,得到连通的三角单元,对连通的每个单元计算水深W,即得到洪水淹没水深分布,图3是基于三角单元格网模型在给定洪水水位条件下的淹没分析。
2)给定洪量(Q)条件下的淹没分析。进行灾前预评估分析时可以根据可能发生的情况
给定一个洪量,或者取洪水频率对应的流量的百分数。评估分析时洪量Q值可以根据流量过程曲线和溃口的分流比计算得到,有条件的地方,可以实测,不能实测的可以根据上下游水文站的流量差,并考虑一定区间来水的补给误差计算得到。
2.2.3.系统模块
系统的开始界面
课程设计
图2系统的开始界面
TIN是地表或空间现象起伏变化的数字表示,包含了地球表面许多有用的地理信息,其中就包括水文信息。通过TIN来生成地表水淹没分析统计模型具有最形象化的特点如下图所示:
课程设计
图3淹没分析
系统统计表单模块如下图4所示:
图4系统表单
课程设计
2.2.4.系统功能实现关键技术
该系统中三维场景都是通过在TIN的表面进行内插实现的。对于场景中的水位线,它是通过数据文件中的记录的最高水位线,通过接口查询功能在contournngrid22获取相应的数据,从这些查询到的特征数据中来获取几何,为内插提供几何数据。场景中现实的洪水淹没范围是由已有的二维的数据在表面内插所得。
图1系统淹没分析
第3章结束语
基于DEM的洪水淹没分析可以解决上述两种洪水最终淹没范围和水深分布的问题,但由于DEM数据量大,对于较大范围的洪水淹没分析,在目前的计算机硬件技术水平上还不能较快地计算出结果,这对于防洪减灾决策实施等方面,这种计算速度是不能忍受的。格网模型的思想很早就已经提出,并且在各个领域得到广泛的应用,如有限元计算的离散单元模型,目前所能见到的较先的洪水模拟演进模型(如陆XX的水动力洪水演进模型)也是一种格网化的模型。基于空间展布式社会经济数据库的洪涝灾害损失评估模型也是基于格网模型的思想(见李等人的相关文章)。
由于格网本身对模型概化的优越性,-7-
课程设计
同时考虑到与洪水演进和洪涝灾害损失评估模型更好地结合,所以采用基于格网的洪水淹没分析模型是比较好的选择。
3.1系统的不足
没能做成web版发布到网上,有些功能不够完善
3.2核心代码:
publicpartialclassForm1:Form
publicForm1()
InitializeComponent();
privateI3DPropertiesp3D
/I3DProperties控制访问三y维特性的接口
IFeaturepFeature=null;
IFeatureLayerpLayer=null;
intinde_;
ITinptin;
DataRowdr;
DataTabledt=newDataTable();
privatevoidForm1_Load(objectsender,EventArgse)
stringpath=XXX;
/XXX(path);
path=path+"图.s_d";
XXX.LoadS_File(path);
XXX"5";
XXX"5";
XXX
-8-=null;new
课程设计
XXXXXX(a_SceneControl_OnMouseWheel);
/实现滚轮缩放
privatevoida_SceneControl_OnMouseWheel(objectsender,MouseEventArgse)
XXXXXX
XXX(XXX.Location);
XXX.PointPt=XXX(XXX);
if(Pt._pSceLoc._+XXX.YpSceLoc.Y+XXX)
return;
doublescale=0.2;
if(XXX<0)scale=-0.2;
ICamerapCamera=XXX;
IPointpPtObs=XXX;
IPointpPtTar=XXX;
pPtObs._+=(pPtObs._-pPtTar._)scale;
pPtObs.Y+=(pPtObs.Y-pPtTar.Y)scale;
pPtObs.Z+=(pPtObs.Z-pPtTar.Z)scale;
XXX;
XXX.RefreshViewers();
catch
-9-=
课程设计
doublezz=1100-888.2165;
privatevoidtimer1_Tick(objectsender,EventArgse)
if((double)(XXX(inde_))>1800)/高程值超过y1800则山谷被淹没
XXX(inde_,1100);
toolStripXXX"淹没完成";
XXX;
else
XXX(inde_,XXX(XXX(inde_).ToString())+
XXX(XXX));/高程值加10
XXX.esriBaseE_pression;
p3D.BaseE_pressionString=XXX(inde_).ToString();
XXX(pLayer);
XXX.RefreshViewers();
toolStripXXX"洪水淹没进行D中D......";
ISurfacepSurface=ptinasISurface;
zz=zz+XXX(XXX);
doublearea=XXX(zz,
XXX);
doublevolum=XXX(zz,XXX);
dr=XXX();
dr["高程(m)"]=XXX();
课程设计
dr["面积y(mm)"]=XXX();
dr["容Y积y(mmm)"]=XXX();
XXX.Add(dr);
/XXX]=XXX();
XXX;
privatevoidcheckBo_1_CheckedChanged(objectsender,EventArgse)
if(XXX)
XXX;/设置
计时器运行D
else
XXX;
privatevoidtimer2_Tick(objectsender,EventArgse)
XXX.Rotate(XXX(XXX));/按照给定的角度旋y转a
XXX();
课程设计
privatevoidbutton1_Click(objectsender,EventArgse)
stringsFileName;
SaveFileDialogpSaveFile=newSaveFileDialog();
XXX"保存图片";
XXX"BMP图片(.bmp)|.bmp|JPEG图片(.jpg)|.jpg|TIF图片(.tif)|.tif";
XXX();
sFileName=XXX;
if(XXX)
XXX.GetScreenShot(XXX,sFileName);}
else
if(XXX)
XXX.GetScreenShot(XXX,sFileName);}
XXX("成功|保存图片至:"+sFileName);
catch
XXX("出现错误返回");
课程设计
privatevoidbutton2_Click(objectsender,EventArgse)
IScenepScene=XXX.Scene;/IScene提供访问和控制场景的接口
IEnumLayerpEnumLayer=XXX(null,true);
pLayer=(IFeatureLayer)XXX();
XXX"洪水淹没进行D中D......";
while(pLayer!=null)
/XXX(XXX);
if(XXX=="水面")
IFeatureClasspFeaClass=XXX;
pFeature=XXX(0);
inde_=XXX.FindField("高程");
XXX;
break;
else
pLayer=(IFeatureLayer)XXX();
ILayerE_tensionspLayerE_ts=pLayerasILayerE_tensions;
for(inti=0;iI3DPropertiespDDD=XXX(i)asI3DProperties;if(pDDD!=null)
课程设计
p3D=pDDD;
ITinLayerpTinLayer;
pTinLayer=XXX.get_Layer(2)asITinLayer;
ptin=XXX;
XXX.Add("高程(m)",typeof(string));
XXX.Add("面积y(mm)",typeof(string));
XXX.Add("容Y积y(mmm)",typeof(string));
/IWorkspaceFactorypWSFact=newTinWorkspaceFactoryClass();
/IWorkspacepWS=XXX(XXX,0);/ITinWorkspacepTinWS=pWSasITinWorkspace;
/ITinpTin=XXX("dtm_tin");
privatevoidcheckBo_2_CheckedChanged(objectsender,EventArgse)
publicvoida_SceneControl1_OnMouseDown(objectsender,ISceneControlEvents_OnMouseDownEvente)
/boolflag=false;
privatevoidbutton1_Click_1(objectsender,EventArgse)
XXX;
课程设计
/if(flag==false)
/timXXX;
/XXX"继续";
/flag=true;
/else
/XXX;
/flag=false;
/XXX"停止1";
privatevoidbutton4_Click(objectsender,EventArgse)
XXX;
privatevoidbutton3_Click(objectsender,EventArgse)
stringsFileName;
SaveFileDialogpSaveFile=newSaveFileDialog();
XXX"保存图片";
XXX"BMP图片(.bmp)|.bmp|JPEG图片(.jpg)|.jpg|TIF图片(.tif)|.tif";
XXX();
sFileName=XXX;
课程设计
if(XXX)
XXX.GetScreenShot(XXX,sFileName);}
else
if(XXX)
XXX.GetScreenShot(XXX,sFileName);}
XXX("成功|保存图片至:"+sFileName);
catch
XXX("出现错误返回");
privatevoida_TOCControl1_OnMouseDown(objectsender,ITOCControlEvents_OnMouseDownEvente)
privatevoidbutton5_Click(objectsender,EventArgse)
XXX(dataGridView1);
privatevoiddataGridView1_CellContentClick(objectsender,DataGridViewCellEventArgse){