2023年11月30日发(作者:)

前言

本文对ArcObjects开发进行一个初级介绍,主要面向开发人员。

第一章 了解ArcObjects

欢迎加入AOArcObjects的缩写)的世界! 本节将把您引进AO的天地,并回

答一些相关的问题,如:AO是什么,为什么AO使得开发功能更加强大,如何

学习和获取相关的资源信息。

11 AO是什么?

AOESRI公司ArcGIS™ 家族中应用程序ArcMap™, ArcCatalog™ 和

ArcScene™的开发平台,它是基于Microsoft® COM技术所构建的一系列COM组件

集。应该澄清的是到目前为止,AO还不是一个独立的应用产品, 是依附在你的

ArcGIS DeskTop产品中的软件开发包。也就是说,你购买了ArcGIS Desktop

任何一个产品,不管是ArcView还是ArcInfo,你都有了这套强大的AO组件集,

利用AO提供的组件对象来进行应用开发。

12 AO的功能

通过AO你可完成以下甚至更多的GIS功能:

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

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

Ÿ 高级的制图和输出功能;

Ÿ 空间数据管理和维护;

„„„„„„„„„„

等等。其实是ArcMapArcCatalogArcScene这三个应用程序都是由AO搭建

起来的,因此从理论上讲这些应用程序能完成的任务,通过AO同样可以完成(但

重新搭建一个ArcMap式的应用程序先不考虑其代价,就可靠性和稳定性而言就

值得怀疑,在以后的内容里我会谈到这个问题)我们现在绝大部分时候要做的

---就是要利用ESRI提供的这些AO组件来进行积木式的组装任务。 AO已经提

供了许多底层的基本功能,而你的任务是按照应用需求将这些底层功能组装集合

成一个更强大的COM对象。我们现在知道AO是基于微软的COM技术来构建的,

因此它的开放性和扩展性很强大。这儿的开放性是指在开发环境的选择上可以有

VBAVBVC++DEPHI等多种支持COM标准的开发工具,而扩展性是指AO组件

没有提供的功能,如需要定义一种新的数据格式,你就可以利用COM技术来写自

己的COM组件,AO组件库进行扩展补充。ESRI的文挡中曾经看过类似‘用

AO开发功能是没有限制的,这取决于你的想象力’这样的话,是不是觉得有些

很狂妄。喔,不要理解错啊,AO的确非常强大 ,看看ArcMap给我们展现出来

的功能就知道了。由于采用了COM技术,因此你不但可以在AO的基础上构造自

己的COM组件,而且可以自己来完成一个COM组件来对AO进行补充。至于为什

AO会基于COM技术,就我个人而言,目前和以后GIS的发展会和主流IT技术

融合的越来越紧密,毕竟任何一个软件产品最终是要拿来用的,所以除了提供专

业的GIS功能外,从易用性和扩展性来说也是极其重要的,COM技术提供了一

个解决之道。是不是有些罗嗦,强调其重要性的理由无非是在开始我们对AO

开发前先需要您打针兴奋剂,虽然功能强大、使用方便的应用程序从来不是简单

的几行代码和控件的拖来拖去就可以搞定的,还需要您不断地学习和掌握更多的

新的东西,但对于一个开发人员而言这些投入是值得的,对于尝试利用AO做开

发的人员也是如此。那我们还不开始吗?

13 需要的技术基础

如何进入AO软件的领域开发?对于高级的AO程序设计人员我想必须跨越四大技

术障碍:

1 面向对象技术思想;

2 COM技术;

3 AO各组件对象的层次组织和相互关系;

4 支持COM的各种开发工具及其环境(如VBVCDEPHI等)

真正属于ESRI自己的东西无非就是这套AO组件库。对于初次进入AO开发领域

的人员来说,我个人觉得(至于COM还有其它暂时可以先放一边,照猫画虎完成

许多任务还是没有问题的了)可以先从ArcGIS Desktop的应用开始,对AO的层

次及相关概念有一个了解(如MapLayerViewLabel支持的数据格式等)

否则等看到AO的示例时可能会一下子云里雾里,两厢印证我觉得最有可能豁然

贯通吧。

14 AO开发工具包

AO开发工具包的安装可以选择在安装ArcGIS Desktop时,也可以任何时候使用

安装光盘下的ArcGISArcObjects Developer Kit目录下的文件进

