1. GIS开发模式包括: 独立开发模式 、 宿主型开发模式 和 组件式GIS开发模式 。
2. 组件式GIS 开发平台的结构有三种: 基础组件 、 高级通用组件 和 行业性组件 。
3. ArcEngine 从功能层次上分为五部分:基本服务(Base Services)、数据存取(Data Access)、地图表达(Map Presentation)、开发组件(Developer Components)和运行时选项(Runtime Options)。
4. ArcObjects 和ArcEngine中提供了3种类:抽象类、 可创建类或组件类 和 实例化类或普通类 ,这三个类在对象模型图OMD中体现: 抽象类用二维阴影矩形表示; 可创建类用3D有阴影的立方体表示; 实例化类用3D无阴影的立方体表示。
5. AE和AO中的几个类?这些类的特点和用途?
Abstract Class (抽象类): 不能直接创建新对象,只是用来派生ArcObjects其他类。抽象类用于定义子类的公共接口,子类继承其定义的接口。 OMD中每个抽象类至少有一个子类。
Coclass (Component classes)可创建类或组件类: 用New关键字创建对象或者从别的对象获得运行实例。
Class 实例化类或普通类: 不能直接创建新对象,只能从其他类接口的属性函数或其他类的方法创建。
6. PageLayout与Map都是 视图 对象,能够显示地图,都实现了 IActiveView接口;同时它们都是 图形元素 的容器,能存储图形元素(Graphics Element),都实现了 IGraphicsContainer 接口。
7. ArcGIS中可以显示在视图上的图形分为两种,地理数据和元素( Element)数据。元素是一个地图中除去要素数据外的部分,即在一幅地图中,除了保存在数据库中的地理数据外,其余的对象全部是元素。
8. ArcEngine元素要素包括 图形元素 和 框架元素 ,Map只能保存图形元素 数据;PageLayout能保存 图形元素 和 框架元素 。 9. MapControl 控件对应ArcMap中的数据视图(Data View),它封装了 Map 对象,并提供了额外的属性、方法、事件。
10. PageLayoutControl 控件对应ArcMap中的布局视图(Layout View),它封装了 PageLayout 对象,并提供了额外的属性、方法、事件。 11. 在ArcEngine 开发中,右键菜单有两种实现方式: ITOCControl.HitTest方法和IToolbarMenu.AddItem 方法。
12. ArcEngine环境中提供了丰富的符号组件来满足地图设计中的各种需求,这些组件包括 颜色对象 Color, 符号对象Symbol , 专题图制作Renderer 三大系列。
13. 空间分析 是GIS区别于一般信息系统的主要功能特征,空间分析是基于地理对象的位置和形态特征的空间数据分析技术,其目的在于提取和传输空间信息。空间查询是GIS的基本功能之一,主要分为两类:基于属性查询 和基于空间位置查询(空间关系查询)。
14. 在ArcEngine 中不能直接使用SQL语句,但ArcGIS Engine 提供了QueryFilter和SpatialFilter 两个过滤器对象来配合完成查询条件的设置,从而查询到符合条件的数据。
15. COM是Component Object Model的缩写,OMD是Object Model Diagram的缩写。
16. 要素间的空间关系主要包括:相交、相接、叠加、穿越、在内部 和 包含。
17. ArcEngine和ArcObjects的区别与联系?
联系:
1.ArcEngine包括核心ArcObjects的功能,是对AO中的大部分接口、类等进行封装所构成的嵌入式组件。
2.AE中的组件接口、方法、属性与AO相同。 区别:
1.开发环境:ArcObjects必须依赖ArcGISDesktop桌面平台,即购买安装了ArcGISDesktop的同时,安装ArcObjects,才能利用AO进行开发;ArcEngine是独立的嵌入式组件,不依赖ArcGISDesktop桌面平台,直接安装ArcEngineRuntime和DeveloperKit后,即可利用其在不同开发语言环境下开发。
2.功能:AO的功能更强大,AE的功能相对弱些,AE不具备AO的
少部分功能。ArcEngine具有简洁、灵活、易用、可移植性强等的特点。
18. 简单渲染实现的流程?
产生一个SimpleRenderer对象 获取地图中的渲染图层;
设置渲染符号:对于简单渲染设置SimpleRenderer对象的Symbol属性 把SimpleRenderer对象的Symbol赋值给IGeoFeaturelayer::Renderer属性
刷新要素图层;
19. 两个图层Clip运算的流程与代码实现?
ILayer pLayer = axMapControl1.get_Layer(0) as ILayer;
ILayer pLayer_2 = axMapControl1.get_Layer(1) as ILayer; Geoprocessor pGP = new Geoprocessor(); pGP.OverwriteOutput = true;
ESRI.ArcGIS.AnalysisTools.Clip pClip = new ESRI.ArcGIS.AnalysisTools.Clip(); pClip.clip_features = pLayer; pClip.in_features = pLayer_2;
object output = \"C:\\\\OutputServer\\\\Clip\\\\ClipResults.shp\";//此处如果只写成C:\\\\OutputServer\\\\Clip,那么文件不会存进Clip文件夹中
//而是存在OutputServer文件夹中,并且shp文件名为Clip pClip.out_feature_class = output; pGP.Execute(pClip, null);
axMapControl1.ActiveView.Refresh();
20. 对某图层Buffer运算的流程与代码实现?
1) 添加引用;
using ESRI.ArcGIS.AnalysisTools; using ESRI.ArcGIS.Geoprocessor;
2) 设置缓冲区分析的图层;
ILayer pLayer = axMapControl1.Map.get_Layer (0);
3) 初始化Geoprocessor
Geoprocessor pGP = new Geoprocessor(); pGP.OverwriteOutput = true;
4) 定义Buffer工具
ESRI.ArcGIS.AnalysisTools.Buffer pBuffer = new ESRI.ArcGIS.AnalysisTools.Buffer();
5) 设置Buffer工具的属性in_features, out_feature_class,
buffer_distance_or_field, 和dissolve_option pBuffer.in_features = pLayer;
pBuffer.out_feature_class = @\"D:\\BufferResults\"; pBuffer.buffer_distance_or_field = \"1000 METERS\"; pBuffer.dissolve_option = \"ALL\";
6) 执行缓冲区分析
pGP.Execute(pBuffer,null);
7) 刷新图层
axMapControl1.ActiveView.Refresh();
21. ArcEngine地图整饰对象添加的流程? 获取PageLayout对象;
IPageLayout pPageLayout = new axPageLayoutControl1. PageLayout;
获取与PageLayout相关联的活动视图:
IActiveView pActiveView= pPageLayout as IActiveView;
获取与PageLayout相关联的图形容器(GrphicsContainer); IGraphicsContainer pGraphicsContainer=pPageLayout as IGraphicsContainer;
使用IGraphicContainer的FindFrame方法查找与焦点(Focus)地图相关联的
Map Frame对象;
IMapFrame pMapFrame=pGraphicsContainer.FindFrame(pActiveView. FoucsMap) as IMapFrame;
使用MapFrame对象的CreateSurroundFrame(pID, pMapSurround)方法得到MapSurroundFrame对象;
获取Element对象,以便它能设置MapSurroundFame对象的几何体属性(Geometry):
IElement pElement = pMapSurroundFame as IElement ;
为地图整饰对象(如图例)创建一个新的封闭区域几何对象; pEnvelope = new EnvelopeClass(); pEnvelope.PutCoords(0, 0, 5, 5);
获取与Focus地图的MapFrame相关联的几何对象,该几何对象控制地图整饰对象在地图上的位置; pElement.geometry = pEvelope;
采用GraphicContainer对象的AddElement(Element,0)方法,把地图要素添加地图布局( PageLayout的图形容器)中。
刷新屏幕上的MapSurround对象。
pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null, null);
因篇幅问题不能全部显示,请点此查看更多更全内容