ArcGIS Engine二次开发入门2
ArcGIS二次开发

第一章z开发基础1.1组件对象模型在明确讨论COM之前,有必要先一般性地思考一下软件组件使用的广泛性。
在软件组件背后有许多的驱使因素,但最基本的就是软件开发是个昂贵和耗时的风险行为。
在理想的世界里,假如曾经写了一段代码,然后通过不同的开发工具一次一次的反复使用它,这种情况是可能的,即便是在最初的开发者不能预见的环境下也能使用。
理想情况下,对最初开发者生成的函数功能的改变能在不需要目前用户改变和重编译他们的代码情况下实现。
早期重用代码块的尝试就是创建类库的进展,这些类库通常用C++开发。
早期的尝试有很多的限制,较为明显的是:共享系统组件的困难(共享二进制C++组件是非常困难的——大部分的尝试是共享源代码);不重新编译就很难保存和更新C++组件的问题;缺乏好的建模语言和工具以及属性接口和定制工具。
为了解决这样那样的一些问题,许多软件工程师开始采用基于组件的方法进行系统开发。
一个软件组件就是一个可重用代码的二进制单元。
已经出现了几个不同但相互重叠的开发和共享组件标准。
微软的COM已成为建立交互式桌面应用程序事实上的标准。
在互联网上,JavaBean是可行的技术。
对象管理组(OMG)制定了粗粒度层次上适用于应用程序互操作的公用对象请求代理架构(CORBA)。
为了理解COM(以及所有基于COM的技术),认识到其不是一种面向对象语言而是一个协议或标准是非常重要的。
COM不仅仅是一种技术,还是软件开发的一种方法论。
COM定义了一种连接软件组件或模型的协议。
通过使用这种协议,可以建立能在分布式系统中动态交互的可重用软件组件。
COM还定义了一种称作基于接口的编程模式。
对象封装了能体现定义良好的接口后每个实例化对象特征的操作方法和数据。
这增强了系统开发的结构化和安全性,因为一个对象的客户并不知道某个特定方法如何实现的任何细节。
COM不规定应如何构建一个应用程序。
语言、结构和实现细节都由使用COM的应用程序开发人员决定。
GIS二次开发第二章AO基本理论

属性页
事件
“伙伴”控件
GIS二次开发
2.4 Arcobjects的常用控件
2.4.2 主要控件简要
在ArcGIS 中,Arcobjects包含的控件最多、最全。
主要包括:
地图控件(MapControl) 布局控件(PagelayoutControl) 工具条控件(ToolbarControl) 图层控件 (TOCControl) 三维显示控件(SceneControl) 全球显示控件(GlobeControl) 地图浏览控件(ReaderControl)
表示符号:
实例化(Instantiation)指定一个类的对象具有
能够创建另外一个类对象的方法。
GIS二次开发
2.3 使用对象模型图(OMD)
2.3.3 类与类之间的关系
聚合关系
表示符号: 聚合(Aggregation)是一种不对称的关联方式, 在这种方式下一个类的对象被认为是一个“整 体”,而另一个类的对象被认为是“部件”。
GIS二次开发
2.1 COM基础
2.1.2 什么是COM
COM(Component Object Modal的简写),即组 件对象模型,是组件类、组件接口和组件间相互说明的 集合。
COM不是一种面向对象的编程语言,而是微软公司推 出一种协议或者标准。 COM不仅仅是一种技术,更是一种软件开发的方法 (论)。
GIS二次开发
第2章 Arcobjects的基本知识
图2-1 控件、组建库、类和接口之间的关系
GIS二次开发
第2章 Arcobjects的基本知识
2.3 使用对象模型图(OMD)
ArcEngine二次开发入门介绍

