访问地理信息系统论坛  |  访问GIS开发者社区 
 


洪水风险图制作与管理系统开发实战
                    
 作者:Jeffry Lee


   洪水风险图是指标识有关洪水风险信息的一系列图的总称,直观反映某一区域遭遇洪水时的风险信息专题,主要应用于防洪减灾、社会保险、全民防洪意识教育等领域,并为社会提供洪水风险信息。洪水风险图是实行洪水风险管理的重要技术支撑,在国际上和国内都得到了不同程度的开发和运用。

  洪水风险图是指标识有关洪水风险信息的一系列图的总称,直观反映某一区域遭遇洪水时的风险信息专题,主要应用于防洪减灾、社会保险、全民防洪意识教育等领域,并为社会提供洪水风险信息。洪水风险图是实行洪水风险管理的重要技术支撑,在国际上和国内都得到了不同程度的开发和运用。
  现在,洪水风险图制作已成为防汛指挥部门为了满足自身业务工作需求而急待全面推开的一项基础性工作。2004年,国家防办已经组织编写了《洪水风险图编制导则(试行)》(下称《导则》),安排了一些试点,并下发了《洪水风险图试点项目成果初步要求》(下称《试点要求》)对试点工作进行指导,同时也对试点工作提出了具体要求。正是依靠规范性的要求的指导,在实际项目开发过程中本文主要讨论洪水风险图制作与管理平台的开发,以期抛砖引玉。

一、集成多源数据
  全国各水利部门在初次提交的数据中,察尔森水库的数据制作软件为MapGIS;哈尔滨为ArcGIS,数据类型为Shape;拉海堤防和胖头泡蓄滞洪区为AutoCAD,提交的数据类型为DWG或者DXF。洪水风险图数据量大,数据类型多样,来源广泛。系统需要能够管理不同来源、不同类型、不同平台的数据,进行有效的无缝集成。
  本系统充分利用了SuperMap Objects的数据集成能力,首先完成了多源数据入库统一管理的功能,为建立风险图管理系统打下了基础。


图1.1 支持的矢量数据导入格式

图1.2 支持的栅格数据导入格式

二、制作风险图
  根据《导则》和《试点要求》,洪水风险图制作与管理平台在管理数据的基础上,还应能够制作江河湖泊洪水风险图、蓄滞洪区洪水风险图和水库洪水风险图等类型及其子类型。这一系列的功能主要包括三个方面:
  第一,由于《导则》的规范层次比较清晰,对于数据集元数据的管理提供很好的基础标准。在此基础上制定了用于对数据集类型管理的元数据维护数据结构,从而设计出数据的分层结构。

图2.1 数据集类型信息维护结构

  表Dataset记录所有的规范条目,并依照其层次划分右侧的三张层层深入展开的表格。这三张表的意义在于将Dataset的数据分层展开,便于开发时利用。
  该接口主要完成对于数据集类别的管理的操作功能。功能接口如下图:

图2.2 新建数据集时的操作界面 图2.3 对已有数据集重新分类的界面

  第二,针对各种类型的风险图,系统应当根据各类洪水风险图需要的基础信息数据、防洪工程数据、风险信息数据以及避险信息数据,制作相应的数据集,并且自动在创建数据集时连同规范中提供的字段创建成功。


图2.4 数据集类型与属性字段信息的关联

  Dataset中的Property字段存放的字段名,而详细的字段信息在第二张表中进行维护。根据这样的关联将属性字段相关的信息与规范相结合,完成了这一由静态数据实现动态操作的功能。
  第三,在配置风险图的工作中,同样需要按相关国家标准和行业标准以及自定义的标准,将各图层按标准表现风格展现出来,形成洪水风险图。它的维护数据结构如下图:


图2.5 数据集类型与默认显示风格的对照

  通过ADO访问数据库获得Style中符合某一规范唯一对应的记录,获得每个风格对象属性,然后根据数据集几何对象的差别设置已经创建的soStyle对象。再将该对象返回给打开的图层  soLayer.Style。代码如下,可供参考:*Rs为查询出的ADO.Recordset对象的实例。
Select Case dtType
'点===================
Case scdPoint
cutStr = Trim$(Rs.Fields("BrushColor").Value) '返回BrushColor
objStyle.BrushColor = cutStr
objStyle.SymbolRotation = Trim$(Rs.Fields("SymbolRotation").Value) '返回SymbolRotation
objStyle.SymbolSize = Trim$(Rs.Fields("SymbolSize").Value) '返回SymbolSize
objStyle.SymbolStyle = Trim$(Rs.Fields("SymbolStyle").Value) '返回SymbolStyle
GetStyle = True

