AE考试复习资料(共10页).doc

上传人:飞****2 文档编号:14233016 上传时间:2022-05-03 格式:DOC 页数:10 大小:68.50KB
返回 下载 相关 举报
AE考试复习资料(共10页).doc_第1页
第1页 / 共10页
AE考试复习资料(共10页).doc_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《AE考试复习资料(共10页).doc》由会员分享,可在线阅读,更多相关《AE考试复习资料(共10页).doc(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上1、 利用C#和AE进行软件开发,要求能够加载矢量格式和栅格格式的数据,需要用户通过添加点、线、面自定义命令和工具,同时根据给定条件进行要素查询和专题地图制作,请详细分析需要添加哪些组件库?要点:System库:SystemUI库:Carto库:Geometry库:Display库:FrameWork库;GeoDatabase库:DataSourcesFile库;DataSourcesRaster库:2、 请详细分析在AE开发中存在哪三种类?各种类有何特性?并分析这几种类存在哪几种关系?要点:ArcGIS Engine存在三种类:抽象类:不能直接产生一个对象,但是可以

2、生成一个子类;组件类:可以直接创建一个类的对象,用new关键字;例如:IMap pMap=new pMap();普通类:不能用new关键字直接创建类的对象,但是可以利用组件类或普通类创建一个普通类。类与类之间的关系:对象A对象B(依赖关系:一个对象有方法产生另外一个对象)对象A对象B1.*1.*(关联关系:以从一个类的对象,访问到另一个类的对象)对象A对象B1.*(组合关系:一个类对象是另外一个类对象的组成部分)抽象类子类A子类B( 继承关系)3、 利用Mapcontrol、Toolbarcontrol、Toccontrol控件编写加载shape格式和mxd格式的文件程序,不能用系统内的加载数

3、据命令,需要自己定义文件对话框,设置伙伴控件将窗体最大化显示,设置菜单以及加载和显示shape和mxd文件?要点:(1)打开shp格式文件OpenFileDialog dlg=new OpenFileDialog(); dlg.Filter=Shape file(*.shp)|*.shp; dlg.Title=打开Shape数据文档; dlg.Multiselect=true; /定义存放所选文件名的数组 string strFileName; if(dlg.ShowDialog()=DialogResult.OK) strFileName=new stringdlg.FileNames.Le

4、ngth; strFileName=dlg.FileNames; if(strFileName.Length 0) string WorkSpacePath =System.IO.Path.GetDirectoryName(strFileName0); string strShapeFileName=new stringstrFileName.Length ; /获得打开IFeatureClass的字符串数组 for(int i=0;istrFileName.Length;i+) strShapeFileNamei=System.IO.Path.GetFileName(strFileNamei

5、); IWorkspaceFactory pWorkspaceFactory=new ShapefileWorkspaceFactoryClass(); IWorkspace pWorkspace=pWorkspaceFactory.OpenFromFile(WorkSpacePath,0); IFeatureWorkspace pFeatureWorkspace=pWorkspace as IFeatureWorkspace; for(int i=0;istrShapeFileName.Length;i+) IFeatureClass pFeatureClass=pFeatureWorksp

6、ace.OpenFeatureClass(strShapeFileNamei); IDataset pDataset=pFeatureClass as IDataset; IFeatureLayer pFeatureLayer=new FeatureLayerClass(); pFeatureLayer.FeatureClass=pFeatureClass; pFeatureLayer.Name=pDataset.Name; ILayer pLayer=pFeatureLayer as ILayer; axMapControl1.Map.AddLayer(pLayer); (2)加载MAX文档

7、OpenFileDialog OpenFileDig = new OpenFileDialog(); OpenFileDig.Title = 选择需要加载的地图文档文件; OpenFileDig.Filter = 地图文档文件(*.mxd)|*.mxd; OpenFileDig.ShowDialog(); string strFileName = OpenFileDig.FileName; if (strFileName = string.Empty) return; if (axMapControl1.CheckMxFile(strFileName) /是Mxd文档文件 IArray pAr

8、ray; pArray = axMapControl1.ReadMxMaps(strFileName, Type.Missing); IMap pMap; for (int i = 0; i pArray.Count; i+) /QI接口跳转 pMap = pArray.get_Element(i) as IMap; if (pMap.Name = Layers) /加载文档对象中特定的Map对象 axMapControl1.MousePointer = esriControlsMousePointer.esriPointerHourglass; axMapControl1.LoadMxFil

9、e(strFileName, 0, Type.Missing); axMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault; else MessageBox.Show(请选择地图文档文件!,信息提示); return;4、 在AE开发中,请分析空间几何对象(Geomery)中的高级几何对象和种类?要点:在Geometry模型中,几何形体对象被分为两个层次,其一是构成要素的几何图形,另一个是组成这些形状的构件。前者称为高级几何对象,具体包括:Point对象:是一个0维的几何图形,可以用于描述只需要精确定位的对

10、象;Multipoint对象:无序点的群集,它用于表示具有相同属性设置的同一组点;Envelope对象:是一个矩形区域,用于表示要素的空间范围,它是作为任何一个几何形体的最小边框区域而存在的;Polyline对象:是相连或不相连的路径对象(path)的有序集合;Polygon对象:是环(Ring)的集合,Polygon通常用于描述具有面状特性的要素。附:注意掌握Geometry对象模型图5、 请分析在AE开发中空间参考的含义,何为地理坐标系?何为投影坐标系?如何设置空间参考?要点:空间参考:为了空间数据能够被合适的存储和指向地球上某一个位置,必须设置空间参考。空间参考包含了坐标系统和精度。坐标

11、系统(地理坐标系或投影坐标系)定义空间数据在地球上的具体位置。地理坐标系:是确定地物在地球上位置的坐标系,以经纬度为地图的存储单位;投影坐标系:是将三维地理坐标系统上的经纬网投影到二维平面地图上使用的坐标系统;设置空间参考:AE中提供了一系列对象供开发者管理坐标系统,对于大部分开发者而言,需要了解到三种主要的ArcObjects组件:ProjectedCoordinateSystem使用IProjectedCoordianateSystem接口新建一个投影坐标系统;GeographicCoordinateSystem确定一个地理坐标系统,可以使用IGeographicCoordinateSys

12、tem接口,设置一个地理坐标系统;SpatialReferenceEnvironment:Spatialreference对象的ISpatialReference接口提供了操作方法和属性来设置一个数据集空间参考属性。6、 利用Mapcontrol、Toolbarcontrol、Toccontrol控件的MouseDown事件中添加绘制多义线(PolyLine)和多变形(PolyGon)的程序,要求设计画多义线和多变形的菜单,然后在MouseDown事件中判断选择,以确定画多义线还是画多变形,并写出画多义线和多边形的代码。要点:两个菜单命令:/定义主窗体层全局变量 string GeoMapOp

13、erateT = string.Empty; /定义两个菜单,并初始化GeoMapOperateT,菜单名字GeoMapDLine,GeoMapDPolygonprivate void GeoMapDLine_Click(object sender, EventArgs e) GeoMapOperateT = DrawLine; private void GeoMapDPolygon_Click(object sender, EventArgs e) GeoMapOperateT = DrawPolygon; /主窗体鼠标按下事件相应处理:private void axMapControl1_

14、OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e) /主视图的鼠标按下事件 GeoMapAdd.GeoMapOperate(axMapControl1, e, GeoMapOperateT); 封装类:class GeoMapAddpublic static IMap pMap; public static IActiveView pActiveView; /与地理数据的交互操作 public static void GeoMapOperate(AxMapControl axMapControl1, IMapCon

15、trolEvents2_OnMouseDownEvent e, string OperateT) switch (OperateT) case DrawLine: pMap = axMapControl1.Map; pActiveView = pMap as IActiveView; IPolyline pPolyline; pPolyline = axMapControl1.TrackLine() as IPolyline; /产生一个SimpleLineSymbol符号 ISimpleLineSymbol pSimpleLineSym; pSimpleLineSym = new Simpl

16、eLineSymbolClass(); pSimpleLineSym.Style = esriSimpleLineStyle.esriSLSSolid;/需要用户动态选择 /定义线的颜色 IRgbColor pColor; pColor = new RgbColorClass(); pColor.Red = 220; pColor.Green = 112; pColor.Blue = 60; pSimpleLineSym.Color = pColor;/需要用户动态选择 pSimpleLineSym.Width = 1; /产生一个PolylineElement对象 ILineElement

17、pLineEle; pLineEle = new LineElementClass(); IElement pEle; pEle = pLineEle as IElement; pEle.Geometry = pPolyline; /将元素添加到Map对象之中 IGraphicsContainer pGraphicsContainer; pGraphicsContainer = pMap as IGraphicsContainer; pGraphicsContainer.AddElement(pEle, 0); pActiveView.PartialRefresh(esriViewDrawPh

18、ase.esriViewGraphics, null, null); break; case DrawPolygon: pMap = axMapControl1.Map; pActiveView = pMap as IActiveView; IPolygon pPolygion; pPolygion = axMapControl1.TrackPolygon() as IPolygon; /产生一个SimpleFillSymbol符号 ISimpleFillSymbol pSimpleFillSym; pSimpleFillSym = new SimpleFillSymbolClass(); p

19、SimpleFillSym.Style = esriSimpleFillStyle.esriSFSDiagonalCross;/需要用户动态选择 /设置颜色 IRgbColor pColor; pColor = new RgbColorClass(); pColor.Red = 220; pColor.Green = 112; pColor.Blue = 60; pSimpleFillSym.Color = pColor;/需要用户动态选择 /产生一个PolygonElement对象 IFillShapeElement pPolygonEle; pPolygonEle = new Polygo

20、nElementClass(); pPolygonEle.Symbol = pSimpleFillSym; IElement pEle; pEle = pPolygonEle as IElement; pEle.Geometry = pPolygion; /将元素添加到Map对象之中 IGraphicsContainer pGraphicsContainer; pGraphicsContainer = pMap as IGraphicsContainer; pGraphicsContainer.AddElement(pEle, 0); pActiveView.PartialRefresh(es

21、riViewDrawPhase.esriViewGraphics, null, null); break; default: break;7、 鹰眼的实现 要点:(实现基本思路)1、两个Mapcontrol控件,一个作为主视图,一个作为鹰眼视图;2、主视图和鹰眼视图中数据显示保持一致;3、主视图当前显示的地图范围,需要一个红色的矩形框在鹰眼视图中标绘出来;当主视图中显示的地图范围发生变化时,红色矩形框的位置也发生变化;4、当在鹰眼视图中移动或改变标绘主视图显示范围的红色矩形框的位置和大小时,主视图中的地图范围也发生变化。当主视图中的地图发生变换化时,鹰眼视图中的地图也要发生变化。为此,在axM

22、apControl1的OnMapReplaced事件中添加下列代码,使主视图和鹰眼视图中的数据保持一致。 IMap pMap; pMap=axMapControl1.Map; for(int i=0;ipMap.LayerCount;i+) axMapControl2.Map.AddLayer(pMap.get_Layer(i); /使鹰眼视图中显示加载地图的全图 axMapControl2.Extent=axMapControl2.FullExtent; /使鹰眼视图中显示加载地图的全图在鹰眼视图中移动红色矩形框时,主视图中的地图范围要发生相应的变换,包括范围变化和位置移动。需要鹰眼视图的O

23、nMouseDown事件中添加下列代码: if (e.button = 1)/探测鼠标左键 IPoint pPt = new PointClass(); pPt.X = e.mapX; pPt.Y = e.mapY; IEnvelope pEnvelope = axMapControl1.Extent as IEnvelope; pEnvelope.CenterAt(pPt); axMapControl1.Extent = pEnvelope;axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,

24、 null, null); else if (e.button = 2)/鼠标右键按下 IEnvelope pEnvelope = axMapControl2.TrackRectangle(); axMapControl1.Extent = pEnvelope;axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); 上述代码的功能是,利用鼠标左键移动鹰眼视图中的红色矩形框,主视图中显示的范围要进行刷新。用鼠标右键在鹰眼视图中改变红色矩形框的大小,主视图中显示的地图数据也要

