基于ArcGIS Engine的GIS框架的设计与实现

  • 格式:doc
  • 大小:242.00 KB
  • 文档页数:8

基于DotNET和ArcGIS Engine的GIS框架的搭建

丁圣陶,王磊, 熊伟, 孙庆华

(中国矿业大学环境与测绘学院,江苏省资源环境信息工程重点实验室,江苏徐州221008)

摘要:由于GIS涉及的领域非常广泛,商业公司或者个人想短时间内从基本类库开始编写一个可扩展性强、功能完善的GIS平台成为一件非常困难的事情,其所耗费的人力、物力和成本也非常高昂。本文在介绍DotNET和GIS框架的基础上,在C#.NET语言环境下应用ArcEngine制作了一个具有常用功能的软件框架。相比基本类库开发而言,其降低了开发的难度,提高了开发的效率,同时可以在专业模型开发时方便地集成GIS功能。

关键词:DotNET;ArcEngine;框架模型

Design and Implementation of DotNet and ArcGIS Engine Based

House Property Information System

Ding Sheng-tao, Wang Lei, Xiong Wei, Sun Qing-hua

(School of Environment and Spatial Informatics , China University of Mining and Technology ,

Jiangsu Key Laboratory of Resources and Environmental Information Engineering,Jiangsu Xuzhou

221008,China)

Abstract: As a result of the field GIS refers to is very widely,commercial companies or individuals want

to start a short period of time from the basic class library to prepare a highly scalable, fully functioning GIS

platform has become a very difficult task, which consume human, material and cost also very high. In this

paper, base on the Introduction of DotNET and GIS framework, Use ArcEngine produced a common

software framework in the C #.NET Application Language Environment. Compared to the basic class

library development, it reduces the difficulty of development, improve the efficiency of development and

at the same time when in the professional model development can easy integration into the GIS function.

Key words:DotNET;ArcEngine;Framework Model

引言

地理信息系统可定义为:由计算机系统、地理数据和用户组成的,通过对地理数据的集成、存储、检索、操作和分析,生成并输出各种地理信息,从而为土地利用、资源管理、环境监测、交通运输、经济建设、城市规划以及政府各部门行政管理提供新的知识,为工程设计和规划、管理决策服务[1]。

目前,地理信息系统以广泛地应用与众多领域,为各个相关行业提供了高效的空间信息处理能力和强大的决策支持服务。为满足需求,GIS开发人员需要具有构建领域专用且易于使用的应用软件的能力,软件须将广泛应用的GIS技术与友好用户的经验结合起来。这些软件如果重头开始构建,将是一项繁冗的开发工作,会耗费时间,并且成本不菲。而且传统的开发方式还存在着功能关联性差,结构松散,组件的粒度小等问题。

为了提高工作效率和产品的可靠性,降低项目开发成本,许多GIS二次开发商都会组织公司核心程序员开发一个GIS应用框架将一些通用的核心功能进行封装,这些框架使用的技术和策略可能各不相同,但其目的都是一样的:降低重复编码的工作量,提高编程效率,给项目人员的开发工作提供一个良好的平台和工作流程。这就是本文内容将要讨论的过程。

1.DotNET与ArcGIS Engine 1.1 DotNET简介

Java和DotNET是两大主流开发平台。作为GIS基础软件,所选择的ArcGIS Engine对 Java和DotNET两大开发平台都有很好的支持。根据开发者自身的应用能力,软件开发采用微软的DotNET平台及C#语言。

(1) DotNET平台。DotNET框架是一种新的计算平台,它简化了在高度分布式Internet环境中的应用程序开发,支持多种不同的编程语言,它帮助开发人员把精力集中在实现业务逻辑的核心上。

(2)C#语言。C#是一门设计简单、面向对象、类型安全、灵活兼容的新型面向对象的编程语言。其语法风格源自 C/C++ 家族,吸收Java的优点并融合了VisualBasic的高效和 C/C++

的灵活性、强大底层控制能力,是微软专门为与. NET Framework一起使用而设计的,是. NET平台的主流语言。

本文就是在介绍ArcEngine和GIS框架的基础上,在C#.Net环境下应用ArcEngine制作了一个具有常用功能的自定义软件框架。

1.2 ArcGIS Engine简介

现阶段,组件技术已经广泛的被引入到GIS软件的设计与开发中,使得高效便捷的开发应用型地理信息系统成为现实,国内外著名的GIS厂商都相继推出了他们的GIS组件,其中以ESRI公司的组件产品ArcObjects最为著名。ArcGIS Engine是一组打包的核心AO组件,相比AO降低了开发的难度,也大大提高了GIS应用程序的开发效率。因此,本文主要以ArcGIS