行安装。下面是AO开发包安装完成后的目录结构:

Arcobjects Developer Kit

Help --- 包含开发帮助文件:,

Kits --- 附加的开发者素材诸如投影引擎头文件,类别ID文件和ESRI 示例命

令的源代码 (在最新的8.2版本中,该代码位置有所变化)

Object Model Diagrams --- 包括所有的PDF格式对象模型图

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

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

15 AO开发资源

1.《ArcObjects Developer Help ----- 这是AO开发的首选资源,个人觉得

一定程度上甚至可以和微软的MSDN相媲美。不管是AO的基础COMAO的对象层

次图都提供了说明,此外还提供了大量的开发示例。

2ArcObjects Online ----- 提供了最新的AO组件库文档,其中有一个关

AO的技术论坛相信会让大家有很多意外的收获;

3.《Exploring ArcObjects -----一本很不错的AO技术文档,对AO的开发

进行了很好的组织,而且有大量的示例,可以随时复制利用;

4.《Building a Geodatabase -----应用都是围绕数据来展开的,这本书主

要是用来设计和创建Geodatabase的,但理解和掌握Geodatabase的层次和建摸

方法,对AO的开发是很好的补充。

5Microsoft MSDN----即使你的AO开发工具不是微软的,也建议安装一套

完整的MSDN,想多了解和应用COM进行设计开发,MSDN是个宝藏。

第二章 AO的基础-----COM

组件化程序设计思想在今天应用已经非常普及,那么关于COM都有哪些东西

呢? 在本节中我会介绍什么是CLASSOBJECTINTERFACECOM等相关

概念。

2.1 CLASS AND OBJECT(类和对象)

要介绍COM就不能不提到面向对象思想,那么让我们先来看看什么是对象吧?

在日常生活中,你我都是一个个对象,有姓名,有身高、体重等外在的特征,也

有各自所具备的工作技能,也需要彼此间进行语言交流,同样在开发应用和GIS

中也有对象的概念存在。

你在窗体上使用了一个控件,这个控件本身有大小、位置、颜色、名称等一系列

称之为属性Properties的外在表示,而且也会有CLICK等称之为事件Events

的通信动作存在。在AO的世界里,每个东西都是一个对象,有象MapForm

Layer这些我们可以看到的对象,也有在表中产生查询结果集时的游标Cursor

-这类不可见的对象。那么对象是如何产生的呢?哦,它是由类(CLASS)实例

化产生的,许多AO类对我们来说很熟悉(象Point,Line,Polygon,Layer,Table,

果你对GIS还不是很陌生的话)。不用太多的废话,就先实际进入AO来展示下

什么是类和对象吧。

Map Class

Properties Methods

MapScale (1:3,800,000) AddLayer (+)

MapUnits (6234233.32,5234234.56) ClearSelection

(很遗憾在这里我不能用图形来表达上述概念,突然觉得有些滑稽—在写一个

GIS的话题)

如果你用过ArcMap应用程序并且还有印象的话,你会发现这个MapScale其实

就是应用程序中那个文本框的内容,而AddLayer这个方法呢好象就是那个用来

增加图层的“+”的行为。

2.2 COM是什么?(关于COM实在有太多的东西,以下的内容对AO的初始开

发者而言,权当是一个了解吧,现在大可不必去深究)

终于开始COM了,一个很沉重也很值得玩味的东西,我想许多AO的开发

者对此都会有不同的感受。COMMicrosoftComponent Object Model缩写,

它不仅定义了组件程序之间进行交互的标准,而且也提供了组件程序运行所需要

的环境COM本身要实现一个称为COM(COM library)API它提供诸如客

户对组件的查询,以及组件的注册/反注册等一系列服务,一般来说,COM库由

操作系统加以实现,我们不必关心其实现的细节,象大家经常看到的ActiveX

DirectX,OLEDB都是基于COM技术的)主要应用于Microsoft Windows操作系

统平台上。COM通常的发布形式是:以win32动态链接库(DLL)或可执行文件

EXE)的形式发布。

2.3 COM的目标和特性

Ÿ 建立在二进制代码级上的可重用性(通过包容和聚合)

Ÿ 语言无关性,只要其能生成符合COM规范即可;

Ÿ 对使用COM对象的客户程序而言的进程透明性;

2.3 对象、类和接口