25、进行刷新。在axMapControl2的OnMouseMove事件中添加如下代码: if (e.button != 1) return;IPoint pPt = new PointClass(); pPt.X = e.mapX; pPt.Y = e.mapY; axMapControl1.CenterAt(pPt); axMapControl2.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);主视图的范围发生变化时,会触发控件的OnExtentUpdated事件,绘制鹰眼图中的红色方框应放在主视

26、图的OnExtentUpdated事件中: /控制鹰眼的代码 IGraphicsContainer pGraphicsContainer = axMapControl2.Map as IGraphicsContainer;/以mapControl2为图形容器 IActiveView pAv = pGraphicsContainer as IActiveView; / 在绘制前,清除axMapControl2 中的任何图形元素 pGraphicsContainer.DeleteAllElements(); IRectangleElement pRecElement = new Rectangle

27、ElementClass(); IElement pEle = pRecElement as IElement; IEnvelope pEnv; pEnv = e.newEnvelope as IEnvelope; pEle.Geometry = pEnv; /设置颜色 IRgbColor pColor = new RgbColorClass(); pColor.Red = 200; pColor.Green = 0; pColor.Blue = 0; pColor.Transparency = 255; /产生一个线符号对象 ILineSymbol pLineSymbol = new Sim

28、pleLineSymbolClass(); pLineSymbol.Width = 2; pLineSymbol.Color = pColor; /设置填充符号的属性 IFillSymbol pFillSymbol = new SimpleFillSymbolClass(); /设置透明颜色 pColor.Transparency = 0; pFillSymbol.Color = pColor; pFillSymbol.Outline = pLineSymbol; IFillShapeElement pFillShapeElement = pRecElement as IFillShapeEl

