ArcEngine二次开发入门介绍

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
独立的产品。
2021/5/27
4
AO的功能
通过AO你可完成以下GIS功能:
❖ 空间数据的显示、查询检索、编辑和分析;
❖ 创建各种专题图和统计报表;
❖ 高级的制图和输出功能;
❖ 空间数据管理和维护;
❖ ……
2021/5/27
5
AO编程基础----COM




COM是Component Object Model的缩写

属性
哑铃形状的图标
Property Get
(read)

Property Set
(write)
方法
2021/5/27
18
设置属性

属性传值: 大部分 ArcObjects的属性
属性保存了一个对象的值或者一个拷贝
不需要使用Set关键字
= "Port Moresby" 'No Set keyword

2021/5/27
27
ArcGIS Engine 组成
两个产品:
❖ Engine开发包是创建自定义的GIS和制图应
用的工具包
❖ Engine运行时是为了运行自定义的Engine应
用的可分发的ArcObjects.
2021/5/27
28
ArcGIS Engine 开发包


组件,APIs,工具的集合,开发人员可以用来创建高级的
平台上。
COM通常的发布形式是:以win32动态链接库(DLL)或可执
行文件(EXE)的形式发布。
2021/5/27
6
COM的目标和特性



建立在二进制代码级上的可重用性;
语言无关性,只要其能生成符合COM规范即可;
对使用COM对象的客户程序而言的进程透明性;
2021/5/27
7
庞大的COM组件集合
2021/5/27
10
解析对象模型图
OMD中的类有:
❖ 抽象类(Abstract Class):不能用于创建对象,但可以用来指定子
类。(通过类型继承)。
❖ 组件类(CoClass):可以直接创建对象。
❖ 普通类(Class):不能直接创建对象,但可以作为另一个类的属性
或者通过另一个类的实例化来创建对象。
在OMD中的关系类型主要有:
❖ 类型继承(Type
A和B为普通类对象,C为组件类对象,D为一普通类,
inheritance)
❖ 创建(Instantiation)
如下面代码:
❖ 组成(Composition):对象间的主次关系
A = B.writeA()
A = C.writeA()
❖ 关联(Associations

A = New D () X
普通类不能通过New方法产生
A的生命周期是由产生它的对象B和C控制的
2021/5/27
11
ArcObjects UML关系符号
抽象类
实例化
继承
组件类
组成

2021/5/27
关联
12
ArcObjects UML关系符号例子





继承
组成
用来创建

对应关系 1:N
联合
ArcGIS9 新的开发产品
❖ 从核心的ArcObjects组件构建
❖ 创建独立应用或者集成到第三方系统

2021/5/27
23
2021/5/27
24
ArcEngine功能
读取所有支持的ESRI数据格式,包括
geodatabase
❖ 地图制作(创建和编辑MXD)
❖ ArcGIS级别的绘图
❖ 查询和分析

属性传引用: 一些 ArcObjects的属性
属性保存了一个对象的引用
必须使用Set关键字
Set pLayer.FeatureClass = pMoresbyData
'Must use Set!
如果引用对象发生了变化,对象的属性将同步受到影响
2021/5/27
19
查找接口

接口棒棒糖类型的图标 (Leabharlann )继承接口是有效的
该接口被本类使用.
所有的属性和方法都列表在类图中.
这些接口也是有效的。但是详细的
属性和方法必须在其它地方浏览。
(e.g., Object Browser).
2021/5/27
20
ArcObjects OMD图表上的虫洞


概念上,这是一个对象模型
事实上, 被分别在几张图表里存放
虫洞表现了图表与图表间的连接关系
ArcEngine开发
入门介绍
2021/5/27
1
内容简介
ArcGIS产品体系
❖ ArcObject简介
❖ ArcEngine概况
❖ 简单的ArcEngine开发实例
❖ 开发资源

2021/5/27
2
ArcGIS产品体系
2021/5/27
3
ArcObject简介

AO是ESRI公司ArcGIS家族中应用程序的开发平台

从一个 Map中取得图层对象
图层对象有多种的类型 (
)
MxDocument
*
Map
IMxDocument pMxDoc = LoadMxdDoc
(@"c:\Temp\test.mxd");
IMap pMap = pMxDoc.FocusMap;
ILayer pLayer = pMap. get_Layer(1);

CoClass
Abstract
*
_____
小鸡
CoClass
*
羽毛
Class
2

Class
翅膀
Class
2021/5/27
13
ArcObjects 对象例子

类和他们相应的对象
Application
MxDocument
Map
Layer
*
*
FeatureLayer
2021/5/27
14
抽象类( Abstract Class )
8
理解对象模型图(OMD)


OMD是基于OMT(Object Modeling Technique)
的表示方法,先来看看OMD能帮我们做些什么?
1. 该类支持哪些接口;
2. 完成任务需要哪些对象;
3. 如何使用该类的对象;
4. 是否可以直接实例化类;
5. 接口有哪些方法和属性;
6. 是否有其它类也支持该接口;


可创建类的OMD符号:3维阴影矩形
2021/5/27
16
类 (Class)

不能直接创建的类
不能使用New关键字来创建

从其它对象处获得实例
IRow pNewRow = pTable.CreateRow()

❖2021/5/27
实例化类的OMD符号:

3维没有阴影的矩形
17
属性和方法的符号

不能创建或实例化
抽象类永远不能有实例

为子类定义了泛化(general)
子类集成了抽象类的接口

抽象类的OMD 符号: 2维阴影矩形
2021/5/27
15
组件类 (CoClass)

可以创建:使用 New关键字
IMap pMap = new MapClass()
实例化: 从其它对象获得
IMap pMap = pMxDocument.FocusMap()
Printer和转换输出对象Export。前者可以将视图上的地图通过打印机进
行输出,而后者包含的丰富对象,可以将地图转换为多种格式的矢量或
者栅格形式的数据,如EMF、PDF、JPEG、TIFF等。

Framework类库 :arcgis程序存在一个内在的框架,所有的ao组件对象
都在这个框架中扮演了不同的角色,它的协作可以完成arcgis提供的gis
❖ 地理编码
❖ 简单编辑
❖ ……

2021/5/27
25
AO与AE的联系与区别
联系:
1.ArcEngine包括核心ArcObjects的功能,是对AO中的大部分
接口、类等进行封装所构成的嵌入式组件。
2.AE中的组件接口、方法、属性与AO是相同的。
❖ 区别:
1.开发环境:ArcObjects必须依赖ArcGIS Desktop桌面平台,
GIS应用
组件
---Engine库:制图,绘制,选择,编辑等
---Control库:地图控件,布局空间,工具条等

APIs
---COM, .NET, JAVA, C++

工具
--- ArcGIS Developer Kit
--- Documentation
--- Developer Utilities
面等,即在AO中的要素和图形元素的几何形体都可以在这个组件库中寻
找到。除此之外,这个库还包含了空间参考对象,包括
GeographicCoordinateSystem(地理坐标系统)、
ProjectedCoordinateSystem (投影坐标系统)
GeoTransformations(地理变换)对象等。
它不仅定义了组件程序之间进行交互的标准,而且也提供了
组件程序运行所需要的环境。COM本身要实现一个称为
COM库(COM library)的API,它提供诸如客户对组件的查询,
以及组件的注册/反注册等一系列服务。
一般来说,COM库由操作系统加以实现,我们不必关心其
实现的细节,COM主要应用于Microsoft Windows操作系统
功能。这个框架中的某些核心对象被放置在Framework 库中。
2021/5/27
29
ArcGIS Engine 类库体系结构
2021/5/27
30

System类库:System类库是ArcGIS体系结构中最底层的类库。System
类库包含构成ArcGIS的其他类库提供服务的组件。System类库中定义了
大量开发者可以实现的接口。开发者不能扩展这个类库,但可以通过实
ArcGIS 9.2 与 9.3 间的类型(接口、COM类、枚举、结构)变化列表
Enum
Struct
Interface
COM
Total
ArcGIS 9.2
1106
40
4824
3847
9817
ArcGIS 9.3
1194
51
5206
4049
10500
备注: 不包括类型库中隐藏或受限制的类型.
2021/5/27
即购买安装了ArcGISDesktop的同时,安装ArcObjects,才
能利用AO进行开发;ArcEngine是独立的嵌入式组件,不依
赖ArcGISDesktop桌面平台,直接安装ArcEngine Runtime
和DeveloperKit后,即可利用其在不同开发语言环境下开发。
2.功能:AO的功能更强大,AE的功能相对弱些,AE不具备


Display类库:Display类库包含用于显示GIS数据的对象。它包括
Display对象、Color对象、ColorRamp对象、DisplayFeedback对象、
RubberBand对象、Tracker对象、Symbol对象。
2021/5/27
31

Output类库: Output类库包含了AO中的所有输出对象:打印输出对象
现这个类库中包含的接口来扩展ArcGIS系统。

SystemUI类库 :SystemUI类库包含用户界面组件接口定义,这些用户
界面组件可以在ArcGIS Engine中进行扩展。包含ICommand、ITool和
IToolControl接口。开发人员可以通过使用这些对象简化用户界面的开发。
Geometry类库:Geometry类库包含了核心的几何形体对象,如点、线、
7. 对象间的关系。
2021/5/27
9
在哪里可以找到ArcGIS OMD图表


Start > Programs > ArcGIS > Developer Help
简单的、详细的类图
PDF files
软件安装的目录中
一般在 安装目录\DeveloperKit\Diagrams下
电子书籍光盘中
// Is pLayer a FeatureLayer?
if( pLayer is IFeatureLayer )
{
MessageBox.Show( "Yes!, it’s a feature layer" );
2021/5/27
}
*
Layer
FeatureLayer
Others
22
ArcEngine概况

它是基于Microsoft® COM技术所构建的一系列COM组件集。

AO是随ArcGIS产品一同发布的,要使用AO必须购买
ArcGIS Desktop,才能利用AO提供的组件对象来进行应用
开发。

在ArcGIS9 中发布了一个新的产品:ArcGIS Engine,
ArcGIS Engine 基于AO,并且实现了更好的封装,是一个
AO的少部分功能。


ArcEngine具有简洁、灵活、易用、可移植性强等的特点。
2021/5/27
26
ArcGIS Engine 扩展模块
Geodatabase Update
❖ Spatial
❖ 3D With Global Visualization

Engine开发包包括了高级的Engine扩展模块
虫洞
2021/5/27
Element on
ArcMap OMD
FeatureLayer on
Map Layer OMD
21
例子: MxDocument > Map > layer

从当前的文档中取得聚焦的Map (active data frame)
MxDocument 可以包含一些 Maps ( * )
相关文档
最新文档