ArcObjects OMD图表上的虫洞
概念上,这是一个对象模型 事实上, 被分别在几张图表里存放
虫洞表现了图表与图表间的连接关系
虫洞
Element on ArcMap OMD
FeatureLayer on Map Layer OMD
例子: MxDocument > Map > layer
或者通过另一个类的实例化来创建对象。
在OMD中的关系类型主要有: 类型继承(AT和yBpe为in普h通eri类ta对nc象e),C为组件类对象,D为一普通类, 创建(Inst如an下tia面tio代n码): 组成(ComAp=osBit.iwornit)eA:()对象间的主次关系
) 关联(AssAoc=iaCtio.wnrsiteA()
*
Layer
ILayer pLayer = pMap. get_Layer(1);
// Is( pLayer is IFeatureLayer ) {
FeatureLayer
MessageBox.Show( "Yes!, it’s a feature layer" ); }
从当前的文档中取得聚焦的Map (active data frame)
MxDocument 可以包含一些 Maps ( * )
从一个 Map中取得图层对象
MxDocument
图层对象有多种的类型 ( )
*
Map
IMxDocument pMxDoc = LoadMxdDoc (@"c:\Temp\test.mxd"); IMap pMap = pMxDoc.FocusMap;
������ GeoTransformations(地理变换)对象等。
第5章_ArcGIS Engine二次开发(基本功能)

图32 初次运行结果
3.1.4 添加基本的代码
➢ 我们没有书写任何代码,就得到了一个最简单的地图显示程序。但这 个程序还不能与用户交互,下一步我们需要添加一些代码,让程序能 响应用户的鼠标,完成放大和全图显示的功能。
图33 MapControl控件支持的所有方法
➢ 双击MapControl控件,可以进入代码编辑界面。从窗口上方的下拉 列表框中,我们能够看到MapControl能够响应的所有事件(关于每 个事件的详细使用方法等请参见帮助系统,第六章对帮助系统有更加 详细的介绍)。双击MapControl进入代码编辑界面的时候,默认的 是“OnMouseDown”事件,下一步就需要在这个事件中添加响应鼠 标的相关代码。
If pFeature Is Nothing Then Me.AxMapControl1.Refresh() MessageBox.Show("没有找到名为" & TextBox1.Text & "的州",
"Infomation", MessageBoxButtons.OK) Exit Sub
Else Me.AxMapControl1.Map.SelectFeature(pFeatureLayer, pFeature) Me.AxMapControl1.Extent = pFeature.Shape.Envelope
End If End If
➢ 运行程序,分别向编辑框中输入“Texas”和“RS”,键入回车,如 下图所示:
图39 Texas州查询结果
图40 RS查询结果
3.2.3 代码解释
If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then 上述代码是一个判断语句,即当用户输入回车的时候,开始进行查询。
ArcEngine二次开发入门

pRender.FieldCount = 1; pRender.set_Field(0, field); pRender.DefaultSymbol = symd as ISymbol; eDefaultSymbol = true;
for (int i = 0; i < values.Length; i++) { ISimpleFillSymbol symx = new SimpleFillSymbolClass(); symx.Style = esriSimpleFillStyle.esriSFSSolid; symx.Outline.Width = 0.4; symx.Color = colors[i]; pRender.AddValue(values[i], field, symx as ISymbol); pRender.set_Label(values[i], values[i]);
}
地图缩放的控制
修改m_mapControl.Extent可达到缩放效果。 缩放到任意范围:构建一个Envelope 缩放到图层:ILayer. AreaOfInterest 缩放到某地物:IGeometry.Envelope 缩放到选择集:合并选择集中所有 Geometry的Envelope
SimpleLineSymbol
public ISimpleLineSymbol CreateSimpleLineSymbol(IRgbColor rgbColor, double inWidth, esriSimpleLineStyle inStyle) { if(rgbColor == null) { return null; } ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbolClass(); simpleLineSymbol.Style = inStyle; simpleLineSymbol.Color = rgbColor; simpleLineSymbol.Width = inWidth; } return simpleLineSymbol;
ArcGISEngine开发2

ArcGIS 控件介绍
ArcGIS的控件是高度集成化的,首先能够让开发者构建 和扩展ArcGIS的功能,其次能够提供图形用户界面 (GUI)。
ArcGIS的控件被称为Active X控件,.NET控件。 MapControl ——类似于“数据”。 PageLayoutControl ToolbarControl TOCControl(Tablet of Contents Control) SceneControl GlobleControl ReaderControl
(3)窗体上添加控件,编写代码
打开.NET窗体,双击“工具箱”中“ESRI”标签栏中的 AxMapControl控件,将MapControl加入到窗体上,再将 AxToolbarBox也添加到窗体上。
在窗体上双击显示窗体代码窗口,加载图层到MapControl 中,在Form_Load事件中添加地图文档加载代码:
ArcObjects简介
ArcObjects是ArcGIS Desktop的开发平台。 ArcGIS Desktop是一系列GIS软件系统:ArcInfo,
ArcEditor和ArcView。这些系统服务于GIS。
ArcGIS Desktop系统包含一系列的应用,如ArcCatalog、 ArcMap、ArcToolBox和ArcScene,并能够集成大量不 同的扩展产品。如,ArcGIS Spatial Analyst(空间分析 模块),ArcGIS Geostatistical Analyst(地理统计分 析模块), ArcGIS 3D Analyst(三维分析模块)等。
工具栏控件(ToolbarControl)
ToolbarControl需要与一个“伙伴控件”一起工作。 “伙伴控件”可以是一个 MapControl,PageLayoutControl,SceneControl或者是 GlobeControl。
ArcGIS_Engine二次开发讲义