对象是COM的基本要素之一,C++中的对象不同的是其封装特性是真正意义

上的封装,对于对象使用者(通常称为客户)而言是不可见的,此外,COM

象的可重用性表现在COM对象的包容和聚合,一个对象可以完全使用另一个对

象的所有功能,而C++对象的可重用性表现在c++类的继承性。

接口是指组件对象的接口,它是包含了一组函数的数据结构,通过这组数据结构,

客户代码可以调用组件对象的功能,组件对象间的访问都是通过接口来进行的。

接口设计必须满足:

1 必须直接或间接地从IUNKNOWN接口继承(该接口在AO中是省缺的)

2 接口必须有唯一的标识符号;接口不变性,一旦分配和公布了IID,接口定

义的任何因素都不能改变。

COM开发意味着使用接口,也可以称为基于接口的设计模型。对象间的所有

通信都是通过它们的接口来进行的,COM接口是抽象的,意味着相关的接口没

有实现,和接口相关的代码来自于一个类实现。如何实现接口对于不同对象是不

同的,因此对象只是继承接口的类型,而不是它的实现,这称为类型继承。功能

用接口被抽象地构造,并且用类去真正实现。COM中类和接口通常被当作

什么怎么做,接口定义一个对象能做什么,类定义它怎么去做。

COM类提供了一个或多个接口相关的代码,因此功能实体封装在类中。几个类

可以有同样的接口,但是它们的实现可能是极不相同的。通过实现这些接口,

COM实现了面向对象的多态性,COM不支持多重继承概念,然而,这不是一个

缺点因为一个类可以实现多个接口。

2.4 COM的其它组成

COM对象的接口可以是双接口,双接口不同于普通接口(Custom Interface)之

处在于双接口是从Automation基本接口Idispatch继承的,而普通接口是从

Iunknown接口直接继承来的,缺省的接口模型是双接口模型是双接口。

2 入接口和出接口(Inbound interface,Outbound interface)

COM调用既可以是单向的(即客户程序创建组件对象,然后客户程序调用对象

所提供的功能,在适当时候再把对象释放掉)通常称为入接口。如果一个COM

对象支持一个或多个主动与客户程序进行通信的接口,则这种接口称为出接口,

是因为这些接口并不由对象实现,而是由客户程序实现。类型库(Type Library)

一个类型库被作为一个接口定义语言IDL文件的二进制版本,是一系列COM

对象和接口的集合,并被编译进一个形如OLBDLLOCX这样的二进制文件

中。为了支持一个不依赖于开发语言工具的组件集,关于ArcObjects库所有相关

的数据都被打包进的类型库,它就包括了一个所有coclasses的二进

制描述,接口,方法和服务器类型。

Microsoft提供了多个COM接口用于类型库,这两个接口ITypeInfo

ItypeLib。利用标准的COM接口,不同的开发工具和编译器能够获得由一个特

定库支持的coclasses和接口有关信息。

4 双向COM支持 是指有可能既在一种语言中使用COM对象,又可使用这

种语言编写COM对象;

5 进程内COM、本地COM和远程COM

COM是一个客户/服务器体系,服务器(或对象)提供功能,并且客户程序使

用这些功能。如果COM程序和客户程序在同一进程地址空间内,则称之为进程

COM,这通常是以DLL形式实现,而本地COM是指同一计算机上不同进程

中的EXE,远程COM则是指不同计算机中的DLLEXE。有不耐烦或现在回

过头看这章而且存有疑问的人吗?讲了那么多COM AND COM,那么我在

DEPHIVB下用AO写一个DLL,这个DLL到底算什么呢?好,就让我来用

C/S的概念来做一个解释。如果你是自己写的应用程序框架,那么你的应用程序

就是客户端,而调用的DLL其实就是服务器了;如果你在ArcMap中,那么

ArcMap应用程序其实就充当了客户端的角色发出请求,这个请求通过COM

制传递给COM服务器那个你写的DLL来完成相应的功能,而这个服务器外

部和内部就是由ESRI AO的接口及类来完成的。

第三章 AO对象的使用

在第二章中我们谈到了许多关于COM的概念,象类,对象,接口,方法等,那

么一个实际的AO开发中是如何体现这些COM概念的呢---既然AO是基于COM

的。在本节中,我将使用VB代码来说明如何使用AO的对象,并对如何阅读

OMDObject Model Diagram)进行介绍。

