基于ArcSDE的哈尔滨市GIS空间数据管理系统

2016-12-28 06:13
地理空间信息 2016年10期
关键词:空间数据功能模块控件

孟 露

(1.东北林业大学,黑龙江 哈尔滨 150040)

基于ArcSDE的哈尔滨市GIS空间数据管理系统

孟 露1

(1.东北林业大学,黑龙江 哈尔滨 150040)

介绍了基于ArcSDE的哈尔滨市GIS空间数据管理系统的总体结构、功能设计、功能模块流程、功能的实现以及运行情况,为GIS空间数据管理系统的开发提供一个应用实例。

ArcSDE;GIS空间数据;功能设计;程序流程;总体结构

1 系统结构设计

系统结构总体上是以客户端/服务器体系架构为基础,在逻辑上分为3层,分别为界面层、基础功能层和数据引擎层。3层之间的功能相对独立,系统可以方便地进行扩展。

基础功能层主要由数据查询、属性编辑、图形编辑、专题地图制作等组件构成。对这些组件进行封装,然后通过定义接口或消息驱动等方式供用户使用。

界面层主要由界面控制、地图显示和栅格显示等构成[1]。界面层根据系统要求,按照技术设计封装系统的各项功能,使系统基础功能层与界面层相互分离,这样在系统界面发生改变和调整时,系统的各项功能保持不变。

数据引擎层是为前台应用程序与后台数据库进行交互而设计,包括与数据库进行连接,对数据库进行查询、检索、更新、添加、存储、空间分析等操作。数据库通过数据引擎层接受来自前台应用程序的请求,经过后台数据库的处理,将处理结果发送给前台应用程序。

系统采用基于COM/DCOM组件的GIS开发模式,利用ArcEngine 9.2进行开发,以ArcSDE API为空间数据库引擎与后台Oracle数据库的Geodatabase空间数据进行交互,采用C#高级开发语言,开发环境为Visual Studio 2005。系统界面如图1所示。

2 系统功能设计

基于ArcSDE的哈尔滨市GIS空间数据管理系统的整体功能结构如图2所示。

图1 系统界面

图2 系统功能结构图

3 功能模块设计

按照3层系统结构的总体设计要求,功能模块设计也分为3层,分别为基础功能模块、空间数据入库模块和控件功能模块。基础功能模块包括空间数据编辑子模块、空间数据查询与分析子模块,该模块主要完成空间数据编辑、查询与分析等GIS基础功能,空间数据入库模块主要完成空间数据引擎的功能,控件功能模块作为界面层主要完成界面层的功能。

3.1 基础功能模块

3.1.1 空间数据编辑子模块

对空间数据的编辑流程如图3所示。在空间数据编辑模块中,编辑的主要对象是图形数据和属性数据,图形数据可分为地名、铁路、街道、房屋等图层,分别存储在不同的工作空间中,属性数据以二维表的形式存储。要获得这些图形数据,必须先获取这些图形数据所在的工作区间,因此,该模块设计了打开、连接和设置工作空间的功能,完成工作空间设置后,就可以激活空间数据编辑功能,使用编辑工具对图形数据进行添加、编辑和删除等操作。其主要的编辑操作包括添加和删除图形要素、编辑图形和其相应的属性数据以及编辑要素类型等,最后将编辑完成的空间数据存储到空间数据库中。

图3 空间数据编辑子模块流程图

3.1.2 空间数据查询与分析子模块

空间数据查询与分析功能的程序流程如图4所示。空间数据查询与分析是系统的重要功能,包括查询分析、叠加分析、缓冲区分析、邻域分析等[3]。空间数据分为矢量数据和栅格数据两类,都是以分层结构组织。该模块设计了图层选择功能,可通过该功能选择要查询与分析的数据图层。该模块还设计与开发了几何图形工具集,利用这些工具选择要查询与分析的空间范围后,就可以对这个空间范围内的空间对象进行包含查询、交叉查询、邻接查询等操作。还设计了缓冲区功能,可对矢量数据与栅格数据的点、线、面建立缓冲区。

3.2 空间数据入库模块

空间数据入库功能的程序流程如图5所示。系统使用ArcSDE作为空间数据库引擎, Oracle10g作为后台数据库。首先通过设置ArcSDE的配置参数连接前台应用程序与后台数据库,参数配置过程可以反复进行直至连接成功[2]。

图4 空间数据查询与分析流程图

图5 空间数据入库流程图

需要存储到Oracle数据库的空间数据包括矢量数据和栅格数据(影像)。该模块可选择不同类型的空间数据并对这些空间数据进行检查与修复。如果要入库的空间数据为矢量数据,该模块需检查该数据的完整性、拓扑关系正确性等;如果要入库的空间数据为栅格文件,该模块也能检查该数据的完整性。检查后,如果数据符合入库的要求,就会把这些数据存储到Oracle数据库中,并提示用户为数据文件重新命名,如果不符合,则重新选择空间数据。

3.3 控件功能模块

