1、利用C#和AE进行软件开发,要求能够加载矢量格式和栅格格式的数据,需要用户通过添加点、线、面自定义命令和工具,同时根据给定条件进行要素查询和专题地图制作,请详细分析需要添加哪些组件库?要点:System库:SystemUI库:Carto库:Geometry库:Display库:FrameWork库;GeoDatabase库:DataSourcesFile库;DataSourcesRaster库:2、请详细分析在AE开发中存在哪三种类?各种类有何特性?并分析这几种类存在哪几种关系?要点:ArcGISEngine存在三种类:抽象类:不能直接产生一个对象,但是可以生成一个子类;组件类:可以直接创建一个类的对象,用new关键字;例如:IMappMap=newpMap();普通类:不能用new关键字直接创建类的对象,但是可以利用组件类或普通类创建一个普通类。类与类之间的关系:(依赖关系:一个对象有方法产生另外一个对象)(关联关系:以从一个类的对象,访问到另一个类的对象)(组合关系:一个类对象是另外一个类对象的组成部分)(继承关系)3、利用Mapcontrol、Toolbarcontrol、Toccontrol控件编写加载shape格式和mxd格式的文件程序,不能用系统内的加载数据命令,需要自己定义文件对话框,设置伙伴控件将窗体最大化显示,设置菜单以及加载和显示shape和mxd文件?要点:(1)打开shp格式文件OpenFileDialogdlg=newOpenFileDialog();dlg.Filter=Shapefile(*.shp)|*.shp;dlg.Title=打开Shape数据文档;dlg.Multiselect=true;//定义存放所选文件名的数组string[]strFileName;if(dlg.ShowDialog()==DialogResult.OK){抽象类子类A子类B对象A对象B1..*对象A对象B1..*1..*对象A对象BstrFileName=newstring[dlg.FileNames.Length];strFileName=dlg.FileNames;if(strFileName.Length0){stringWorkSpacePath=System.IO.Path.GetDirectoryName(strFileName[0]);string[]strShapeFileName=newstring[strFileName.Length];//获得打开IFeatureClass的字符串数组for(inti=0;istrFileName.Length;i++){strShapeFileName[i]=System.IO.Path.GetFileName(strFileName[i]);}IWorkspaceFactorypWorkspaceFactory=newShapefileWorkspaceFactoryClass();IWorkspacepWorkspace=pWorkspaceFactory.OpenFromFile(WorkSpacePath,0);IFeatureWorkspacepFeatureWorkspace=pWorkspaceasIFeatureWorkspace;for(inti=0;istrShapeFileName.Length;i++){IFeatureClasspFeatureClass=pFeatureWorkspace.OpenFeatureClass(strShapeFileName[i]);IDatasetpDataset=pFeatureClassasIDataset;IFeatureLayerpFeatureLayer=newFeatureLayerClass();pFeatureLayer.FeatureClass=pFeatureClass;pFeatureLayer.Name=pDataset.Name;ILayerpLayer=pFeatureLayerasILayer;axMapControl1.Map.AddLayer(pLayer);}}}(2)加载MAX文档OpenFileDialogOpenFileDig=newOpenFileDialog();OpenFileDig.Title=选择需要加载的地图文档文件;OpenFileDig.Filter=地图文档文件(*.mxd)|*.mxd;OpenFileDig.ShowDialog();stringstrFileName=OpenFileDig.FileName;if(strFileName==string.Empty)return;if(axMapControl1.CheckMxFile(strFileName)){//是Mxd文档文件IArraypArray;pArray=axMapControl1.ReadMxMaps(strFileName,Type.Missing);IMappMap;for(inti=0;ipArray.Count;i++){//QI接口跳转pMap=pArray.get_Element(i)asIMap;if(pMap.Name==Layers){//加载文档对象中特定的Map对象axMapControl1.MousePointer=esriControlsMousePointer.esriPointerHourglass;axMapControl1.LoadMxFile(strFileName,0,Type.Missing);axMapControl1.MousePointer=esriControlsMousePointer.esriPointerDefault;}}}else{MessageBox.Show(请选择地图文档文件!,信息提示);return;}4、在AE开发中,请分析空间几何对象(Geomery)中的高级几何对象和种类?要点:在Geometry模型中,几何形体对象被分为两个层次,其一是构成要素的几何图形,另一个是组成这些形状的构件。前者称为高级几何对象,具体包括:①Point对象:是一个0维的几何图形,可以用于描述只需要精确定位的对象;②Multipoint对象:无序点的群集,它用于表示具有相同属性设置的同一组点;③Envelope对象:是一个矩形区域,用于表示要素的空间范围,它是作为任何一个几何形体的最小边框区域而存在的;④Polyline对象:是相连或不相连的路径对象(path)的有序集合;⑤Polygon对象:是环(Ring)的集合,Polygon通常用于描述具有面状特性的要素。附:注意掌握Geometry对象模型图5、请分析在AE开发中空间参考的含义,何为地理坐标系?何为投影坐标系?如何设置空间参考?要点:空间参考:为了空间数据能够被合适的存储和指向地球上某一个位置,必须设置空间参考。空间参考包含了坐标系统和精度。坐标系统(地理坐标系或投影坐标系)定义空间数据在地球上的具体位置。地理坐标系:是确定地物在地球上位置的坐标系,以经纬度为地图的存储单位;投影坐标系:是将三维地理坐标系统上的经纬网投影到二维平面地图上使用的坐标系统;设置空间参考:AE中提供了一系列对象供开发者管理坐标系统,对于大部分开发者而言,需要了解到三种主要的ArcObjects组件:ProjectedCoordinateSystem使用IProjectedCoordianateSystem接口新建一个投影坐标系统;GeographicCoordinateSystem确定一个地理坐标系统,可以使用IGeographicCoordinateSystem接口,设置一个地理坐标系统;SpatialReferenceEnvironment:Spatialreference对象的ISpatialReference接口提供了操作方法和属性来设置一个数据集空间参考属性。6、利用Mapcontrol、Toolbarcontrol、Toccontrol控件的MouseDown事件中添加绘制多义线(PolyLine)和多变形(PolyGon)的程序,要求设计画多义线和多变形的菜单,然后在MouseDown事件中判断选择,以确定画多义线还是画多变形,并写出画多义线和多边形的代码。要点:两个菜单命令://定义主窗体层全局变量stringGeoMapOperateT=string.Empty;//定义两个菜单,并初始化GeoMapOperateT,菜单名字GeoMapDLine,GeoMapDPolygonprivatevoidGeoMapDLine_Click(objectsender,EventArgse){GeoMapOperateT=DrawLine;}privatevoidGeoMapDPolygon_Click(objectsender,EventArgse){GeoMapOperateT=DrawPolygon;}//主窗体鼠标按下事件相应处理:privatevoidaxMapControl1_OnMouseDown(objectsender,IMapControlEvents2_OnMouseDownEvente){//主视图的鼠标按下事件GeoMapAdd.GeoMapOperate(axMapControl1,e,GeoMapOperateT);}封装类:classGeoMapAdd{publicstaticIMappMap;publicstaticIActiveViewpActiveView;//与地理数据的交互操作publicstaticvoidGeoMapOperate(AxMapControlaxMapControl1,IMapControlEvents2_OnMouseDownEvente,stringOperateT){switch(OperateT){caseDrawLine:{pMap=axMapControl1.Map;pActiveView=pMapasIActiveView;IPolylinepPolyline;pPolyline=axMapControl1.TrackLine()asIPolyline;//产生一个SimpleLineSymbol符号ISimpleLineSymbolpSimpleLineSym;pSimpleLineSym=newSimpleLineSymbolClass();pSimpleLineSym.Style=esriSimpleLineStyle.esriSLSSolid;//需要用户动态选择//定义线的颜色IRgbColorpColor;pColor=newRgbColorClass();pColor.Red=220;pColor.Green=112;pColor.Blue=60;pSimpleLineSym.Color=pColor;//需要用户动态选择pSimpleLineSym.Width=1;//产生一个PolylineElement对象ILineElementpLineEle;pLineEle=newLineElementClass();IElementpEle;pEle=pLineEleasIElement;pEle.Geometry=pPolyline;//将元素添加到Map对象之中IGraphicsContainerpGraphicsContainer;pGraphicsContainer=pMapasIGraphicsContainer;pGraphicsContainer.AddElement(pEle,0);pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null,null);break;}caseDrawPolygon:{pMap=axMapControl1.Map;pActiveView=p