ArcGIS Engine二次开发实习初级讲义目录1 ArcGIS、ArcObjects和ArcGIS Engine简介.................................................................... - 3 -1.1 ArcGIS简介 ................................................................................................................ - 3 -1.2 ArcObjects简介 .......................................................................................................... - 4 -1.3 ArcGIS Engine简介.................................................................................................... - 5 -2 ArcGIS控件介绍.................................................................................................................... - 7 -2.1 ArcGIS控件简介 ........................................................................................................ - 7 -2.2重要控件简介............................................................................................................... - 9 -3 ArcGIS Engine二次开发入门 ............................................................................................ - 16 -3.1 ArcGIS Engine开发起步——第一个简单的地图显示程序 .................................. - 16 -3.2 属性查询.................................................................................................................... - 23 -3.3 空间查询.................................................................................................................... - 27 -3.4 BaseCommand开发实例 .......................................................................................... - 36 -3.5 BaseTool开发实例.................................................................................................... - 38 -3.6通过代码添加图层..................................................................................................... - 42 -3.7基于比例尺显示地图................................................................................................. - 44 -3.8 构建一个简单的GIS应用........................................................................................ - 46 -4.问题解决方法及帮助文档的使用........................................................................................ - 58 -4.1使用ArcObjects开发帮助系统............................................................................... - 58 -4.2阅读对象模型图(Object Model Diagram)......................................................... - 62 -1 ArcGIS、ArcObjects和ArcGIS Engine简介1.1 ArcGIS简介ArcGIS提供了一个可伸缩的框架,可以为独立用户或者多用户,既可以在桌面端也可以在服务器端提供GIS。
最新ArcGISEngine开发2