系统中各控件的运行流程如图6所示。GIS空间数据管理系统中会有很多不同功能的控件来构成整个系统的控件集合,各控件之间按照应用需求有不同的逻辑联系[4]。该模块根据这种逻辑联系,设计与建立了不同功能的控件联系。设计中采用了对象池的概念,先在对象池中查找要执行的控件对象,并对当前要执行的控件对象是否是该控件对象的接口作出判断,若当前控件对象不存在或者当前控件对象不是该控件对象的接口,系统就不执行当前控件对象的接口,否则就会对保留前一个控件对象的必要性作出判断,如果保留前一个控件对象是没有必要的,系统就会将当前要执行控件对象的信息窗口弹出来,如果必须保留前一个控件对象,系统会恢复前一个控件对象的操作结果;无论是否恢复对前一个控件对象的操作结果,系统都会判断当前控件对象是否为ITool控件对象的接口,假如当前控件对象不是ITool控件对象,系统就执行Onclick操作,假如当前控件对象是ITool控件对象,系统会调用当前要执行的控件对象工具,并将当前控件对象工具绑定到控件上[5],同时清除前一个控件对象,并更新系统工具按钮和菜单状态。

图6 系统控件流程图

4 系统主要功能的实现

4.1 Shape图层的创建

首先要在工作空间中创建一个数据集,这个数据集包含table、feature、rasterdataset对象。数据集对象分为两类,一类是table二维表,另一类是geodataset地理数据集。地理数据集geodataset是由要素数据集featuredataset、要素类featureclass、栅格数据集rasterdataset和TIN组成[6]。这里要创建的Shape图层主要就是要素类,程序中给出了点、线、面要素图层的建立过程,其运行结果如图7所示。

图7 创建Shape数据

在下列程序中先选择要素类型即点、线、面,然后利用FieldItem对象创建多个字段,最后利用CreateFeatureClass对象创建要素类FeatureClass。程序结束后,在指定的文件夹中就会生成三个文件,分别是*. dbf 、*.shp、和*. shx文件。

switch(this.cmbType.SelectedItem.ToString())

{

case "点图层":

pGeometryType=esriGeometryType.esriGeometryPoint;

break;

case "线图层":

pGeometryType=esriGeometryType.esriGeometryPolyline;

break;

case "图层面":

pGeometryType=esriGeometryType.esriGeometryPolygon;

break;

}

ArrayList ArrayFieldInfo=new ArrayList();

for(int i=0;i<this.lstFieldsView.Items.Count;i++)

{

ListViewItem pListViewItem=new ListViewItem();

pListViewItem=lstFieldsView.Items[i];

FieldItem pFieldItem=new FieldItem();

pFieldItem=pListViewItem.Tag as FieldItem;

ArrayFieldInfo.Add(pFieldItem);

}

public static void CreateShapeFile(ArrayList pArrayList, string strGeoFieldName,string strFilePathName,stringstrFileName,esriGeometryType pGeometryType)

4.2 空间数据查询

空间数据查询有空间查询和属性查询两种,空间查询是在地图上查询一定空间范围的地理要素,属性查询是通过设定一定的查询条件,查找满足条件的地理要素。空间数据查询的实现方法是在程序中通过IFeatureSelection对象的SelectionSet属性获取选择集,利用IFeatureSelection对象的SelectFeatures方法,使用IQueryFilter过滤器将符合条件的地理要素放入图层的选择集中[7]。在图8中通过选择点、线、面图层,设置字段和字段的唯一值,并通过SQL运算符来构造SQL查询语句进行空间查询和属性查询。

图8 空间查询和属性查询

4.3 加载SDE数据

加载SDE数据主要是使用IWorkspace对象提供的数据库访问接口,通过设置数据库连接参数,如数据库名称、实例名、用户名、密码等来实现。程序运行结果如图9所示。

图9 SDE数据加载

public IWorkspace openSDEWorkspace(string S, string I, string U,

string P, string D, string V)

{

try

{

IWorkspace gk = null;

IPropertySet PPS = new PropertySetClass();

IWorkspaceFactory PSF = new SdeWorkspaceFactoryClass();

PPS.SetProperty("server", S);

PPS.SetProperty("instance", I);

PPS.SetProperty("database", D);

PPS.SetProperty("user", U);

10.3969/j.issn.1672-4623.2016.10.018

P208

B

1672-4623(2016)10-0063-04

2016-06-12。

项目来源:黑龙省普通高校重点实验室项目精化局部似大地水准面方法研究资助项目(KJKF-14-08)。

猜你喜欢
空间数据功能模块控件
基于.net的用户定义验证控件的应用分析
GIS空间数据与地图制图融合技术
关于.net控件数组的探讨
基于ASP.NET标准的采购管理系统研究
输电线路附着物测算系统测算功能模块的研究
功能模块的设计与应用研究
网格化存储的几项关键技术分析
基于嵌入式MINIGUI控件子类化技术的深入研究与应用
Spreadsheet控件在Delphi数据库系统中的编程与应用