29、ement; pFillShapeElement.Symbol = pFillSymbol; pGraphicsContainer.AddElement(pEle, 0); axMapControl2.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);8、 PageLayoutControl控件与MapControl控件的联动要点:在ArcGIS Engine开发中,因MapControl控件和PageLayoutControl控件并不能共享一个文档文件,要实现联动,一般需通过数据拷贝的方法传递两

30、个控件中的数据内容。基本思路如下:(1)编写数据拷贝方法,将axMapControl1控件中的地理数据复制到axPageLayoutControl1控件中。在该方法中需要利用IObjectCopy接口,以便将axMapControl1中的Map对象拷贝到axPageLayoutControl1控件的ActiveView对象的FocusMap中,具体代码如下: public static void CopyAndOverwriteMap(AxMapControl axMapControl1, AxPageLayoutControl axPageLayoutControl1) /获取对象拷贝接口

31、IObjectCopy objectCopy = new ObjectCopyClass(); object toCopyMap = axMapControl1.Map; object copiedMap = objectCopy.Copy(toCopyMap);/复制地图到copiedMap中 object toOverwiteMap = axPageLayoutControl1.ActiveView.FocusMap;/获取视图控件的焦点地图 objectCopy.Overwrite(copiedMap, ref toOverwiteMap);/复制地图 (2)当axMapControl1