31 AO对象的使用

让我们直接用AO相关的代码来开始这段旅程吧,如果你觉得的是的话。

Dim pMap as IMap

Set pMap = New Map

=”地图名称为-Tour”

„„„„„„„„.

„„„„„„„„.

ayers

//ERROR

如何运行这段代码是下一章的内容,先看看为什么代码会这么写吧,里面奥妙不

少。

Dim pMap as Imap

我们知道在COM中对对象的访问是通过接口来完成,因此不能象许多可视化控

件那样,可以直接通过其名称来调用属性或执行其方法。那么这句其实就是定义

了一个接口变量(题外注释:其实准确地讲应该是一个指向接口的指针变量才对,

好在VB把这一切都给演示了)。有了这个接口变量还不行,因为接口是定义在

对象上的,那么下来的步骤应该是产生一个对象,而对象又是从那里来的呢---

类。

于是就有了这样的代码Set pMap = New Map

在这句中不单纯只是实例化出一个Map对象,并且将上句的pMap接口变量做

为了该对象的缺省接口。OK,现在我们就可以通过这个接口来对地图名进行修

改,或者调用ClearLayer方法来删除掉该地图中的所有图层了。再看看增加最后

一句的执行情况会出错,至于为什么,原因很简单,不同的接口中的方法或属

性只能通过其接口来访问,Clear方法属于Map类的另外一个接口IactiveView

所有。可以通过查询接口(Query Interface)来切换IactiveView上。代码如

Dim mView as IactiveView

set mview=pmap

32 OMD的作用

OMD(对象模型图)是基于OMTObject Modeling Technique)的表示方法,先

来看看OMD能帮我们做些什么?

1 该类支持哪些接口;

2 完成任务需要哪些对象;

3 如何使用该类的对象;

4 是否可以直接实例化类;

5 接口有哪些方法和属性;

6 是否有其它类也支持该接口;

7 对象间的关系

33 OMD符号解释