Engine作为主要研究对象,剖析其系统开发方法,并作出最终的开发实例。

2.GIS框架概述

所谓的框架实际上是建立在操作系统和基础框架层之上而建立起来的。框架所处的位置即框架层,框架层本身并非空穴来风,它是由一些更基础的类库或框架开发而成。在这些基础组件中,处于最底层是操作系统层,它除了提供对硬件设备的访问外,还提供了必要的API给位于其上的所有层的访问;位于操作系统层上的是基础框架层,它以编程模型的形式被提供,如.NET Framework、MFC和JRE等,基础框架层提供了基于操作系统的最一般化的功能和组件;基础框架层之上就是开发者编写的自定义框架层,开发人员需要将应用层的需求进行分析,提取出通用逻辑,并在自定义框架层中实现[5]。其结构图如图1所示。

图1 框架层结构

GIS框架层是建立在基础框架层之上的,如.NET Framework类库框架,但是类库之中的各个类关联性差,结构松散,多是为实现某些功能而提供的,并非针对特定的领域,一般不能实例化类库,而自定义的应用框架是一组相互联系的类,各个类之间相互配合,具有较强的内聚性。

综上所述,自定义框架(不涉及专业到专业应用框架)即广义的框架没有与具体业务流程相关联,不需要考虑到需求分析,只需在各功能中提取出通用的逻辑,并在自定义框架里操作系统层

自定义框架层 基础框架层

专业应用框架1 专业应用框架2

专业应用框架n

实现。GIS框架只是一种软件结构,或者说是一种半成本软件,通过对框架的扩展、复用,组成新的专业应用软件。

3.框架结构设计及功能实现

软件集成是软件复用思想及研究的一个实践扩展和技术应用 ,是一种基于构件技术的复用实践.软件框架是为复用而设计的,在以框架为基础的软件开发过程中,应用软件的开发实际上是对软件框架的扩展和实例化.软件集成框架本身设计的合理性、充分性将直接对以后基于该框架的开发工作产生重要影响.集成框架要达到预期的目标 ,构建适当的集成框架模型是至关重要的基础工作. 本系统采用ArcGIS Engine系统自带的数据,采用C#作为开发前端,基于ArcGIS Engine来进行设计开发,来说明GIS开发中ArcGIS Engine开发的系统框架的设计与实现。

3.1框架结构的设计

框架总体上包括五个部分:地图显示、查询模块、分析模块、地图编辑、地图输出五个部分。地图显示包括:TOC图层显示和鹰眼,对图层的操作主要在AE自带的TOC控件里编程实现的,TOC图层的显示包括图层开关,图层标注和图层提示功能;查询模块包括:属性查询、空间查询和距离查询;分析模块包括:缓冲区分析、路径分析和专题图分析;地图编辑包括:图形编辑和属性编辑;地图输出包括:打印输出和转换输出。框架总体结构如图2所示。

图2 框架总体结构示意图

3.2自定义框架功能的实现

3.2.1 显示功能

(1)地图标注

对于一幅地图而言标注是非常重要的。一张标注良好的地图可以通过文字清晰的显示地图要素中蕴含的各种内在信息。AE中标注可分为两种:一个是标注(Label),另一个是注记(Annotation)。Annotation比Label功能强大,而且注记可以随地图的变化而变,所以本例使用注记来标注对象。

Annotation实现语句:

pGeoFeatureLayer.AnnotationProperties.Add(pLabelEngine as IAnnotateLayerProperties); 模型结构

地图显示 空间查询 分析模块 地图编辑 地图输出

TOC图层显示

鹰眼 属性查询

距离查询 空间查询 缓冲区分析

专题图分析 路径分析 图形编辑

属性编辑 打印输出

转换输出 地图开关

地图标注

地图提示 其中pGeoFeatureLayer为要标注的几何要素图层,pLabelEngine由接口ILabelEngineLayerProperties实例化而来,它定义的属性和方法用于回答哪些要素被标注和标注尺寸大小等信息。取消标注也很简单:pGeoFeatureLayer.DisplayAnnotation = false;

(2)鹰眼功能

鹰眼的实现并不难,实质是主控件与鹰眼控件的数据保持一致,即得到其中一个控件的显示范围Extent,再把这个显示范围Extent传递给另一个控件,传递中介是IEnvelop接口,而且这种传递是相互的。

实现的语句:

IEnvelope pEnvelope = axMapControl1.Extent;

pEnvelope.CenterAt(pPt);

axMapControl2.Extent = pEnvelope;

其中axMapControl1和axMapControl2各为地图控件和鹰眼控件,pPt为鼠标单击事件的点。