'线===================
Case scdLine
objStyle.PenColor = Trim$(Rs.Fields("PenColor").Value) '返回PenColor
objStyle.PenStyle = Trim$(Rs.Fields("PenStyle").Value) '返回PenStyle
objStyle.PenStyle = Trim$(Rs.Fields("PenWidth").Value) '返回PenWidt h
GetStyle = True

'面===================
Case scdRegion
cutStr = Rs.Fields("BrushColor").Value '返回BrushColor
objStyle.BrushColor = cutStr
objStyle.BrushBackColor = Rs.Fields("BrushBackColor").Value'返回BrushBackColor
objStyle.BrushOpaqueRate = Rs.Fields("BrushOpaqueRate").Value'返回BrushOpaqueRate透明度
objStyle.BrushStyle = Trim$(Rs.Fields("BrushStyle").Value) '返回BrushStyle
objStyle.PenWidth = Trim$(Rs.Fields("PenWidth").Value) '返回PenWidth
objStyle.PenStyle = Trim$(Rs.Fields("PenStyle").Value) '返回PenStyle
objStyle.PenColor = Trim$(Rs.Fields("PenColor").Value) '返回PenColor
GetStyle = True
End Select
  同时在达到显示目的同时,考虑到初始化数据以及规范变更的可能,设计了根据规范添加和修改风格设置的功能接口。原理和上一功能类似,只是检查了Style表中是否存在某类风格,进行添加或者修改。


图2.6 修改标准默认显示风格操作界面

  通过该功能的设计,减少了系统初始化时对于数据维护的工作繁杂度,同时对于规范在实际应用中进行的修改提供了敏捷的应对方式。避免了对数据库的直接操作带来的不确定性,通过效果的显示使风格更加直观。

三、输出纸质图
  根据工作需要,很多情况下洪水风险图还需要以纸质图的形式输出。因而,系统应当支持多种纸质图布局的制作,支持多种型号的打印机和绘图仪,并且可以根据设计纸面的大小进行智能分页打印;也支持将布局输出到整张位图或分页输出到位图。
  另外在制作的过程中提供了常用的模板制作方式,大大提高了制作布局的工作效率。也为正确的对布局的元数据维护工作提供了良好的设置环境。一个布局的创建一步完成。

图3.1 利用模板输入信息动态生成布局

  主要思路是调用事先制作好的布局模板,代码如下:
strTemplateName1 = App.Path & "\..\Resources\Standard.slt"
LyOpen = FrmFileEdit.MainLayout.LoadTemplate(strTemplateName1)
然后通过操作界面设置模板中每一个布局元素显示的信息(备注:布局上的投影信息是从系统使用的数据源中获取到的)。
四、导入计算数据
  在实际数据采集的过程中,野外工作人员会提交很多这样的数据,包含坐标、高程、水流速、流量等等。而在同一个点采集的数字量化指标可能有很多,甚至上百种。而实际分析时,需要通过所有采集的点根据某一个指标进行空间差值,生成一个Grid数据,再对这个数据集进行例如表面分析,淹没分析等。根据这个功能需求,设计实现了计算数据直接导入的功能接口。它的特点是,支持多点数据的快速导入,多列字段的自动创建。提供灵活的参数设置接口,进行空间插值。
'文本转为点数据集TextToPoint()
‘===============================
……定义其他对象
Dim objFielSys As New FileSystemObject
Dim objFileRead As File
Dim objTextStream As TextStream
‘================================
Set objDtV = objDs.CreateDataset(strTempPoint, scdPoint, scoDefault)'建立临时点数据集
Set objRst = objDtV.Query("", True)'查询得到记录集
strFileName = Trim$(Me.txtText.text)'得到文件路径
Set objFileRead = objFielSys.GetFile(strFileName)
Set objTextStream = objFileRead.OpenAsTextStream(ForReading)'完成将文本文件打开