OMD中有三类class,分别是抽象类(AbstractClass、组件类(CoClass)和普

通类(Class。抽象类的主要目的是为它的子类定义公共接口,一个抽象类将把

它的部分或全部实现延迟到子类中,因此,一个抽象类不能被实例化。一个组件

类对象可以被直接创建,普通类对象虽然不能直接创建,但它可以可以作为其它

类的一个属性或者从其它类的实例化来创建。AO中的DatasetGeometry classes

是抽象类的示例,一个Geometry类型对象不能被创建,但是一个Polyline可以

被创建。这个Polyline对象实际上在类的基础上实现了Geometry中定义的接口,

因此在基类对象中被定义的接口可以从coclass来访问。

OMD中的关系类型主要有类型继承Type inheritance创建Instantiation

组成(Composition)以及关联(Associations)等。类型继承我们在COM一章过

提到过,实际上就是继承完全继承了超类的接口,这点可以利用AO对象浏览器

工具清楚的看到,而组成关系指的是对象间的主次关系,也就是说主体的生命存

在与否决定着次体的存在与否。

34 AO的组织划分

整个AOOMD看起来密密麻麻,让人有些头晕眼花的感觉。还好,ESRI

整个AO进行了结构的组织分割,按照不同的应用领域可以找到相应的PDF

式的OMD。从AO开发帮助中我们可以发现划分为以下的几个子系统:

1 3D Analyst Extension ---用于3D可视化和表面建模的组件对象;

2 Application Framework ---让开发者在ArcMapArcCatalong中通过程序来

定制用户界面;

3 ArcCatalog --- 能够让开发者扩展数据对象模型并集成定制对象和视图到

ArcCatalog应用框架中;.

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

5 ArcMap Editor--- 包括了对象编辑器扩展组件对象,要做编辑开发来这吧;

6 Display --- GIS的一个重要应用就是数据表现,对国内的许多最终用户更是

热衷于此,利用这里包含的对象可以完成诸如地图符号显示、图形编辑反馈轨迹、

坐标转换和屏幕控制等功能;

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

8 Geodatabase--- AO开发中一个不可或缺,毕竟GIS的应用都是围绕数据展开

的,所以有关的GIS数据创建、加载、管理和存储等都是通过这里的对象进行

的;

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

吧;

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

11 NetWork--- 提供了网络创建、管理和完成分析操作等功能,打算定制和开

发特定网络应用可以利用NetWork对象;

12 OutPut ---有入就有出,如果想把制作好的地图输出怎么办,通过这里提供

的对象来完成吧;

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

14 Spatial Reference--- 用于完成空间参考的设置;

15StreetMap USA Extension---这个和国内的用户关系不大。

诚然,AO的开发中对象的层次和相互关系是极其重要的,稍有撼缺的是OMD

中的对象层次组织看起来有些纷乱,个人觉得《Exploring ArcObjects》里的对象

模型图更适合入门使用-----它将一些常用和重要的对象抽取出来并以上下层次

结构来表示。

絮语闲聊,权当消遣- 最近抽时间整理一些以前写的程序,也开始了解MOESRI

MapObject)的应用,有些感受一起吐出。在GIS应用中最大的工作就是数据的

采集整理了,虽然你可以采用MOMAPX等一些地图控件(我曾经还看到过一

个南非人用DEPHI写的地图控件,也是很有些特点的)如果你够超人,甚至可

以自己去做一个地图控件,来完成一个实用性也很个性化的系统出来。可是它终

究只是一个应用系统而已。 ???你应该知道我要讲什么的了吧。所有的应用

都是基于一定的数据结构,你可以在自己的应用开发中定义数据模型,但是数据

的来源呢。不是CAD,就是COVERAGESHAPE(标准嘛)你可以针对一两

种数据格式进行转换,只是现实中的数据类型是多样的,总不能都去写吧,况且

你的数据格式能否得到认可呢。再想想看你要做多少工作---那是一个GIS平台

才能完成的事情。这就是许多情形下我们为什么没法完全用底层或地图控件去写

一个完整GIS系统主要的原因吧。

扯远了。。在本章中,我会实现一个特定功能的DLL,用来说明AO开发开发

的几种模式,AO工具包的使用,如何应用写好的组件。ArcObjects Developer

Help中有许多完整和详尽的示例代码,这儿主要想就方法做一个简要的说明。

41 选择一个开发模式

AO可选的的开发方式可以分为两种,一种是在ArcMap应用框架基础上进行定

制开发,另一种是脱离ArcMap应用框架去开发独立的应用程序。通常情况下,

我们都是在ArcMap框架下进行定制开发。开发环境可以选择ArcMap本身自带

VBA,也可以选择VBVCDEPHIAO 8.2以上的版本开始支持C#

42 选择一个开发工具

作为首选的是VB语言这样不管是在VBA还是编写COM组件,你都有最充

足的资源可以使用(AO开发文档中最多的SAMPLE就是VB代码了)。第二种

VC(我更愿意将VC做为一个强有力的后备工具)第三种在我看来应该是一

种无奈之举了,即用DEPHI(有一堆人该贬我了:)一直对DEPHI是仰慕有加

心仪已久的,只是在AO中有关DEPHI的例子太少了,这对快速应用开发来说

是致命的)

43 最简单的”Hello,world”程序

讨论开发工具多少有点离题,现在让我们来转回到一个出名的小应用程序—

Hello,world”,许多语言都是以此做为第一个应用的,我也就不例外了。

打开ArcMap应用程序,选择TOOLS菜单下的MACROS子菜单,打开其中的

VBA环境。选择Project工程下的ArcMap Object ,双击打开其中的ThisDocument

对象,在右边的编辑环境中选择对象列表中的MxDocument对象,在任务列表中

选择OpenDocumen,然后键入以下的代码:

//Private Function MxDocument_OpenDocument() As Boolean

Dim pmap As IMap

Set pmap = New Map

= "Hello,world"

MsgBox

//End Function

然后按CTRL+S保存后退出ArcMap当你再次打开你所保存的工程文档时看到

了什么?呵呵呵,不知道ESRI的设计人员看到这样的一个SAMPLE会不会晕

掉。

有人说了,你这一堆VB代码对我来说我搞不懂啊,我熟悉的是VC,总不能让

我先去学VB再来做AO开发吧。OK,没关系,下面我就以这个“Helloworld”

来写一个组件并在ArcMap中来使用。

1 启动VC,使用ATL COM AppWizard创建一个DLL工程;

2 INSERT菜单下选择NEW ATL OBJECT来增加一个ATL COM对象,

3 给这个COM对象就起个“world”的名字吧,选择Custom接口类型(至于为

什么不选择DUAL,你可以琢磨下)

