基于ArcGIS Engine的基础地理信息系统设计与实现Word文档格式.docx
《基于ArcGIS Engine的基础地理信息系统设计与实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于ArcGIS Engine的基础地理信息系统设计与实现Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
地理信息系统是由计算机硬件、软件等组成的系统,该系统用于支持空间数据的采集、管理、处理、分析、建模和显示,以便解决复杂的规划和管理问题。
随着计算机软件的不断发展,对地理信息系统的开发方法也越来越多样化,而基于组件式GIS的开发是当今时代的潮流。
本文主要介绍了基于COM技术的ArcGISEngine开发平台对于基础地理信息系统的设计与实现。
首先介绍了研究背景与其意义,接着论述了组件式GIS的引入及其与传统GIS相比所具有的优点,并对ArcGISEngine二次开发工具进行了详细的介绍了,然后论述了基础地理信息系统的总体设计,并对部分系统功能进行了示例实现,从而体现了ArcGISEngine强大的地理信息系统开发能力。
关键词:
GIS;
基础地理信息系统;
组件技术;
ArcGISEngine
DesignandRealizationofBasicGeographicInformationSystems
BasedonArcGISEngine
Abstract:
Thedevelopmentofcontemporaryhigh-techrepresentedtheinformationscienceandtechnologyisaffectingtheindustrialandeconomicdevelopmentinacountryandaregional.Thegeographicinformationsystemsaretheimportantmanifestation.Itistotheintelligentsystemthedirectionofindustrydevelopment.GISisacomputersystemthatcomposedbythesoftware、hardwareandothersways.Anditcancollect、store、manage、comprehensiveanalysisanddealwiththespatialinformationsothatitcansolvethosecomplicatedplanningandmanagementissues.Withthecontinuousdevelopmentofthecomputersoftwaretechnology,thedevelopmentofgeographicinformationsystemapproachisalsomorediversification.ThewayofdevelopmentbasedontheCOMGISisthetrendofthetimes.InthispaperismostlydiscussingapplicationofthesecondarydevelopmentofbasicgeographicinformationsystembasedontheArcGISEnginetechnologythatisbasedonCOMtechnology.Atfirst,thispaperintroducestheresearchbackgroundanditssignificance.AndthendiscusstheadvantagesoftheCOMGIScomparedwiththetraditionalGIS.ThroughtheanalysisandcomparisonofthemethodsofsecondarydevelopmentbasedontheArcGIS,thenbringinthesecondarydevelopmentimplementastheapplicationsystemdevelopmenttools.Atthesametimeitdiscussesthecomponenttechnologyanditscharacteristics.
Keywords:
GIS;
BasicGeographicInformationSystems;
COMtechnology;
ArcGISEngine
引言
地理信息系统已经广泛应用于众多领域,为各行业提供了高效的空间信息处理能力和强大的决策支持服务。
这就需要GIS开发人员构建专业且易于使用的GIS软件,不仅要有通用的GIS功能和专业领域功能,还要有友好的交互式操作,从底层开始构建这些专业系统,不仅耗费时间,而且增加软件的开发成本。
组件式GIS把GIS技术同嵌入式技术融合在一起,形成嵌入式地理空间集成平台,是GIS研究的重要趋势和GIS产业发展的方向之一。
ArcEngine是ArcGISEngine的简称,是ESRI公司开发的一组完备且可以打包的嵌入式GIS组件库。
开发人员可以在应用程序中创建或扩展GIS的功能,自定义专业产品。
因此在通用的开发平台下嵌入GIS功能,能很好的满足广大GIS用户的需求。
1GIS简介
地理信息系统(GeographicInformationSystem或Geo-Informationsystem,GIS)有时又称为“地学信息系统”或“资源与环境信息系统”。
它是一种特定的十分重要的空间信息系统。
它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。
地理信息系统处理、管理的对象是多种地理实体、地理现象数据及其空间关系数据,包括空间定位数据、图形数据、遥感图像数据、属性数据等,用于分析和处理在一点地理区域内分布的地理实体、现象及过程,解决复杂的规划、决策和管理问题。
简言之,地理信息系统是对空间数据进行采集、编辑、存储、分析和输出的计算机信息系统。
地理信息有多种来源和不同特点,地理信息系统要具有对各种信息处理的功能。
2组件式GIS
2.1组件技术的引入
GIS软件技术的发展历程为:
GIS模块
↓
集成式GIS
↓
模块化GIS
核心式GIS
↙↘
组件式GIS
WebGIS
图1GIS软件发展历程
在GIS技术发展的早期,由于受到技术的限制,GIS软件往往只能满足于某些功能要求的一些模块,没有形成完整的系统,而且各个模块之间不具备协同工作的能力。
随着理论和技术的发展,各种GIS模块开始集成,并形成了大型GIS软件包,即集成式GIS出现,这是GIS发展的一个重要里程碑。
它集成了GIS的各项功能,形成了独立完整的系统,不过由于系统复杂,庞大,从而导致成本高,难以与其他应用或系统集成。
随后又出现了模块化GIS,它把GIS按照功能划分为一系列模块,运用于统一的基础环境之上。
模块化GIS具有强大的工程针对性,便于开发和应用,用户可以根据需要选择模块,但是集成式GIS和模块式GIS都存在这样一个缺点:
它难于管理信息系统以及专业应用模块集成高效,无缝的GIS应用。
为克服这个缺点,就提出了核心式GIS的概念。
这种GIS设计为操作系统的基本扩展,例如在Windows操作系统上的核心式GIS,它提供了一系列的动态链接库(DLL),以便开发时采用现有的高级编程语言,通过应用接口程序(API)访问内核所提供的GIS功能。
但是,核心式GIS提供的组件过于底层,在开发时增加了一定的难度,同时也不适应可视化程序设计的潮流。
随着计算机软件技术的发展,GIS组件化发展到了一个全新的阶段,组件式GIS应时而生。
2.2组件式GIS
组件式GIS(COMGIS)的基本思想是把GIS的各大功能模块根据性质划分为几个控件,每个控件完成不同的功能各个GIS控件之间,以及GIS控件与其他非GIS控件之间,可以方便的通过面向对象的可视化的软件按开发工具集成起来,形成最终的GIS应用。
控件就如同一堆各式各样的积木,他们分别实现不同的功能(包括GIS和非GIS功能),根据需要把实现各种功能的“积木”搭建起来,就构成了应用系统。
它是基于组件对象平台,以一组具有某种标准通信接口,允许跨语言应用的组件,同传统的GIS相比较,它具有以下特点:
1)小巧灵活、价格便宜
由于传统GIS结构的封闭性,往往使得软件本身变得越来越庞大,不同系统的交互性差,系统的开发难度大。
在组件模型下,各组件都集中地实现与自己最紧密相关的系统功能,用户可以根据实际需要选择所需控件,最大限度地降低了用户的经济负担。
。
组件化的GIS平台集中提供空间数据管理能力,并且能以灵活的方式与数据库系统连接。
在保证功能的前提下,系统表现得小巧灵活,而其价格仅是传统GIS开发工具的十分之一,甚至更少。
这样,用户便能以较好的性能价格比获得或开发GIS应用系统。
2)无须专门GIS开发语言,直接嵌入MIS开发工具
传统GIS往往具有独立的二次开发语言,对用户和应用开发者而言存在学习上的负担。
而且使用系统所提供的二次开发语言,开发往往受到限制,难以处理复杂问题。
而组件式GIS建立在严格的标准之上,不需要额外的GIS二次开发语言,只需实现GIS的基本功能函数,按照Microsoft的ActiveX控件标准开发接口。
这有利于减轻GIS软件开发者的负担,而且增强了GIS软件的可扩展性。
GIS应用开发者,不必掌握额外的GIS开发语言,只需熟悉基于Windows平台的通用集成开发环境,以及GIS各个控件的属性、方法和事件,就可以完成应用系统的开发和集成。
目前,可供选择的开发环境很多,如VisualC++、VisualBasic、VisualFoxPro、BorlandC++、Delphi、C++Builder以及PowerBuilder等都可直接成为GIS或GMIS的优秀开发工具,它们各自的优点都能够得到充分发挥。
这与传统GIS专门性开发环境相比,是一种质的飞跃。
3)强大的GIS功能
新的GIS组件都是基于32位系统平台的,采用InProc直接调用形式,所以无论是管理大数据的能力还是处理速度方面均不比传统GIS软件逊色。
小小的GIS组件完全能提供拼接、裁剪、叠合、缓冲区等空间处理能力和丰富的空间查询与分析能力。
4)开发简捷
由于GIS组件可以直接嵌入MIS开发工具中,对于广大开发人员来讲,就可以自由选用他们熟悉的开发工具。
而且,GIS组件提供的API形式非常接近MIS工具的模式,开发人员可以像管理数据库表一样熟练地管理地图等空间数据,无须对开发人员进行特殊的培训。
在GIS或GMIS的开发过程中,开发人员的素质与熟练程度是十分重要的因素。
这将使大量的MIS开发人员能够较快地过渡到GIS或GMIS的开发工作中,从而大大加速GIS的发展。
5)更加大众化
组件式技术已经成为业界标准,用户可以象使用其他ActiveX控件一样使用GIS控件,使非专业的普通用户也能够开发和集成GIS应用系统,推动了GIS大众化进程。
组件式GIS的出现使GIS不仅是专家们的专业分析工具,同时也成为普通用户对地理相关数据进行管理的的可视化工具。
总之,组件式GIS是通过对象、属性、方法和事件进行交互。
空间对象的相互关系,几何对象之间的集成关系,对象间的组成关系,对象之间的逻辑上的关联关系等,只要了解清楚了ComGIS内存对象之间的关系和基本概念利用已知熟悉的任何一门面向对象的可视化开发工具,两者结合,就可以开发出功能强大的GIS应用系统。
3地理信息系统的开发模式
目前常用的GIS开发模式主要有三种:
独立开发,单纯二次开发,集成二次开发。
由于独立开发难度太大,单纯二次开发受GIS工具提供的编程语言的限制,效果不理想,因此,结合GIS工具软件与当今可视化开发语言的集成二次开发方式就成为GIS应用开发的主流方式。
优点是既可以充分利用GIS工具软件对空间数据的管理,分析功能,又可以利用其它可视化开发语言具有的高效,方便等编程优点,集二者之所长,不仅能大大提高应用开发效率,而且使用可视化软件开发工具开发出来的应用程序具有更好的外观效果更强大的数据库功能、可靠性好、易于移植、便于维护,尤其是以COM技术利用GIS功能组件进行集成开发,更能表现出这些优势。
不过这种方法唯一的缺点是前期投入比较大,需要同时购买GIS工具软件和可视化编程软件,但“工欲善其事必先利其器”,这种投资非常值得。
4ArcGISEngine简介
ArcEngine组件产品发布之前,ESRI公司提供的是ArcObjects公用组件库,它是基于MicrosoftCOM技术开发的一套COM组件对象集,是专门为开发人员提供的二次开发组件。
该组件集提供来了几乎全部的底层GIS功能,就连ArcGIS软件本身都是使用ArcObjects的组件开发出来的。
但是使用ArcObjects开发时,需要依附于ArcGIS平台,开发人员只有在安装了ArcGIS产品以后,才能利用其提供的组件对象进行开发。
ArcEngine提取了ArcObjects组件库中的核心功能,对ArcObjects中的大部分接口、类、库进行封装所构成嵌入式组件。
ArcEngine中的组件接口、方法、属性与ArcObjects是相同的。
ArcEngine是独立的嵌入式开发平台,开发人员无需ArcGISDesktop支持;
其具备灵活、速快的开发和功能扩展能力,功能完善,稳定性较好。
无论是ArcEngine还是ArcObjects都具有面向对象的特性,他们都支持类、对象、继承等面向对象的特性。
同时类下面还定义了不同的接口,接口中包含了不同的方法和属性,接口之间有接口查询和接口继承。
例如接口查询就是从对象的一个接口查询到另一个接口定义的属性和方法。
而要满足两个接口之间可以进行接口查询,条件是他们要同属于一个类。
本论文以全国某一时期采集的基础地理数据为基础,采用.NET为开发平台,实现了GIS基础信息系统开发,探讨了基于ArcEngine的基础地理信息系统的基本原理和系统功能的实现过程。
5.NET介绍
.NET是MicrosoftXMLWebservices平台。
XMLWebservices允许应用程序通过Internet进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。
Microsoft.NET平台提供创建XMLWebservices并将这些服务集成在一起之所需。
对个人用户的好处是无缝的、吸引人的体验。
.NETFramework是由微软开发,一个致力于敏捷软件开发(Agilesoftwaredevelopment)、快速应用开发(Rapidapplicationdevelopment)、平台无关性和网络透明化的软件开发平台。
NET包含许多有助于互联网和内部网应用迅捷开发的技术。
.NET框架是微软公司继WindowsDNA之后的新开发平台。
.NET框架是以一种采用系统虚拟机运行的编程平台,以通用语言运行库(CommonLanguageRuntime)为基础,支持多种语言(C#、VB.NET、C++、Python等)的开发。
.NET也为应用程序接口(API)提供了新功能和开发工具。
这些革新使得程序设计员可以同时进行Windows应用软件和网络应用软件以及组件和服务(web服务)的开发。
.NET提供了一个新的反射性的且面向对象程序设计编程接口。
.NET设计得足够通用化从而使许多不同高级语言都得以被汇集。
6基础地理信息系统总体设计
6.1系统目标与功能
系统的目标是开发出一个区域基础地理信息查询及制图的系统,系统的开发采用了c/s模式。
.NET平台下,C#是作为第一语言,集中了所有关于软件开发和软件工程的所有最新成果,且与ArcEngine有很好的兼容性,因此本系统采用C#语言进行基于ArcEngine的二次开发。
系统具有以下功能:
1)数据编辑与入库;
提供数据预处理,数据入库功能,并提供数据编辑,入库的回滚功能。
提供一定的数据质量检查,包括数据一致性、数据的完整性检查等功能。
这些检查渗透在编辑、入库等具体操作中,保证入库数据的有效性。
同时,实现多种数据更新方式,包括按图层、图幅更新数据等。
本功能还实现了数据的输出接口,可以实现与外部系统数据的共享。
2)查询分析功能
查询分析子模块主要负责对数据进行各种查询与分析工作。
具体功能包括:
属性查询,实体查询(点,线,矩形,任意多边形),简单查询,条件查询、空间查询、距离量测、面积量测。
运行条件:
必须设置可查询图层,即在进行数据查询前必须设置你要查询的对象可能所在的图层,没有被设置的图层不允许进行数据查询,即图层必须可见。
3)制图输出功能
本功能主要负责将主界面的图,按照三种不同的方式进行输出:
标准图幅的输出、屏幕可见区图的输出、包括可见区的完整图幅输出,在输出界面进行地图的整饰,达到标准的输出效果。
输出子模块功能包括:
添加相应的制图输出要素,有模板、图例、指北针、文字,图片等,对显示的地图进行整饰。
页面设置,主要是按照打印机的纸张
进行页面设置。
4)视图管理功能
主要包括常用的图形视图操作的功能,如放大、缩小、全图、全屏显示,按照图层范围显示,按照数据单元范围显示,视图漫游等基本功能。
另外包括系统部分数据视图和窗口的管理功能。
5)元数据管理
城市基础地理数据库元数据根据数据库的更新进行更新,本模块在不影响整体系统稳定性的基础上,实现元数据的录入、编辑和检索功能,并能根据需要对元数据进行合并、导入、导出等功能。
6)用户管理
用户管理实现对登录系统用户的基础管理工作。
包括增加用户、注销用户、修改用户权限等。
系统对登陆的用户有严格而完整的权限控制机制。
用户权限建立在操作系统和数据库管理系统之上,系统可以根据具体的操作模块和功能进行权限设置,同时针对数据的读、写、修改、删除进行严格权限控制,并提供日志管理功能,及时跟踪用户对数据的使用情况,防止用户对系统数据的非法利用,便于系统维护。
基础地理信息系统
数据的编辑与入库
数据的查询与分析
制图输出功能
视图管理功能
元数据管理
用户管理
图2系统功能模块图
6.2系统的数据库设计
数据库是基于GIS的各种应用系统的核心组成部分。
本系统采用GeoDataBase来统一管理空间数据和属性数据。
GeoDataBase是第三代数据库,其最大的特点就是一个基于面向对象型的关系数据库。
图层数据主要是以FeatureClass的形式存储在GeoDataBase中,而图层的分类依据是根据其几何形状分为point,polyline,polygon这三种类型;
要素的其他属性信息则由其代表的现实地物的基本信息来确定,这些基本信息是用户比较关心的信息。
如人口,面积等。
7系统功能实现示例
系统采用了用户熟悉的Windows界面风格,运用对话框,工具条等操作方式,利用.NET的图形用户界面设置成适合专业使用的用户界面。
以以下几个功能为例:
7.1查询功能的实现
查询功能包括属性查询和空间查询。
属性查询是通过设置属性字段的条件,获得符合条件的要素,并在图层中闪烁,高亮显示;
该查询主要用到IQueryFilter等接口,而空间查询分为点击查询,拉框查询,邻域查询。
这些都是基于空间位置的查询,对于查询到的要素会闪烁显示,其详细的属性信息会显示在TreeView控件所在的窗体中。
空间查询所用的接口主要有ItopologicalOperater、ISpatialFilter.具体代码如下:
1)基于属性查询对象
IQueryfilterqueryfilter;
Queryfilter=newQueryFilterClass();
//设置过滤器属性
Queryfilter.WhereClause=“name=‘河南省’”;
ILayerlayer=this.axMapControll.get_layer(0);
IFeatureLayerfeaturelayer=layerasIFeatureLayer;
IFeatureSelectionfeatureSelection=featurelayerasIFeatureSelection;
featureSelection.SelectFeatures(queryFilter,esriSelectionResultEnum.esriSelectionResultNew,false);
activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null,activeView.Extent);
}
图3基于属性查询结果图
2)基于空间位置查询
ISpatialFilterspatialfilter=newSpatialFilterClass();
//设置用于筛选几何对象
SpatialFilter.Geometry=point;
//设置筛选几何字段
spatialFilter.GeometryField=“shape”;
//设置空间几何关系
spatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelContains;
Ilayerlayer=this.axMapControli.get_Layer(0);
IFeatureClassfeatureclass=featurelayer.FeatureClass;
IFeatureCursorfeaturecursor;
Featurecursor=featureclass.Search{spatialFilter,false};
IFeaturefeature=Featurecursor.NextFeature();
While(feature!
=null)
{
Console.WriteLine(“featureoidis{0}”,feature.OID);
Fea