C# + AE 二次开发方法_第1页
C# + AE 二次开发方法_第2页
C# + AE 二次开发方法_第3页
C# + AE 二次开发方法_第4页
C# + AE 二次开发方法_第5页
已阅读5页,还剩39页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C#+AE二次开发方法主讲:蔡忠亮第五章Arc/Info环境下的GIS二次开发技术一、基于工具型地理信息系统二次开发语言的软件开发。

VBA—VisualBasicforApplications AML—ARCMacroLanguage二、基于有关地理信息系统的控件(或构件)的软件开发

MapObject(MO),ArcObject(AO),ArcEngine(AE)AO/AE关系什么是AOAO是ESRI公司ArcGIS™

家族中应用程序ArcMap™,ArcCatalog™

和ArcScene™的开发平台,它是基于Microsoft®COM技术所构建的一系列COM组件集。到目前为止,AO还不是一个独立的应用产品,是依附在ArcGISDeskTop产品中的软件开发包。也就是说,购买了ArcGISDesktop的任何一个产品,不管是ArcView还是ArcInfo,都有了这套强大的AO组件集,利用AO提供的组件对象来进行应用开发。AO

、AE、MO比较AO

-

ArcObjects,有上千个对象和接口,可以在其基础上开发出业界最强大的GIS应用程序。完全支持空间数据引擎。但由于运行时需要安装ArcGIS核心产品和开发时用到的扩展模块产品,软件发布成本不菲,其下一代产品ArcGIS

Engine则有望解决这个问题。

AE-ArcGisEngine是一个创建定制的GIS桌面应用程序的开发产品。ArcGISEngine包括构建ArcGIS产品ArcView,ArcEditor,ArcInfo,和ArcGISServer.的所有核心组件。使用ArcGISEngine可以创建独立界面版本(stand-alone)的应用程序,或者对现有的应用程序进行扩展。

MO

-

MapObjects,只有十多个对象,用于简单的GIS应用程序开发,对空间数据引擎的支持度较低,但软件发布成本很低。

AO是主流,AO的分析功能比MO强,AO支持的格式更多,开发时的模式和可扩展性等强些,也复杂多了。AO

、AE、MO比较

MO使用简单,也很不错。

其实,如果非特别专业和特别要求,MO没问题的。MO也可以连接geodatabase的,建议你采用AO,因为MO现在基本上已经没有新版本了。

AO其实是一组COM接口,适用于任何语言,如VC++,VB,DELPHI等开发语言,而MO是一个产品。AO不能独立存在,只要安装成功ARCGIS就可以使用AO开发,听说今后arcgis的版本中AO可以单独发行了。

AO是AE、ArcGISDesktop、ArcGISServer三者的集合,按功能AO大于AE大于MO,AO面向桌面扩展开发,需要有desktop支持,不能开发出独立发布的程序AE不需要desktop支撑,包括了AO中的大部分库,可以开发出独立发布的应用程序,MO功能简单,主要面向小型的系统开发如地图浏览,查询系统等等,或结合MIS系统运行。

