CN102495859B - 基于ArcGIS Engine的水文复杂数据类型扩充方法 - Google Patents

基于ArcGIS Engine的水文复杂数据类型扩充方法 Download PDF

Info

Publication number
CN102495859B
CN102495859B CN201110373406.0A CN201110373406A CN102495859B CN 102495859 B CN102495859 B CN 102495859B CN 201110373406 A CN201110373406 A CN 201110373406A CN 102495859 B CN102495859 B CN 102495859B
Authority
CN
China
Prior art keywords
complex data
data type
interface
hydrology
hydrologic
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201110373406.0A
Other languages
English (en)
Other versions
CN102495859A (zh
Inventor
吴晓玲
向小华
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hohai University HHU
Original Assignee
Hohai University HHU
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hohai University HHU filed Critical Hohai University HHU
Priority to CN201110373406.0A priority Critical patent/CN102495859B/zh
Publication of CN102495859A publication Critical patent/CN102495859A/zh
Application granted granted Critical
Publication of CN102495859B publication Critical patent/CN102495859B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Processing Or Creating Images (AREA)

Abstract

本发明公开了一种基于ArcGIS Engine的水文复杂数据类型扩充方法,以ArcGIS Engine的组件对象模型为基础,构建一种可以容纳自定义水文复杂数据类型对象的组件模型。本发明首先提取出水文复杂数据类型的公共特征,定义水文复杂数据类型的接口,构建能容纳所定义接口数组的水文图层,然后采用面向对象的思想构建模型。本发明减少了专业模型编制人员处理数据的复杂度,有别于现有地理信息系统常用点、线、面图层的复杂拓扑组合来表达复杂地理对象的方法,提供了一种将现有地理信息系统与专业模型紧密耦合的途径,将促进地理信息系统与专业模型真正意义上的融合。

Description

基于ArcGIS Engine的水文复杂数据类型扩充方法
技术领域
本发明涉及一种基于ArcGIS Engine的数据类型扩充方法,尤其涉及一种水文复杂数据类型扩充方法,属于地理信息系统数据模型领域。
背景技术
地理信息技术与地理学相关学科的交叉研究已成为趋势,在水文学科领域基于数字地球的思想提出了数字流域的概念,期待将水文现象与现代地理信息技术相结合,进一步推动水文学的研究。数字流域体系一般分为三层:数据层、模型层和应用层。
在数据层方面,现代数字流域技术已能将庞大的地理观测数据、水文观测数据以大型数据库存储,进而用地理信息系统以图形化的方式进行表达,通过形象、直观的图形展示庞大的水文地理数据,清晰地表达水文数据的空间分布特征和时间分布规律等信息,并能对水文过程做出复杂的定量分析,极大地推动了水文学的发展。
在模型层和应用层方面,水文学所涉及的专业模型也需要地理信息系统支撑,以便改进模型结构和提升模型精度,这就需要将水文模型与地理信息系统建立耦合关联。目前水文模型与地理信息系统耦合主要还是一种松散的集成模式,即首先通过专业地理信息系统软件为水文专业模型处理数据,然后将处理好的数据输出到中介数据库中,水文模型读取中介数据后运行,模型计算的结果也保存在中介数据库中,由地理信息系统软件读取显示计算结果。如目前在ArcGIS平台下的HEC_GeoRas、HEC_GeoHMS、ArcHydro等软件皆是这种模式,在这个过程中水文模型和地理信息系统软件没有实现紧密耦合,两者分别独立运行,不能做到真正意义上的可视化构模,也难以做到模型计算结果的实时分析和参数的实时调整,模型运行花费大量时间在中间过程的存储和读取上,给模型完善带来很大困难,给决策支持等应用层也带来很大复杂度。
解决问题的有效方法是将水文模型和地理信息系统完全紧密耦合,使得地理信息系统对模型的修改达到所见即所得,两者之间不需要通过外部介质交换。要实现这一目标就要求地理信息系统与模型的数据结构一致,从底层开发适合水文的GIS软件系统可以很轻易地实现这一目标,然而从底层开发难度和耗费非常大,而现有的最强大的商业GIS软件ArcGIS的数据结构又很难与水文模型的数据结构匹配,不满足要求。
发明内容
本发明所要解决的技术问题是针对现有商业软件ArcGIS数据结构不满足水文模型需求,以ArcGIS Engine组件为基础,提出一种水文复杂数据类型的扩充方法,解决ArcGIS软件与水文模型紧密耦合的问题,使得基于此建立的数字流域体系在模型层和应用层更简洁、高效。
本发明为解决上述技术问题采用以下技术方案:
一种基于ArcGIS Engine的水文复杂数据类型扩充方法,包括以下步骤:
步骤1:首先提取出水文复杂数据类型的公共特征,其次按照微软COM组件技术标准定义包含上述公共特征的抽象接口;所述公共特征为能够充分反映水文数据类型共同的信息特征;
步骤2:在步骤1中定义的抽象接口基础上,采用软件工程中面向对象的方法从中派生具体的水文复杂数据类型,在派生出的水文复杂数据类型中实现步骤1中定义的所有公共特征; 
步骤3:按照ArcGIS Engine组件的要求构建水文图层,该水文图层须能容纳步骤2得到的包含水文复杂数据类型接口的数组; 
步骤4:根据水文模型的构建需求和面向对象的方法,建立步骤2定义的具体水文复杂数据类型的对象,然后将其加入到步骤3构建的自定义水文图层中;
步骤5:将步骤4中包含有水文复杂数据对象的自定义水文图层加入到ArcGIS地图中显示。
作为本发明进一步的优化方案,步骤1所述水文数据类型共同的信息特征包括:水文复杂数据类型对象的名称、地图符号、显示范围、编号属性,以及绘图方法、点击测试方法、选择方法。
作为本发明的进一步优化方案,步骤3的具体步骤如下:
步骤a,定义一个能管理步骤1所述抽象接口数组的水文图层接口,该接口中的函数包括增加、删除、查找函数;
步骤b,按照ArcGIS Engine技术文档中的规定,采用微软COM组件技术实现一个自定义的水文图层,该水文图层可实现步骤a定义的水文图层接口,也同时能实现ArcGIS软件认可的标准接口。
作为本发明的进一步优化方案,步骤1中采用C语言的语法和IDL文件的格式定义包含所述公共特征的抽象接口类型。
本发明采用以上技术方案与现有技术相比,具有以下技术效果:
本发明提出的方法不仅适用于水文专业领域的复杂数据类型扩充,也适用于地质、采矿、交通等与地理密切相关领域的数据对象的扩充,具有良好的扩展度,使得各专业领域模型系统能够借助强大的地理信息系统技术,推动模型的完善和降低复杂模型的使用难度。
附图说明
图1是本发明的流程框图。
图2是河道类和接口之间的关系图。
图3是图层类和接口之间的关系图。
图4是地图和图层、河道对象之间的相互关系图。
图5是图形绘制和存储函数调用过程图。
具体实施方式
下面结合附图对本发明的技术方案做进一步的详细说明:
本实例以Windows XP SP2及以上为操作系统环境,Visual Studio 2008 SP1为开发环境,C++为开发语言,ArcGIS Engine组件系统为平台,微软COM组件技术为技术手段。
如图1所示,本发明的具体实施步骤如下:
步骤1,通过对水文中常用专业模型的分析,归纳出一般水文复杂数据对象的公共特征包括对象的名称、地图符号、显示范围、编号等属性,还包括绘图、点击测试、选择等方法。
基于微软COM组件模型,构建包含上述特征的抽象接口类,一个以c语言表达的抽象接口类如下: 
       interface IBaseFeature : IUnknown
{
              [propget, helpstring("属性Name")] HRESULT Name([out, retval] BSTR* pName);
              [propput, helpstring("属性Name")] HRESULT Name([in] BSTR newName);
              [propget, helpstring("属性Envelope")] HRESULT Envelope([out, retval] IEnvelope** pVal);
              [helpstring("方法Draw")] HRESULT Draw([in] IDisplay* Display);
              [helpstring("方法HitTest")] HRESULT HitTest([in] DOUBLE x, [in] DOUBLE y, [in] DOUBLE tolerance);
              [propget, helpstring("属性ID")] HRESULT ID([out, retval] LONG* pVal);
              [propput, helpstring("属性ID")] HRESULT ID([in] LONG newVal);
              [propget, helpstring("属性Geometry")] HRESULT Geometry([out, retval] IGeometry** pVal);
              [propput, helpstring("属性Geometry")] HRESULT Geometry([in] IGeometry* newVal);
       };
步骤2,在步骤1定义的抽象通用接口基础上,采用软件工程中面向对象的思想从接口派生具体的水文复杂对象类,在该具体的类中实现接口中定义的所有公共特征。河道也是水文模型中一种复杂的数据类型,由一个河道边界的面区域和内部的大量断面组成。
以河道为例,从步骤1中得接口派生河道类,该类中实现接口中定义的所有方法,为了河道数据的存储,河道类也从IPersistStream类派生,河道类和接口之间的关系如图2,实现的部分方法如下:
class ATL_NO_VTABLE CRiver1D :
       public CComObjectRootEx<CComSingleThreadModel>,
       public CComCoClass<CRiver1D, &CLSID_River1D>,
       public IBaseFeature,
public IPersistStream
{
       STDMETHOD(get_Name)(BSTR* pName);
       STDMETHOD(put_Name)(BSTR newName);
       STDMETHOD(get_Envelope)(IEnvelope** pVal);
       STDMETHOD(Draw)(IDisplay* Display, ITrackCancel* TrackCancel);
       STDMETHOD(HitTest)(DOUBLE x, DOUBLE y, DOUBLE tolerance, VARIANT_BOOL* hit);
       STDMETHOD(get_ID)(LONG* pVal);
       STDMETHOD(put_ID)(LONG  newVal);
       STDMETHOD(get_Geometry)(IGeometry** pVal);
       STDMETHOD(put_Geometry)(IGeometry* newVal);
……………………………………………………………..
}
STDMETHODIMP CRiver1D::get_Name(BSTR* pName)
{
       *pName = SysAllocString(m_bstrName);
       return S_OK;
}
STDMETHODIMP CRiver1D::put_Name(BSTR newName)
{
       ::SysReAllocString(&m_bstrName, newName);
       return S_OK;
}
步骤3,首先定义一个能管理步骤1中抽象接口数组的水文图层接口,该接口中的函数必须包括增加、删除、查找等函数,能对水文复杂数据类型接口数组进行有效管理。
以c语言表达的水文图层接口如下:
       interface IHydroLayer : IUnknown
{
              [helpstring("方法AddFeature")] HRESULT AddFeature([in] IBaseFeature* pFeature);
              [helpstring("方法DeleteFeature")] HRESULT DeleteFeature([in] IBaseFeature* pFeature);
              [propget, helpstring("属性FeatureCount")] HRESULT FeatureCount([out, retval] LONG* pVal);
              [propget, helpstring("属性Feature")] HRESULT Feature([in] LONG nIndex, [out, retval] IBaseFeature** pVal);
       };
其次按照ArcGIS Engine技术文档中的规定,采用微软COM组件技术实现一个自定义的图层,该图层必须实现ArcGIS软件认可的几个标准接口,并同时实现前面定义的水文图层接口。为了图层的存储,该图层类同时派生于微软标准COM接口IPersistStream,图层类和接口之间的关系如图3。
以微软COM技术实现的自定义图层类如下:
class ATL_NO_VTABLE CHydroLayer :
       public CComObjectRootEx<CComSingleThreadModel>,
       public CComCoClass<CModelLayer, &CLSID_ModelLayer>,
       public IHydroLayer,
       public ILayer,
       public IGeoDataset,
       public ILayerDrawingProperties,
       public ILegendInfo,
       public IPersistStream
{
              ………………………………………………..
}
步骤4,在将步骤2具体定义的类的多个对象依次加入到步骤3所定义的图层中,采用自定义图层的函数进行有效管理,主要涉及图层类中的如下操作:
STDMETHODIMP CHydroLayer::AddFeature(IBaseFeature* pFeature)
{
       if (pFeature == 0)return E_POINTER;
       m_ipItems.push_back(pFeature);
       return S_OK;
}
步骤5,将步骤4中已经容纳了实际对象数组的图层加入到ArcGIS Engine的地图中,地图和图层、复杂对象之间的相互关系如图4所示。
地图自动调用图层的绘制函数,图层调用复杂数据类型的绘制函数在地图上显示自定义的数据对象,在地图存储的过程中也有相似的函数调用过程,绘图函数Draw和存储函数Save调用过程如图5所示。

Claims (1)

1.一种基于ArcGIS Engine的水文复杂数据类型扩充方法,其特征在于,包括以下步骤:
步骤1:首先提取出水文复杂数据类型的公共特征,其次按照微软COM组件技术标准定义包含上述公共特征的抽象接口,所述微软COM组件技术标准包括C语言的语法和IDL文件的格式;所述公共特征为能够充分反映水文数据类型共同的信息特征,包括:水文复杂数据类型对象的名称、地图符号、显示范围、编号属性,以及绘图方法、点击测试方法、选择方法;
步骤2:在步骤1中定义的抽象接口基础上,采用软件工程中面向对象的方法从中派生具体的水文复杂数据类型,在派生出的水文复杂数据类型中实现步骤1中定义的所有公共特征; 
步骤3:按照ArcGIS Engine组件的要求构建水文图层,该水文图层须能容纳步骤2得到的包含水文复杂数据类型接口的数组;具体步骤如下:
步骤a,定义一个能管理步骤1所述抽象接口的水文图层接口,该接口中的函数包括增加、删除、查找函数;
步骤b,按照ArcGIS Engine技术文档中的规定,采用微软COM组件技术实现一个自定义的水文图层,该水文图层可实现步骤a定义的水文图层接口,也同时实现ArcGIS软件认可的标准接口;
步骤4:根据水文模型的构建需求和面向对象的方法,建立步骤2定义的具体水文复杂数据类型的对象,然后将其加入到步骤3构建的自定义水文图层中;
步骤5:将步骤4中包含有水文复杂数据对象的自定义水文图层加入到ArcGIS地图中显示。
CN201110373406.0A 2011-11-22 2011-11-22 基于ArcGIS Engine的水文复杂数据类型扩充方法 Expired - Fee Related CN102495859B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110373406.0A CN102495859B (zh) 2011-11-22 2011-11-22 基于ArcGIS Engine的水文复杂数据类型扩充方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110373406.0A CN102495859B (zh) 2011-11-22 2011-11-22 基于ArcGIS Engine的水文复杂数据类型扩充方法

Publications (2)

Publication Number Publication Date
CN102495859A CN102495859A (zh) 2012-06-13
CN102495859B true CN102495859B (zh) 2014-01-08

Family

ID=46187684

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110373406.0A Expired - Fee Related CN102495859B (zh) 2011-11-22 2011-11-22 基于ArcGIS Engine的水文复杂数据类型扩充方法

Country Status (1)

Country Link
CN (1) CN102495859B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110853489B (zh) * 2019-11-05 2021-08-10 中电建生态环境集团有限公司 一种水系流域基础数据获取方法及装置

Also Published As

Publication number Publication date
CN102495859A (zh) 2012-06-13

Similar Documents

Publication Publication Date Title
CN102375879B (zh) 基于智能手机的移动gis系统体系及其应用
CN105117573B (zh) 基于cad排水管网图纸信息的自动水力模型构建方法
CN105117572A (zh) 基于雨水管网设计计算表的自动swmm水力模型构建方法
CN102708587A (zh) 一种快速获取三维建筑信息的方法及系统
CN101789045B (zh) 一种面向制造领域的mda建模工具的实现方法
CN110838153B (zh) 基于ArcGIS体系的现代内河电子航道图制作方法及应用
CN105224747A (zh) 基于cad工程图纸信息和管网设计计算表的城市内涝模型构建方法
CN104008218A (zh) 电力工程三维一体化设计平台
CN102842072A (zh) 城镇地籍的管理方法及系统
CN110941888A (zh) 一种基于管网仿真的城市燃气管网拓扑数据文件生成方法
CN106649968A (zh) 一种村镇供水管网的可视化设计系统和方法
CN109308308A (zh) 基于三维动态可视化排水管网模拟和结果分析方法及装置
CN104361025A (zh) 一种多源空间数据融合与集成的方法
CN110659317A (zh) 一种bim数据轻量化方法
CN110688756B (zh) 一种采集和制图一体化的竣工图制作方法
CN109711680A (zh) 基于gis数字化技术的河流水电规划方法
CN111125291A (zh) 一种流域水资源管理决策支持系统WebGIS引擎设计方法、系统
CN106485017A (zh) 一种基于CA‑Markov模型的土地利用时空变化模拟方法
CN102495859B (zh) 基于ArcGIS Engine的水文复杂数据类型扩充方法
CN113312736A (zh) 基于云平台的河网水动力模拟实现方法及系统
CN116342815B (zh) 一种页岩孔隙空间的多尺度孔隙网络模型构建方法
CN103778564A (zh) 一种设施农业气象预警轻量地理分析方法
CN116542060A (zh) 一种基于法定图则规划的排水防涝规划地形模型构建方法
Wang et al. An Exploration of a BIM-based Smart Water Management System
Alekhin et al. GIS AND BIM integration in buildings and infrastructures construction

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20140108

Termination date: 20161122