4 在工作空间上选择Cworld类,并右键选择Implement Interface,在类型库中

引入ESRI OBJECT Library,选择你要实现的接口(这儿我们选择Icommand)

5 增加一个全局变量(IApplicationPtr m_ipApp;)来引用到一个应用程序。注

意到没有,这儿的接口变量定义和VB的有什么不同,除了本身的语法。就是接

口多了„Ptr‟。因此,在VC中如何使用AO的对象你现在应该猜到一些了吧。

6 下面的工作就是实现接口了。看看Iworld接口中都有哪些东西,哦,这个

OnClick()应该是我们想要做些事情的地方了。

// STDMETHODIMP CZoomIn::OnClick(){

IDocumentPtr ipDoc;

m_ipApp->get_Document(&ipDoc);

IMxDocumentPtr ipMxDoc(ipDoc);

IMapPtr ipmap;

ipMxDoc->get_FocusMap(&ipmap)

ipmap->put_Name(_bstr_t("Hello,world"));

„„„„

::MessageBox(NULL,_T("Hello World!"),_T("Wellcom AO"), MB_OK);

return S_OK;

//}

7.编译连接工程;

8. ArcMap中注册后就可以将该按钮直接拖放到ArcMap中来使用了。(当你

点击时,会弹出当前地图被修改后的名称----“Hello,world”

45 AO程序实现的一般过程

不管是用VB还是VC或是其它,要做的第一步就是在集成环境因入AO对象库

,剩下的工作在接口中实现你要做的事情。关于如何进入VB

VC开发的完整代码及说明,请参阅ArcObject Developer Help

可能是有感于独立AO应用程序开发群的迅速扩大,ESRI在其最新的ArcGIS8.2

MapControl

PageLayoutControl控件,这对于有制图应用的开发者来说无疑带来了福音。许多

时候可能会对组件和控件有些糊涂,其实Active X并不能代表整个COM,它只

COM对象的封装技术,由于COM对象使用的复杂性,因此才会创建框架(如

Active X控件)来简化它。所以这两个控件也可称为AO高级通用组件,它由

AO基础组件构造而成,面向通用功能,简化了用户开发过程,组件之间的协同

控制消息都被封装起来。这级组件经过封装后,使二次开发更为简单。如一个简

单的AO应用系统,若用基础AO组件对象开发,需要编写不少的代码,而利用

高级通用组件,只需几句代码就够了。

51 MapControl控件

MapControl控件提供了类似ArcMap中的数据视图(Data View)的窗口,通过它你

可完成以下甚至更多功能:

Ÿ 显示图层地图。

Ÿ 放大,缩小,漫游。

Ÿ 生成图形元素,如点,线,圆,多边形。

Ÿ 说明注记

Ÿ 识别地图上被选中的元素,进行空间或属性查询。

Ÿ 标注地图元素。

总之在ArcMap中能能够完成的大部分任务,通过MapControl控件也可以完成。

通过设置MapControl General, Layers, Map 属性,你甚至不需要写一行代码可以

获得一些GIS功能。关于MapControl控件有许多完整的应用示例,存放在

ArcObjects Developer KitSamplesControls目录下。

52 PageLayout控件

PageLayout控件提供了类似ArcMap中的版面视图的窗口,它有以下的属性、

法和事件:

· 管理控件的外观设置

· 管理控件的显示属性

· 管理页面属性

· 在控件中增加和查找元素

· 加载地图文档到控件

· 可以直接从资源管理器和ArcCatalog中拖放数据到控件中

· 打印页面设计.

至于它的功能嘛,ArcMapLayout 视图能完成的工作,使用PageLayoutControl

同样可以完成,象增加和设置图例、打印输出等许多功能。关于PageLayout

件有许多完整的应用示例,也存放在ArcObjects Developer KitSamplesControls

目录下。

53 MapControlMapObject的关系

确切地讲,MapControlMapObject控件没有直接的联系。首先,MapControl

控件是AO的一部分,至少到目前为止它还不是一个独立的产品,而MapObject

ESRI的一个独立的低端应用产品。第二,MapControlMapObject功能要强

大许多和完善许多,MapObject产品的定位就是提供一些基本的地图功能,高级

的功能这得完全靠开发者自己去实现,而依托强大的AO组件库MapControl

以实现许多高级的GIS分析及应用。