AE编写的代码可以在同版本的AO环境下运行,AO环境下编写的一部分对象在AE下可能无法使用。基于AE的GIS二次开发(AE+C#)一、安装C#环境(VS2005)二、安装AE环境三、基于AE二次开发GIS系统AE环境配置1

、安装ArcGISEngineRuntime(9.2)2、安装ArcGISEngineDeveloperKit(9.2)

DeveloperKit内容

Help包含开发帮助文件:AODev.chm,ArcObjects.chm等

Kits附加的开发者素材诸如投影引擎头文件,类别ID文件和ESRI示例命令的源代码(在最新的9.2版本中,该代码位置有所变化)

ObjectModelDiagrams包括所有的PDF格式对象模型图

Samples包含所有示例工程文件的源代码

Utilities包含ESRI对象浏览器等工具

安装ArcGISEngineDeveloperKit基于AE二次开发GIS系统(AE+C#)新建C#工程(选择ARCGIS/Enginge工程)基于AE二次开发GIS系统(AE+C#)选择需要引入的库(也可以在向导完成后手动引入)基于AE二次开发GIS系统(AE+C#)完成后在窗口插入AE控件基于AE二次开发GIS系统(AE+C#)C#中设置MapControl初始值基于AE二次开发GIS系统(AE+C#)设计器中预览设置控件属性 Size:在NET环境下,可以直接设置控件的anchor属性(例如left,top,right,bottom),不需要写Resize事件中调整控件位置。代码编写 C#的语言风格与C++相似,IDE与VB6.0下相似,大大简化了开发过程。 一般来说,C#开发过程比VC简单,初学者容易上手,功能上比VB强大很多。C#语言风格 1.变量类型及定义方式与C++相似。 例如:inti=0;doubled=0.00;

2.不使用指针,改用委托。

System.Drawing.Pointpt=newSystem.Drawing.Point(); 3.不需要delete释放。

4.事件使用委托。

m_MapView.SelectFeatureEvent+=newMapView.SelectFeatureEventHandler(SelectFeature);基于AE二次开发GIS系统(AE+C#)C#开发环境(属性编辑)基于AE二次开发GIS系统(AE+C#)C#开发环境(对象事件)基于AE二次开发GIS系统(AE+C#)C#开发环境(对象事件) privatevoidaxMapControl1_OnMouseDown(objectsender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvente)//处理地图鼠标事件

{ switch(m_CurMapEventStyle)//判断地图时间类型,地图浏览or编辑or分析

{ caseMapEventStyle.MapView: m_MapView.MapEvent(e); break; caseMapEventStyle.MapEdit: m_MapEditor.MapEvent(e); break; caseMapEventStyle.MapAnalysis: break; default: break; } }

AE支持的数据格式

基于文件的数据集

1.Coverages 2.Shapefiles 3.栅格

4.不规则三角网(TIN)

5.影像(多种各式)

6.矢量产品的格式文件

7.计算机辅助设计文件(多种格式)

8.地理标志性语言(很多的概述)

9.表(很多的格式)

10.直接读取100+矢量和栅格格式

11.可扩展标示语言(XML)

AE支持的数据格式 Geodatabase数据集

1.带有其特殊类型的DB2 2.具有其特殊类型的Informix 3.结构化查询语言SQLServer 4.Oracle 5.OraclewithSpatialorLocator 6.个人Geodatabase(MicrosoftAccess)

AE支持的数据格式常用数据类型介绍

1.Shapefile:一种基于文件方式存储GIS数据的文件格式。至少由.shp,.dbf,.shx三个文件作成,分别存储空间,属性和前两者的关系。是GIS中比较通用的一种数据格式。

2.Coverage:一种拓扑数据结构,一般的GIS原理书中都有它的原理论述。数据结构复杂,属性缺省存储在Info表中。目前ArcGIS中仍然有一些分析操作只能基于这种数据格式进行操作。

3.Geodatabase:ArcInfo发展到ArcGIS时候推出的一种数据格式,一种基于RDBMS存储的数据格式,其有两大类:1.PersonalGeodatabse用来存储小数据量数据,存储在Access的mdb格式中。2.ArcSDEGeodatabse存储大型数据,存储在大型数据库中Oracle,SqlServer,DB2等。可以实现并发操作,不过需要单独的用户许可。基于AE二次开发GIS系统(AE+C#)

AE能实现的功能 通过AE可完成绝大部分的GIS功能:

1.空间数据的显示、查询检索、编辑和分析;

2.创建各种专题图和统计报表;

3.高级的制图和输出功能;

4.空间数据管理和维护;AE主要模块 1.3DAnalystExtension用于3D可视化和表面建模的组件对象;

2.ApplicationFramework让开发者在ArcMap和ArcCatalong中通过程序来定制用户界面。

3.ArcCatalog能够让开发者扩展数据对象模型并集成定制对象和视图到ArcCatalog应用框架中。

4.ArcMap提供了ArcMap应用程序的核心功能,用于操作和显示地图文档。

AE的主要模块 5.ArcMapEditor包括了对象编辑器扩展组件对象,要做编辑开发来这吧。

6.DisplayGIS的一个重要应用就是数据表现,对国内的许多最终用户更是热衷于此,利用这里包含的对象可以完成诸如地图符号显示、图形编辑反馈轨迹、坐标转换和屏幕控制等功能。

7.Geocoding主要用于创建和管理地理编码服务等。

AE的主要模块 8.GeodatabaseAE开发中一个不可或缺,毕竟GIS的应用都是围绕数据展开的,所以有关的GIS数据创建、加载、管理和存储等都是通过这里的对象进行的。

9.Geometry不管是要素还是图形,涉及到空间信息的获取和应用来这儿找吧。

10.IMS提供了连接到ArcIMS服务器并访问ArcIMS图象和要素服务的功能。

11.NetWork提供了网络创建、管理和完成分析操作等功能,打算定制和开发特定网络应用可以利用NetWork对象。

AE的主要模块 12.OutPut有入就有出,如果想把制作好的地图输出怎么办,通过这里提供的对象来完成吧。

13.Raster用于访问和管理栅格数据的AO对象。

14.SpatialReference用于完成空间参考的设置。

15.StreetMapUSAExtension这个和国内的用户关系不大。AE核心组件库System库

Sysytem库是ARCGIS框架中最底层的库,提供一些可以被其他组件库使用的组件,如数组(Array)、集合(Sets)等。SystemUI库

SystemUI库定义了一些被ARCGIS用户界面组件所使用的对象,如(ICommand,ITOOL)。Geometry库Geometry库包含了核心的几何形体对象,如点、线、面。还包含了空间参考对象,如几何坐标系统、投影坐标系统和地理变换对象。AE核心组件库Display库

Display库主要包含了输出在设备上图形所需要的组件对象,包含Display、Color、Symbol等对象。DisplayUI库DisplayUI提供具有可视化界面的对象用于辅助图形显示,如(PropertyPage和StyleGalleryCalss对象)。Carto库

Carto库包含为了数据显示和服务的各种组件对象。如(MapElements、Layers)。AE核心组件库DataSourceFile库

DataSourceFile库的对象用于打开文件格式的地理数据,通过使用特定的WorkSapceFactory(工作空间工厂)对象打开数据。DataSourceRaster库

DataSourceRaster库的对象昂用于获取保存在多种数据源中的栅格数据。GeoDataBase库

GeoDataBase库包含的对象用于操作地理数据库的。包含(WorkSpace)、DataSet,还包括几何网络、拓扑、TIN、版本对象、数据转化等。AE接口编程AO是基于COM的。COM的概念:对象类,对象,接口,方法等。 在OMD(对象模型图)中有三类class,分别是抽象类(AbstractClass)、组件类(CoClass)和普通类(Class)。 抽象类的主要目的是为它的子类定义公共接口,一个抽象类将把它的部分或全部实现延迟到子类中,因此,一个抽象类不能被实例化。一个组件类对象可以被直接创建,普通类对象虽然不能直接创建,但它可以作为其它类的一个属性或者从其它类的实例化来创建。AO中的Dataset或Geometryclasses是抽象类的示例,一个Geometry类型对象不能被创建,但是一个Polyline可以被创建。这个Polyline对象实际上在抽象类的基础上实现了Geometry中定义的接口,因此在基类对象中被定义的接口可以从coclass来访问。

AE接口编程

在OMD中的关系类型主要有类型继承(Typeinheritance)、创建(Instantiation)、组成(Composition)以及关联(Associations)等。类型继承类似于c++的继承机制,实际上就是继承完全继承了超类的接口,这点可以利用AO对象浏览器工具清楚的看到,而组成关系指的是对象间的主次关系,也就是说主体的生命存在与否决定着次体的存在与否。

AE接口编程(C#代码) IMappMap=NewMapClass();

pM=”地图名称为-Tour”

…….

…….

pMap.ClearLayers();

pMap.Clear();//Error

AE接口编程(C#代码)在COM中对对象的访问是通过接口来完成,因此不能象许多可视化控件那样,可以直接通过其名称来调用属性或执行其方法。那么这句其实就是定义了一个接口变量(准确地讲应该是一个指向接口的指针变量才对,C#不使用指针。)有了这个接口变量还不行,因为接口是定义在对象上的,那么下来的步骤应该是产生一个对象,而对象来自类。

AE接口编程(C#代码) IMappMap=NewMapClass(); 在这句中不单纯只是实例化出一个Map对象,并且将上句的pMap接口变量做为了该对象的缺省接口。可以通过这个接口来对地图名进行修改,或者调用ClearLayer方法来删除掉该地图中的所有图层了。代码最后一句的执行情况会出错,原因很简单,不同的接口中的方法或属性只能通过其接口来访问,而Clear方法属于Map类的另外一个接口IActiveView所有。AE接口编程(C#代码)

可以通过查询接口(QueryInterface)来切换到IActiveView上。代码如下: IActiveViewpView=pMapasIActiveView;IActiveViewpView=(IActiveView)pMap;pView.Clear();基于AE二次开发GIS系统(AE+C#)AE命令

AE通过ICommand接口提供大量操作命令来完成一些基本功能。

ICommandco

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论