CN102495859B - 基于ArcGIS Engine的水文复杂数据类型扩充方法 - Google Patents
基于ArcGIS Engine的水文复杂数据类型扩充方法 Download PDFInfo
- 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
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平台下的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地图中显示。
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110853489B (zh) * | 2019-11-05 | 2021-08-10 | 中电建生态环境集团有限公司 | 一种水系流域基础数据获取方法及装置 |
-
2011
- 2011-11-22 CN CN201110373406.0A patent/CN102495859B/zh not_active Expired - Fee Related
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 |