32、控件中加载的地理数据的发生重绘时,与其联动的axPageLayoutControl1控件中的地理数据也要发生相应变化,因此在axMapControl1控件的OnAfterScreenDraw事件中应该添加axMapControl1控件中当前所显示地理数据范围的代码,并将当前显示范围传到axPageLayoutControl1控件的ActiveView对象的FocusMap中,同时要调用数据拷贝方法。IActiveView pActiveView = (IActiveView)axPageLayoutControl1.ActiveView.FocusMap;IDisplayTransformat

33、iondisplayTransformation=pActiveView.ScreenDisplay.DisplayTransformation; displayTransformation.VisibleBounds = axMapControl1.Extent;/设置焦点地图的可视范围 axPageLayoutControl1.ActiveView.Refresh();GeoMapLoad.CopyAndOverwriteMap(axMapControl1, axPageLayoutControl1);(3)当axMapControl1控件中加载的地理数据发生变化时,axPageLayou

34、tCOntrol1控件中的地理数据也要发生相应变化。因此在axMapControl1控件的OnMapReplaced事件中应调用数据拷贝的方法。GeoMapLoad.CopyAndOverwriteMap(axMapControl1, axPageLayoutControl1);(4)当MapControl控件中的地理数据显示状况发生变化时,与其联动的PageLayoutControl中的地理数据也要发生变化。因此在OnViewRefreshed事件中应该添加调用数据拷贝的代码和使图层控件刷新的代码。axTOCControl1.Update();GeoMapLoad.CopyAndOverwr

35、iteMap(axMapControl1, axPageLayoutControl1);9、 调整TOCControl控件中图层的显示顺序要点:利用鼠标拖放调整图层的显示顺序的基本思路如下:1)利用鼠标将需要调整显示顺序的图层拖放到目标位置,需要利用TOCControl控件的OnMouseDown和OnMouseUp两个事件,以及HitTest()和Update()方法。2)利用OnMouseDown事件获取需要调整显示顺序的图层,利用OnMouseUp事件,获得目标图层及其索引号,利用IMap提供的MoveLayer方法,将需要调整显示顺序的图层移到目标图层的下方。使用TOCControl控

36、件提供的Update()方法更新TOCControl控件中显示的内容。定义3个窗体层全局变量: /声明调整TOCControl控件中图层显示顺序的全局变量 ITOCControl mTOCControl; ILayer pMoveLayer; int toIndex;在窗体的Form_Load事件中对第一个全局变量进行实例化。 mTOCControl=axTOCControl1.object as ITOCControl;在TOCControl的鼠标按下事件中添加如下代码: esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone; if (e.button = 1) IBasicMap map = null; ILayer layer = null; object other = null; object index = null; mTOCControl.HitTest(e.x, e.y, ref item, ref map, ref layer, ref other, ref index); if (item = esriTOCControlItem.esriTOCControlItemLayer) if (layer is IAnnotationSublayer) return; else

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