ArcGIS Engine期末知识点总结.docx
《ArcGIS Engine期末知识点总结.docx》由会员分享,可在线阅读,更多相关《ArcGIS Engine期末知识点总结.docx(16页珍藏版)》请在冰豆网上搜索。
ArcGISEngine期末知识点总结
第1章GIS二次开发概述
1.1GIS开发模式
1.2组件GIS技术
1.1GIS开发模式
◆独立开发模式
◆宿主型开发模式
◆(组件式GIS基本思想)组件式GIS开发模式
1.2组件式GIS
◆组件式GIS (ComGIS):
采用了面向对象技术和组件式软件的GIS系统(包括基础平台和应用系统)(宋关福等,1999)。
COM是组件式对象模型(ComponentObjectModel)的英文缩写
◆GIS软件变得日益庞大,用户难以掌握,费用昂贵,阻碍了GIS的普及和应用。
组件式GIS的出现为传统GIS面临的多种问题提供了全新的解决思路。
组件式软件技术已经成为当今软件技术的潮流之一。
组件式GIS是GIS的发展新阶段。
◆ComGIS给国内GIS基础软件的开发提供了一个良好的机遇。
它打破了GIS基础软件由几个厂商垄断的格局,开辟了以提供专业组件来打入GIS市场的新途径。
目前大多数GIS软件公司都把开发组件式软件作为一个重要的发展战略。
◆GIS开发模式包括:
独立开发模式
、宿主型开发模式、组件式GIS开发模式。
组件式GIS开发平台的结构有三种:
基础组件 、高级通用组件、行业性组件。
◆基础组件——面向空间数据管理,提供基本的交互过程。
◆高级通用组件——面向通用功能。
◆行业性组件——抽象出行业应用的特定算法,固化到组件中,进一步加速开发过程。
组件式GIS开发平台的结构
◆基础组件——面向空间数据管理,提供基本的交互过程。
◆高级通用组件——面向通用功能。
◆行业性组件——抽象出行业应用的特定算法,固化到组件中,进一步加速开发过程。
第二章ArcEngine基础
2.1ArcObjects与ArcEngine区别与联系
2.2ArcEngine功能
2.4组件对象模型COM
2.5理解对象模型图OMD
2.6ArcEngine类库结构
2.3ArcGISEngine组成部分
ArcGISEngine由一个软件开发工具包ArcGISEngineDeveloperKit(SDK)和一个运行时(ArcGISEngineRuntime)组成。
(1)ArcGISEngineDeveloperKit
◆ArcGISEngine开发包是一套地图制图组件和开发资源库,可以让编程人员为现有的应用程序添加动态制图和GIS功能,或者创建新的定制的制图和GIS解决方案。
◆ArcGISEngine开发包不是面向终端用户的产品,而是专门为开发应用程序的人员设计的。
开发人员基于ArcGISEngine建立应用程序,并将这些程序传递给终端用户。
ArcEngine从功能层次上分为五部分:
1.基本服务—由GIS核心ArcObjects构成,几乎所有GIS应用程序都需要,如要素几何体(featuregeometry)和显示(display)。
2.数据存取—ArcGISEngine可以对许多栅格和矢量格式进行存取,包括强大的地理数据库(Geodatabase)。
3.地图表达—创建和显示带有符号和标注的地图。
4.开发组件—用于快速开发应用程序的界面控件。
5.运行时选项—ArcGISEngine运行时可以与标准功能或其它高级功能一起部署。
COM总结
◆1.COM不是接口,也不是对象,它是一种二进制级别的组件通信标准。
对象间的所有通信都是通过它们的接口来进行的
◆2.符合COM标准的对象——COM对象。
COM对象是实现了很多接口的对象。
◆3.COM对象必须实现Iunknown接口,它是默认实现的接口,,这个接口是管理COM对象生命周期的,当COM对象不使用的时候,是这个接口定义的方法负责释放内存。
◆4.QI,即所谓查询接口。
由于COM对象有很多个接口,不同的接口管理着COM的不同类型的方法,因此从一个接口可以使用的方法转到另一个接口可以使用的方法的过程称为QI,这个过程是由Idispatch接口管理的。
◆5.每个组件都有一个独一无二的标识,这就是所谓的全球唯一标识符GUID。
这个标识符就是COM组件的身份,它是一个128bits的数字,由系统自由分配。
◆6.一个COM对象可以有多个接口,一个接口也完全可以被多个COM对象实现,通过实现这些接口,COM实现了面向对象的多态性(几个类可以有同样的接口,但是它们的实现可能是极不相同的)。
◆ArcGIS中的多态指什么?
许多ArcGIS的类都表现出多态的特性,其特点是在几个Classes中使用同一个Interface,但每一个Class却执行不同的methodsandproperties。
举例:
图层类型(layertypes)如RasterLayer,TinLayer,FeatureLayer等都具有同一个接口ILayer,但每一个图层类却执行不同的methodsandproperties。
ArcObjects提供哪三种类?
各有什么特点?
AbstractClass,Coclass和Class。
◆AbstractClass(抽象类):
不能直接创建新对象,只是用来派生ArcObjects其他类。
抽象类用于定义子类的公共接口,子类继承其定义的接口。
每个抽象类至少有一个子之类,Layer,WorkSpaceFarctory等是抽象类类;OMD符号为二维的内部有阴影的矩形。
◆Coclass(Componentclasses)可创建类或组件类:
用new关键字创建对象或者从别的对象获得运行实例。
如组件类FeatureLayer,Map等,IMap=newpMapClass()。
OMD符号为带阴影的3D矩形符号。
◆Class实例化类或普通类:
不能直接创建新对象,只能从其他类接口的属性函数或其他类的方法创建。
WorkSpace是一个普通类,不能用new创建,但可以通过WorkSpaceFarctory.OpenFromFile()方法创建实例。
OMD符号为:
3D矩形内部没有阴影。
ArcMapobjects
◆类和他们相应的对象
理解基本概念类和对象(ClassandObjects),接口和命名空间(NameSpace)
AO/AE中的3种类
◆ArcObjects提供三种类AbstractClass,Coclass和Class,这三个类在对象模型图OMD中体现。
◆AbstractClass(抽象类):
不能直接创建新对象,只是用来派生ArcObjects其他类。
抽象类用于定义子类的公共接口,子类继承其定义的接口。
OMD中每个抽象类至少有一个子类。
OMD符号为二维的内部有阴影的矩形。
◆Coclass(Componentclasses)可创建类或组件类:
用new关键字创建对象或者从别的对象获得运行实例。
OMD符号为带阴影的3D矩形符号。
IMap=NewpMapClass();
◆Class实例化类或普通类:
不能直接创建新对象,只能从其他类接口的属性函数或其他类的方法创建。
OMD符号为:
3D矩形内部没有阴影。
◆AE中WorkSpace就是一个可实例化类,WorkSpace不能用new创建,但通过WorkSpaceFarctory.OpenFromFile()方法可以创建:
IWorkspaceFactorypWorkspaceFactory=newShapefileWorkspaceFactoryClass();
IWorkspacepWorkspace=pWorkspaceFactory.OpenFromFile(sWorkSpacePath,0);
理解AO/AE对象模型图类与类的关系
◆依赖关系一个对象有方法产生另一个对象。
前者的周期决定后者的生命周期。
例,WorkspaceFactory有3个方法(Create、Open和OpenFormFile)来创建或打开一个WorkSpace。
WorkSpace依赖于WorkSpaceFactory。
◆关联关系鹰和巢两个对象是松散的关联关系,可以从一个类的对象访问另一个类的对象。
当其中一个不存在,另一个不消失。
关联关系可能存在一对多或多对多关系:
一只鹰拥有几个巢和一个巢几只鹰居住
关联关系有方向性:
单相关联和双向关联。
◆组合关系羽毛与翅膀和鹰属于紧密的组合关系,是整体与部分的关系。
羽毛与翅膀是鹰的一部分,当鹰消失的时候,鹰的羽毛与翅膀也将不复存在。
羽毛与翅膀的生命周期由鹰对象控制,但羽毛与翅膀的产生不受鹰对象控制。
◆继承关系鹰属于鸟类,是一种继承关系,父类与子类的关系。
类间的继承是类功能的扩展。
父类具有的任何属性与方法,子类同样具备,且子类在保存父类的属性与行为(方法)的基础上增加了自己特有的行为与属性。
Relationshipsymbols
三角形符号继承(Inheritance)
菱形黑色小块组合(Composition)
虚线前头带个箭头依赖(Instantiation)
对应关系1:
N
一条直线表关联(Association)
第三章地图显示
◆加载ShapeFile的3中方法
◆地图控件MapControl.AddLayer(文件名(含文件目录));
◆地图控件MapControl.AddShapeFile(文件目录,文件名(不含文件目录))。
打开ShapeFile的AddLayer方法需要建工作区和找数据集等步骤,比较复杂;简单的是AddShapeFile方法;
◆地图控件MapControl.AddLayerFromFile(lyr文件名);
3.2.2.2添加引用(AddArcGISReference)
Ø首先在工程-->“引用”(
程序集(Assembly):
使用.NET开发ArcGISEngine程序使用的组件被称为程序集,AE中一般是dll文件,一个程序集包括一个或多个命名空间。
添加引用意在告诉编译器,我的这个程序中使用了那些外部的库,他们都在哪里;如添加ESRI.ArcGIS.Controls程序集(放大ControlsMapZoomInToolClass、缩小、打开文件、保存文件等ArcMap中常用用的命令都在Controls库);
Ø然后在全局定义前使用using命令引用,using命令意在告诉编译器,我这个程序里使用了某个命名空间,不用再写他的全名了,让编译器帮你去找。
引用命名空间主要是为了减少冗余代码,比如我们要使用ControlsMapZoomInToolClass,如果在工程前添加了usingESRI.ArcGIS.Controls,我们就可以直接用“ControlsMapZoomInToolClass“这个简称来调用他,否则用全称。
该程序涉及的主要类及接口介绍
◆WorkspaceFactory
◆WorkSpace
IWorkspace接口IFeatureWorkspace接口
◆要素图层FeatureLayer
◆FeatureClass对象
3.4图层控制
◆3.4.1Command和Tool区别
◆3.4.2弹出右键菜单的2种方法
3.4.1Command和Tool
AE中内置的Command和Tool的两种插件,Command不需要用鼠标等与地图交互,如全图功能;Tool则需要用鼠标等与地图交互,如选择功能。
CreateNewDocument,ControlsOpenDocCommandClass,ControlsSaveAsDocCommandClass,ControlsMapZoomInToolClass,ControlsMapPanToolClass等,这些内置对象在Controls类库中。
◆举例:
放大和缩小工具,需要指定地图控件的当前工具
代码片段如下:
ICommandpCommand=newControlsMapZoomInToolClass();
//ICommand接口的OnCreate方法创建关联Mapcontrol
pCommand.OnCreate(this.axMapControl1.Object);
//指定当前工具
axMapControl1.CurrentTool=pCommandasITool;
Command举例:
打开文档,代码如下:
ICommandpCommand=newControlsOpenDocCommandClass();
pCommand.OnCreate(axMapControl1.Object);
pCommand.OnClick(); //OnClick方法实现对象的点击事件
3.4.2弹出右键菜单的2种方法
在AE开发中,右键菜单有两种实现方式,一是使用VS2008自带的ContextMenuStrip控件的Show方法,二是用AE封装的IToolbarMenu接口的PopupMenu方法。
具体实现流程是?
◆图层控制的主要接口ITOCControl.HitTest,IToolbarMenu.AddItem;
IToolbarMenu.AddItemMethod(ESRI.ArcGIS.Controls)
intAddItem( objectpItem, intSubType, intindex,
boolbeginGroup, esriCommandStylesStyle
);
objectpItem//需要添加的菜单项
SubType //该Item是否有subType,缺省值-1,表示该菜单项没有子类,
index //该Item在菜单中的index,缺省值-1,添加到菜单的最底部,如果有其他菜单项,从上到下依次添加到菜单中,其index值分别为0,1,2,3,…等.
beginGroup //是否从该Item开始分开一组,缺省为False,不分隔;
Style //esriCommandStyles类型,缺省值esriCommandStyleIconAndText.
ConstantValueDescription
.esriCommandStyleTextOnly0Displaytextonly只显示文字
.esriCommandStyleIconOnly1Displayicononly只显示图标
.esriCommandStyleIconAndText2Displayiconandtext显示图标与文字
.esriCommandStyleMenuBar4Displaybarasmainmenu显示为菜单
ITOCControl.HitTestMethod(ESRI.ArcGIS.Controls)
voidHitTest(
intX,
intY,
refesriTOCControlItempTocItem,
refIBasicMappMap,
refILayerpLayer,
refobjectpOther,
refobjectpIndex
);
X,Y鼠标点击的横坐标和纵坐标;
pTocItemesriTOCControlItem枚举常量(specifiesanenumerationindicatingthetypeof item(none,map,layer,headingorlegendclass);
Map地图对象;
Layer被点击的图层对象;
Other图例组对象(ILegendGroupobject);
Index图例在图例组中的位置(theindexofthelegendclasswithinthelegendgroup)
esriTOCControlItem枚举常量描述TocControl上Itemd类型定义
ConstantValueDescription
esriTOCControlItemNone0Noitem没有对象
esriTOCControlItemMap1Theitemisamapmap对象
esriTOCControlItemLayer2Theitemisalayerlayer对象
esriTOCControlItemHeading3Theitemisaheading对象的标题
esriTOCControlItemLegendClass4TheitemisalegendclassLegendclass对象
使用ToolbarMenu实现
1)创建菜单
IToolbarMenupMenuMap;
IToolbarMenupMmenuLayer;
2)向快捷菜单中添加Item(菜单项)
pMenuMapClt.AddItem(newControlsMapFullExtentCommand(),-1,0,false,esriCommandStyles.esriCommandStyleIconAndText);
pMenuMapClt.AddItem("esriControls.ControlsMapZoomToLastExtentBackCommand",-1,1,false,esriCommandStyles.esriCommandStyleIconAndText);
pMenuMapClt.AddItem("esriControls.ControlsMapIdentifyTool",-1,3,true,esriCommandStyles.esriCommandStyleIconAndText);
pMenuMapClt.AddItem("esriControls.ControlsMapPanTool",-1,5,false,esriCommandStyles.esriCommandStyleIconAndText);
3)绑定控件,通知pMenuMap,ControlsMapZoomInTool操作的对象是axMapControl1
pMenuMap.SetHook(axMapControl1.Object);
4)显示菜单,在axTOCControl1控件的指定位置弹出快捷菜单
pMenuMap.PopupMenu(e.x,e.y,axTOCControl1.hWnd);
使用contextMenuStrip实现
1)创建菜单,添加ContextMenuStrip控件;
2)向快捷菜单中添加Item(菜单项);
3)每个菜单项Item的Click点击事件中添加相应代码;
4)显示菜单,在axTOCControl1控件的指定位置弹出快捷菜单;
给axTOCControl1添加OnMouseDown事件
privatevoidaxTOCControl1_OnMouseDown(objectsender,ITOCControlEvents_OnMouseDownEvente)
{
if(e.button==1)return;
elseif(e.button==2)
contextMenuStrip1.Show(axTOCControl1,newSystem.Drawing.Point(e.x,e.y));
}
第四章地图制图
4.1颜色对象Color(ESRI.ArcGIS.Display)
4.2符号对象Symbol(ESRI.ArcGIS.Display)
4.3专题图制作Renderer(ESRI.ArcGIS.Carto)
◆ArcGISEngine提供了ColorRamp对象:
◆ColorRamp抽象类,它包括4个子类(组件类):
◆AlgorithmicColorRamp(起止颜色带)ÓÃÆðʼÑÕÉ«¡¢ÖÕÖ¹ÑÕÉ«È·¶¨Ò»¸öÑÕÉ«´ø£¬Æðʼ¡¢ÖÕÖ¹ÑÕɫʹÓÃRGBÄ£ÐÍ
◆RandomColorRamp(随机颜色带)ʹÓÃHSVÑÕÉ«Ä£ÐÍÀ´È·¶¨Ò»´®ÑÕÉ«
◆PresetColorRamp(预设颜色带)Ô¤ÉèµÄÑÕɫģʽ£¬¿É´æ´¢13ÖÖÑÕÉ«
◆MultiPartColorRamp(叠加颜色带)µþ¼Ó²úÉúÑÕÉ«´ø
4.3专题图制作Renderer(渲染)
渲染(Renderer):
地图符号化,是ArcGIS为空间数据图层存储符号化样式的对象,并利用这些样式符号化图层。
◆Renderer对象分三类:
Ø要素渲染(FeatureRenderer)
Ø栅格渲染(RasterRenderer)
Ø和TIN渲染(TINRenderer)
要素渲染(FeatureRenderer)
◆FeatureRenderer(要素渲染),也称矢量数据渲染,是一种显示要素图层的方法。
◆用途:
专题图制作;
如唯一值图,分类图,点密度图等
FeatureRenderer抽象类,它有15个子类负责进行不同类型的渲染运算。
Layer抽象类,包括FeatureLayer,RasterLayer和TinLayer等。
Layer的主接口ILayer:
是所有图层对象的公共接口,用于访问所有图层的成员。
这个接口包含定义最大和最小显示比例尺的属性,空间参考,名称,图层可见性等。
ILayer=axMapControl1.Get_Layer(i);
◆FeatureLayer组件类主接口IFeatureLayer:
主要用于设置要素图层的数据源FeatureClass
IFeatureLayerpFeatureLayer=newFeatureLayerClass();
◆GeoFeatureLayer类主接口IGeoFeatureLayer:
继承ILayer和IFeatureLayer两个接口,用于控制要素图层的符号化和标注等。
重要属性Renderer:
设置图层的渲染对象;
SimpleRenderer简单渲染
DotDensityRenderer点密度渲染
第五章地图整饰与输出
5.1MapControl地图控件
✧Map对象(CoClass,组建类)(ESRI.ArcGIS.Carto)
5.2PageLayoutControl页面布局控件
✧PageLayout对象(CoClass,组建类)(ESRI.ArcGIS.Carto)
5.3Map与PageLayout对象共同点
5.4Element对象(ESRI.ArcGIS.Carto)
✧图形元素
✧框架元素
ØMapFrame对