If objTextStream Is Nothing Then
MsgBox "数据错误!", vbInformation, "提示"
Exit Sub
End If
lnum = CSng(txtNum)
ReDim TB(lnum)
Do While Not objTextStream.AtEndOfStream
strLine = objTextStream.ReadLine '读取每一行的数据
'提取数据信息
If iCount = 1 Then
For i = 1 To lnum
a = InStr(strLine, Chr(9))
Debug.Print a
If a < 1 Then Exit For
strTmp1 = Mid(strLine, 1, a - 1)
'将提取的第一行的信息创建为属性表字段
objFieldInfo.name = Trim(strTmp1)
objFieldInfo.Type = scfDouble
objDtV.ClearRecordsets
b = objDtV.CreateField(objFieldInfo)
objRst.Update
strLine = Trim(Mid(strLine, a + 1))
Next
'添加提取的最后一个属性信息
objFieldinfo1.name = strLine
objFieldinfo1.Type = scfDouble
objDtV.ClearRecordsets
b = objDtV.CreateField(objFieldinfo1)
objRst.Update
iCount = iCount + 1
Set objRst = objDtV.Query("smid<0", True) '获得数据集的记录集
ElseIf iCount > 1 Then
'定义变量存放取得的属性信息
Dim Num As Long
Dim j As Long
For i = 1 To lnum
a = InStr(strLine, Chr(9))
If a < 1 Then
TB(i - 1) = CDbl(strLine)
Exit For
End If
strTmp2 = Mid(strLine, 1, a - 1)
strLine = Trim(Mid(strLine, a + 1))
TB(i - 1) = CDbl(strTmp2)
Next
'创建点对象
objGeoPt.X = TB(1)
objGeoPt.Y = TB(2)
'添加点对象并更新属性数据集
If objRst.AddNew(objGeoPt) <> -1 Then
For j = 1 To lnum
b1 = objRst.SetFieldValue(j + 2, TB(j - 1))'仅对于文件型数据源
Next j
objRst.Update
Else
MsgBox objEr.LastErrorMsg, vbInformation, "提示"
End If
End If
Loop
  以上完成了数据导入的操作,之后的工作就是进行插值,使用Interpolation.IDW()方法;下一步是生成等值线,使用SuperGridAnalyst.Contour();生成面的功能是通过SuperGridAnalyst.GridToRegion()实现的。

五、管理洪水风险图
  洪水风险图分为江河湖泊洪水风险图、蓄滞洪区洪水风险图、水库洪水风险图三类。江河湖泊洪水风险图是指包括河道、堤防、城市在内的洪水风险图;蓄滞洪区洪水风险图在试点阶段主要针对国家级或省级蓄滞洪区;水库洪水风险图是指库区在某些特征水位、溃坝、最大泄量等情况下的洪水风险图。洪水风险图平台需要将各种洪水风险图集成到系统中,统一管理。

图5.1 松辽流域洪水风险图试点分布及其已编制洪水风险图

  上图是在所有风险图模块中显示的地图,以及标示出某一个已经存在制作完好地图的试点的地理位置。在这个地图中包含了一个特殊的图层——“示例图层”,存放了很多形状大小完全一致的面对象。每个对象的都有存放地图名称的属性字段,在SuperMap_MouseMove时可以对该图层进行空间查询,代码如下:
  Set objRecordset = objDt.QueryEx(objGeoPoint, scsPointInPolygon, "")
  将查询出的地图名称显示在列表中,双击某一个地图名后切换到该地图所属类型的管理模块中进行浏览查询工作。

六、凸显洪水风险信息
  对于洪水风险信息的表现,需要系统提供丰富的专题风险图类型,凸显江河湖泊、蓄滞洪区、水库洪各类洪水风险图中的洪水风险信息,如洪水淹没最大水深、洪水最大流速、洪水到达时间、洪水淹没历时,以及突出显示需要凸显的被淹对象等。


图6.1 利用空间插值数据制作的动态演示流域淹没范围变化的视频

  洪水风险图制作与管理系统通过将数据制作与地图配置,再到查询分析一系列工作完整的统一到一起。避免了普遍的数据制作、地图配置、分析查询分别在各自平台上完成,所造成的数据转换工作量大,设立数据业务规范的二次制作等问题,提高了工作效率,很好的保证了数据完整性。
  系统从始至终遵循了《导则》的要求,从数据到业务逻辑都紧紧地围绕了行业的特性,最大限度的发挥了系统对于提高防洪减灾工作质量的促进作用。
  在开发的过程中,遵循最大限度提高工作效率和紧紧把握行业规范特性的原则,对每一个功能进行设计。虽然总体设计上看,系统囊括了SuperMap Deskpro的很多功能,甚至可以是将SuperMap Deskpro中的功能拆散,然后重新组合而成。但是通过重新的组合,形成了一个在行业中精炼实用的架构。
  另外,在对每个细节功能的设计时,发挥了以SuperMap Deskpro功能路线为指导,SuperMap Objects功能接口为程序设计核心,以满足业务逻辑及基层人员工作习惯的要求为前提,设计制作的功能才能被行业用户所接受认可。
  本文介绍了几个功能接口的设计思路,以及实现方案也是在与客户接触的过程中经常会涉及的问题,在此提出和各位GIS同仁做一分享。相信随着洪水风险图制作与管理系统在全国水利行业,特别是防洪减灾相关单位中得到应用之后,会更加贴近行业需求,实用的应用系统会不断走向成熟,为提高工作效率和管理决策精度提供越来越强有力的支持。


  

  关于我们  |  订阅杂志  |  投稿须知      版权所有© 2006 中国科学院地理信息产业发展中心 《GIS开发者》编辑部