IMapControl2定义控制控件外观界面的各种属性和方法。 如Appearance、BorderStyle 和BackColor。它定义的 主要方法有TrackLine、 TrackPolygon、 TrackRectangle和TrackCircle。
一个简单的应用程序 (1)创建一个新的工程 (2)添加控件及引用 (3)窗体上添加控件,编写代码(地图) (4)设置ToolbarControl 与MapControl控件关联 (5)运行程序
(1)创建一个新的工程 启动Visual ,从“新建项目”对话框中创建一
个新的Visual C#“Windows应用程序”项目,并设置项目 名称为“Sample”,选择位置保存该项目。
GlobeControl通过对象接口来操作IGlobe视图,用户可 以通过IGlobeViewer对象来操作ArcGlobe应用程序。
框架控件介绍
图层树控件(TOCControl) TOCControl用来管理图层的可见性和标签的编辑。
TOCControl需要一个“伙伴控件”一起工作, “伙伴控 件”可以是一个MapControl、 PageLayoutControl、 ReaderControl、SceneControl或者是GlobeControl。 “伙伴控件”能够在设计的时候通过ToolbarControl的 属性页设置。或者在程序运行中通过SetBuddyControl 方法来设置。 “伙伴控件”都实现了ITOCBuddy接口。 TOCControl 利用“伙伴控件”来显示交互性的树结构目录,包括“伙 伴控件”的地图、图层、符号等内容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.8 构建一个简单的GIS应用
5.9 问题解决方法及帮助文档的使用
3ห้องสมุดไป่ตู้
5.6 BaseTool开发实例
11
12
5.7通过代码添加图层
14
5.8 构建一个简单的GIS应用
22
58
59
60
61
74
End, Thanks!
Wuhan University School of Remote Sensing and Information Engineering
GIS工程设计开发综合实习
——基于C#.NET和AO/AE的GIS设计与开发
张文、黄长青 武汉大学遥感信息工程学院
Wuhan University School of Remote Sensing and Information Engineering
72
73
如上图所示,对象模型图展示了每个对象内的各类之间的接口,继承、派生关系,属性及方法之 间的联系等,是对整个对象最完整的定义。对象模型图可视化的表达了ArcObjects的继承关系, 因而您能识别关键对象,查看哪些对象之间具有联系(如对象的创建关系),理解接口继承和派 生类型的定义,并且找出实现了一个类所实现的全部接口。参考对象模型图与参看帮助系统中具 体的接口所获得的信息是一致的,只不过查看具体的接口信息将更方便获得具体的使用方法,属 性设置方法等,而参看对象模型图是从全局来把握整个对象,更容易找出各接口之间的联系和调 用方式等。 对象模型图的放置路径为“X:\Program Files\ArcGIS\DeveloperKit\Diagrams”(X代表ArcGIS 安装所在的盘符)。 对象模型图的书写类似于UML图,对象模型图中也对其基本规则也有所解释,因而UML的具体语 法规则、定义等这里不再赘述,如果需要更加详细的信息,您可以参考UML方面的相关书籍,或 者参考《Exploring ArcObjects》中的相关章节。
70
71
回到IFeatureClass的帮助,在“Members”之后是“Inherited Interfaces”和 “Classes that implement IFeatureClass”,分别标明了IFeatureClass接口是从 何继承而来以及实现了IFeatureClass接口的类,根据COM的标准,您可以 通过COM原理中的QueryInterface,从IFeatureClass接口查询得到实现了该 接口的其他接口。
“Members”指的是接口下的成员,这包括属性、方法等。这里我们不能一一给您列举出来,而是挑选一 个作为例子讲解。 例如我们看到“Search”成员,这是一个方法,通过对“Search”的描述,我们可以得到,“Search”方 法将“返回一个object cursor,其中包含经过特定的查询条件得到的要素对象”。通过这个描述,我们可 以大概得出,通过“Search”方法,我们可以从一个要素集中按照一定的查询条件得到一些特定的要素,供 后续使用。为了获得更加详细的描述,我们点击
Part 5:
ArcGIS Engine二次开发入门
2
ArcGIS Engine二次开发入门 5.1 ArcGIS Engine简介 5.2 ArcGIS Engine开发起步
5.3 属性查询
5.4 空间查询 5.5 BaseCommand开发实例 5.6 BaseTool开发实例 5.7 通过代码添加图层
后面的“See Also”代表了与此相关的一些接口,“Example”(如果有的话) 就是具体的示例代码,通过这些示例,相信您能更快的熟悉接口的使用。
请您参照帮助系统,熟悉IMapControl2,IActiveView,IFeatureLayer, IFeatureClass,ISpatialFilter,IFeatureCursor,IFeature,IGeometry等接口, 以及这些接口中的属性、方法等涉及到的其他接口。熟悉和掌握这些常用 接口的使用,对您熟悉ArcObjects与迅速掌握ArcObjects的开发是极有帮助 的。
62
63
5.9 问题解决方法及GIS 帮助文档的使用
64
65
66
67
68
69
IFeatureClass Interface 这表明IFeatureClass接口是包含在ESRI.ArcGIS.Geodatabase这个类库中,在编程的时候,如果想使用 IFeatureClass接口,则需要首先添加“ESRI.ArcGIS.Geodatabase”的引用,也就是加上“Imports ESRI.ArcGIS.Geodatabase”之类的引用。这样,当您需要使用别的接口时,首先就需要查询帮助,并将 您需要的引用添加到程序中,这也是我们之前编写程序需要添加一些不同引用的原因。 标题下面的第一行是“Provides access to members that control the behavior and properties of a feature class.”,这表明,IFeatureClass接口提供了访问控制要素类行为和属性成员的的方法。类似这样 的话能够让您迅速明白某个接口的作用。 “Product Availability”指的是产品的使用范围,这里从紧接这的介绍可以清晰地看到,在ArcGIS Engine,ArcGIS Desktop和ArcGIS Server中都可以使用。 “When To Use”指的是使用这个接口的场合,也可以算接口的综述。从紧跟着的介绍性文字可以得出, “IFeatureClass接口是获得和设置要素类属性的主要接口。例如,使用IFeatureClass接口能够得到要素集 的类型,获得满足某种查询条件的要素数量,或者是在要素集中创建一个新的要素。IFeatureClass接口从 IObjectClass接口继承而来。”