ArcGISEngine中的地图组成及图层控制接口函数全解课件.ppt
第五讲,地图组成及图层控制(,1,),1,?,课,题:地图组成及图层控制,?,目的要求:本章是,GIS,二次开发的重点内容之一,主要介,绍,ArcGIS Engine,中的地图对象、图层对象、屏幕显示对象,、页面布局对象、地图排版、,Element,对象、,MapGrid,对象,模型、,MapSurround,对象、,Style,对象等,通过介绍这些对,象,了解这些对象的相关接口及这些接口的属性、方法。,?,教学重点:各对象、接口及接口的重要属性、方法,?,教学难点:在实际开发中运用各对象进行图层添加与删除,、各种设置等,?,教学课时:,6,?,学术前沿:,地图对象,?,IMap,接口,?,IGraphicsContainer,接口,?,IActiveView,接口,?,IActiveViewEvents,接口,?,IMapBookmark,接口,?,ITableCollection,接口,图层对象,?,ILayer,接口,?,要素图层,?,CAD,文件,?,TIN,图层,?,GraphicLayer,屏幕显示对象,页面布局对象,湖南城市学院,GIS,专业,GIS,二次开发,?,使用,ArcGIS Engine 9.3,3,湖南城市学院,GIS,专业,GIS,二次开发,?,使用,ArcGIS Engine 9.3,Map,对象,?,数据的管理容器;,?,数据显示的主要载体;,?,共,35,个接口,,如,IMap,、,IGraphicsContainer,、,IActiveView,、,IActiveViewEvents,、,IMapBookmark,、,ITableCollection,等;,?,能显示两类图形,一类是,地理数据,,一类是,元素,。,如矢量点、线、,面数据,栅格数,据,,TIN,数据等。,如指北针、,图例等。,4,湖南城市学院,GIS,专业,GIS,二次开发,?,使用,ArcGIS Engine 9.3,Map,对象,IMap,接口,例:选择要素,IMap,pMap,=,axMapControl1.Map;,IActiveView,pActiveView,=,pMap,as,IActiveView;,IEnvelope,pEnvelope,=,axMapControl1.TrackRectangle();,ISelectionEnvironment,pSelEnv,=,new,SelectionEnvironmentClass();,pSelEnv.DefaultColor,=,GetRGB(110,120,210);,pMap.SelectByShape(pEnvelope,pSelEnv,false);,pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null,null);,5,湖南城市学院,GIS,专业,GIS,二次开发,?,使用,ArcGIS Engine 9.3,Map,对象,IGraphicsContainer,接口,6,Map,对象通过,IGraphicsContainer,接口来管理,图形元素和框架元素。,AddElement,添加元素,UpdateElement,更新元素,DeleteElement,删除元素,湖南城市学院,GIS,专业,GIS,二次开发,?,使用,ArcGIS Engine 9.3,Map,对象,IGraphicsContainer,接口,7,IGraphicsContainer,接口的,AddElement,方法,IMap,pMap,=axMapControl1.Map;,IPolyline,pPolyline=new PolylineClass();,IPoint,pPoint=new PointClass();,pPoint.PutCoords(1,5);,pPolyline.FromPoint,=pPoint;,pPoint.PutCoords(80,5);,pPolyline.ToPoint,=pPoint;,湖南城市学院,GIS,专业,GIS,二次开发,?,使用,ArcGIS Engine 9.3,Map,对象,IGraphicsContainer,接口,8,IGraphicsContainer,接口的,AddElement,方法,ILineElement,pLineElement=new LineElementClass();,IElement pElement=pLineElement as IElement;,pElement.Geometry,=pPolyline as IGeometry;,IGraphicsContainer pGraCon=pMap as,IGraphicsContainer;,pGraCon.AddElement(pElement,0);,axMapControl1.ActiveView.PartialRefresh(esriViewDraw,Phase.esriViewGraphics,null,null);,湖南城市学院,GIS,专业,GIS,二次开发,?,使用,ArcGIS Engine 9.3,Map,对象,IGraphicsContainer,接口,9,IGraphicsContainer,接口的,DeleteElement,方法,?,IGraphicsContainer,pGraCon,=axMapControl1.Map as,IGraphicsContainer;,?,pGraCon.Reset();,?,IElement,pElement;,?,pElement,=pGraCon.Next();,?,while(pElement!=null),?,?,pGraCon.DeleteElement(pElement);,?,pElement,=pGraCon.Next();,?,?,axMapControl1.ActiveView.Refresh();,湖南城市学院,GIS,专业,GIS,二次开发,?,使用,ArcGIS Engine 9.3,Map,对象,IActiveView,接口,10,IActiveView,接口是,Map,对象最主要、最常用,的接口之一,该接口定义了,Map,对象的数据,显示功能。通过该接口,可以在,Map,上,绘制图形,改变视图范围,获取,ScreenDisplay,对象的指针,显示或隐藏标尺和滚动条,刷新地图,湖南城市学院,GIS,专业,GIS,二次开发,?,使用,ArcGIS Engine 9.3,Map,对象,IActiveView,接口,11,IActiveView,接口的重要属性和方法:,?,Extent,返回,Map,对象当前视图的范围,返回值为一,个,Envelope,对象;,?,FullExtent,返回,Map,对象当前视图的全图范围;,?,ScreenDisplay,用于指向一个,ScreenDisplay,对象;,?,PartialRefresh,Map,对象视图的刷新方法,通过指定,esriViewDrawPhase,参数,可以实现不同方式的局部刷,新。,主要内容,12,A.,图层对象,B.,屏幕显示对象,C.,页面布局对象,D.,地图排版,E.Element,对象,?,ILayer,接口,?,要素图层,?,CAD,文件,?,TIN,图层,?,GraphicsLayer,?,Page,对象,?,SnapGrid,对象,?,SnapGuides,对象,?,RulerSettings,对象,?,图形元素,?,框架元素,图层对象,-ILayer,接口,13,ILayer,接口是,所有图层,类都实现的接口,该接口定义了所,有图层的公共方法和属性。,?,Name-,返回图层名称;,?,MaximumScale,(,MinimumScale,),-,显示或设置图层可以,出现的最大(最小)比例尺;,?,ShowTips-,鼠标放在图层中某个要素上的时候,是否会,出现,Tip,;,?,TipText-,图层提示文字;,?,SpatialReference-,设置图层的空间参考。,图层对象,-,要素图层,14,1.,要素图层用于表示离散的矢量对象的信息。,2.,要素图层的主要接口主要有:,?,IFeatureLayer,接口,?,IGeoFeatureLayer,接口,?,IGeoDataset,接口,?,IFeatureSelection,接口,?,IFeatureLayerDefinition,接口,?,ILayerFields,接口,?,IIdentify,接口,图层对象,-,要素图层,-IFeatureLayer,15,IFeatureLayer,接口的主要属性和方法:,?,DataSourceType-,返回图层的数据源属性;,?,Search-,返回一个,ICursor,的对象。,例:,IFeatureLayer,接口的,Search,方法(,P87,),图层对象,-,要素图层,-IFeatureLayer,16,DataSourceType,的类型:,图层对象,-,要素图层,-IGeoFeatureLayer,17,IGeoFeatureLayer,接口继承了,ILayer,接口和,IFeatureLayer,两个接口,,CadFeatureLayer,、,FeatureLayer,、,GdbRasterCatalogLayer,等,3,个图层类实,现了该接口。主要属性和方法有:,?,SearchDisplayFeature-,只显示复合查询要求的要素,,其他要素会消失掉;,?,Renderer-,设置图层的着色对象;,?,DisplayAnnotation-,设置要素图层是否出现标注,如果,为,True,,用户可以依据图层的某个字段进行标注。,图层对象,-,要素图层,-IFeatureSelection,18,IFeatureSelection,接口负责管理一个图层中要素的选择,集的属性和方法。,?,Add-,将本图层的一个要素添加到图层的选择集中;,?,SelectFeatures-,使用一个过滤器把符合要求的要素放,入图层的选择集中;,?,Clear-,把图层的所有选择集清空。,注:选择集有两种,要素选择集和元素选择集,,PageLayout,只有元素选择集,,Map,则有元素选择集和要素,选择集。,图层对象,-,要素图层,-ILayerFields,19,ILayerFields,接口提供了,Field,、,FieldCount,、,FieldInfo,和,FindField,等属性和方法,用于获取要素类,的字段信息。,图层对象,-,要素图层,-IIdentify,20,IIdentify,接口定义了一个方法,Identify,,用于获取图层,的单个要素,返回一个,IArray,数组对象。,湖南城市学院,Hunnan City University,GIS,二次开发,2,图层对象,/CAD,文件,Map,对象能够载入多种格式的地理和非地理数据,其中便包括,AutoCAD,的,DWG,文件,。,DWG,文件是两种不同形式的,混合体,:一是要素图层,保存矢量数据,使用,FeatureLayer,对象管理;二是栅格图像,使用,CadLayer,对象管理。,当,DWG,文件载入,Map,对象时,,ArcEngine,将,CAD,元素分为,4,种类型:,点、线、多边形和标,注,,并在要素的属性表中建立,标识字段,,而不按照,DWG,文件本身的图层号进行分层。,CAD,文,件中的文字可以使用,CadAnnotationLayer,对象,来操作。,下面的代码展示了在,ArcEngine,9.3,中如何加载,DWG,文件:,using,ESRI.ArcGIS.Geodatabase;,using,ESRI.ArcGIS.DataSourcesFile;,private void AddCadLayers,(string strCadPath,string strCadName,AxMapControl pMapControl,),IWorkspaceFactory pCadFactory=new CadWorkspaceFactoryClass();,IWorkspace pWorkspace=pCadFactory.OpenFromFile(strCadPath,0);,ICadDrawingWorkspace pCadDrawingWorkspace=pWorkspace as ICadDrawingWorkspace;,ICadDrawingDataset pCadDataset=,pCadDrawingWorkspace.OpenCadDrawingDataset(strCadName);,ICadLayer,pCadLayer,=,new,CadLayerClass();,pCadLayer.CadDrawingDataset,=,pCadDataset;,pMapControl.AddLayer(pCadLayer,0);,湖南城市学院,Hunnan City University,GIS,二次开发,2,图层对象,/TIN,图层,ITinLayer,接口,定义了,TIN,图层如何,Map,对象中显,示的方法和属性。,?,Dataset,-,显示,TIN,图层的数据源;,?,DisplayField,-TIN,图层的主要显示字段;,?,AddRenderer,-,用于加入一个着色对象;,?,ClearRenderer,-,清除,TIN,图层中所有的着色对象;,?,GetRenderer,-,通过索引值获取着色对象;,?,RendererCount,-,返回着色对象的数目。,湖南城市学院,Hunnan City University,GIS,二次开发,2,图层对象,/GraphicsLayer,GraphicsLayer,是一个,抽象类,,当在,MapControl,控件上绘制图形时,这些绘制的图形所在,的层就是,GraphicsLayer,对象。,GraphicsLayer,类,泛,化,出,了,CompositeGraphicsLayer,、,FDOGraphicsLayer,、,GlobeGraphicsLayer,、,GraphicsLayer3D,、,GraphicsSubLayer,等类。,每个,Map,对象都管理着一个,CompositeGraphicsLayer,对象,该对象是一个图形图层集合,,该集合中有一个缺省的,基本图形图层,,可以通过属性,BasicGraphicsLayer,直接获取。该图层,是默认的,,不能在,CompositeGraphicsLayer,对象中删除,,,CompositeGraphicsLayer,对象,提供了集合中,添加、删除、查找,图层的方法。,FDOGraphicsLayer,是一个与要素相关的标注图层,可以有两种方法添加标注:,?,一是,Label,方法,,即选取要素,逐个添加标注文本;,?,二是,Annotation,方法,,可以对要素图层进行自动标注,并且标注的文本信息可以保存在,数据库中。,湖南城市学院,Hunnan City University,GIS,二次开发,2,屏幕显示对象(,ScreenDisplay,对象),MapControl,中,的,每,个,视,图都有一个,ScreenDisplay,对,象,用于,控制视图中的图形,绘制,。,ScreenDisplay,对,象,除,了,管理窗体屏幕的,显示属性,外,,也,管理缓存和视图屏幕的变,化,等。,可以通过,IActiveView,接口,的,ScreenDisplay,属,性,获,取,ScreenDisplay,对象。,ScreenDisplay,对,象,都,拥,有,DisplayTransformation,对,象,用于,设备单位和地图单,位的转换,。,Interfaces,Description,IConnectionPointContaine,r(Display),Supports connection points for,connectable objects.,IDisplay,Provides access to members that control,the Display.,IDraw,Provides access to members that control,drawing.,IDynamicScreenDisplay,Provides access to dynamic screen display.,IScreenCacheManager,Provides access to a ScreenDisplays caches.,IScreenDisplay,Provides access to members that control,Screen Display.,IScreenDisplay2,Provides access to additional members,that control the Screen Display.,IScreenDisplayZoom,Provides access to zooming the screen,display.,IScreenInvalidate,Provides access to a ScreenDisplays,refresh methods.,ITransformEvents,Provides access to members that control,Transform Events,湖南城市学院,Hunnan City University,GIS,二次开发,2,页面布局对象(,PageLayout,对象),PageLayout,对,象,和,Map,对,象一样,都是图形元素的容器,,但,是,PageLayout,对,象,除,了,保,存图形元素外,还可以保存,框,架元素,(,Frame,Element,)。,PageLayout,对,象,主,要,实,现,了,IPageLayout,接口,该接口,定义了修改页面版式的方法和,属性,包括图形的,位置属性,,标尺、对齐网格、确定页面显,示在屏幕上的方法,。,通过,IPageLayout,接口可以,管,理,RulerSettings,、,SnapGrid,、,SnapGuides,和,Page,等对象。,IPageLayout,接口的主要属性和方法:,?,Page,-,获取放在,PageLayout,对象中的,Page,对象;,?,RulerSettings,-,获取,PageLayout,对象控制的标尺,对象;,?,SnapGrid,-,与,VerticalSnapGrid,一,起,控,制,PageLayout,对象中显示的网格对象;,?,VerticalSnapGrid,-,与,SnapGrid,一,起,控,制,PageLayout,对象中显示的网格对象;,?,ZoomToWhole,-,设置,PageLayout,对象以最大比例,尺显示;,?,ZoomPercent,-,设置按照输入的比例显示;,?,ZoomToPercent,-,设置按照输入的比例显示;,?,ZoomToWith,-,让视图的显示范围与控件的宽度一,致。,湖南城市学院,Hunnan City University,GIS,二次开发,2,页面布局对象(,PageLayout,对象),PageLayout,对象还实现了,IGraphicsContainer,接口和,IGraphicsContainerSelect,接口。,?,IGraphicsContainer,接口用来,管理元素,;,?,IGraphicsContainerSelect,接口用来,管理被选择的元素,。,All,Description,DominantElement,Dominant element.,ElementSelected,Indicates if the element is selected.,ElementSelectionCount,The number of selected elements.,SelectAllElements,Selects all elements.,SelectedElement,Returns the nth selected element.Use Selection count to get the number of,selected elements.,SelectedElements,The selected elements.,SelectElement,Selects the specified element.,SelectElements,Selects the specified elements.,SelectionBounds,The bounds of the selection.,SelectionTracker,Returns the tracker for the nth selected element.Use Selection count to get the,number of selected elements.,UnselectAllElements,Unselects all elements.,UnselectElement,Unselects the specified element.,UnselectElements,Unselects the specified elements.,湖南城市学院,Hunnan City University,GIS,二次开发,2,地图排版,/Page,对象,Page,对象只作为一个,装载地图数据的容器,,不提供查询和分析的功能。,Page,对象的主要接口是,IPage,。,IPage,接口的属性和方法:,Background,-,设置背景样式;,BackgroundColor,-,设,置,背,景,颜,色,;,Border,-,设置,Page,的边框;,Units,-,获取,Page,所使用的单位。,Page,对,象,还,实,现,了,IPageEvents,接,口,,,拥,有,PageColorChanged,、,PageMarginsChanged,、,PageSizeChanged,和,PageUnitsChanged,等,4,个事件。,此外,,ArcEngine,还提供了,esriPageFromID,枚举值设,置,Page,对,象,的,尺,寸,,,使,用,esriPageFromID,比,用,PutCustomSize,设置,Page,尺寸的速度更快。,湖南城市学院,Hunnan City University,GIS,二次开发,2,地图排版,/SnapGrid,对象,SnapGrid,是,PageLayout,上用于,摆放元素而设置的辅助点,便于用户对齐元素,。可以通过,IPageLayout,接口的,SnapGrid,属性,获取,SnapGrid,对象。,SnapGrid,对象实现了,ISnapGrid,接口,主要属性和方法有:,?,HorizontalSpacing,:设置网点之间的水平距离;,?,VerticalSpacing,:设置网点之间的垂直距离;,?,IsVisible,:确定网点是否处于可见状态;,?,Draw,:将,SnapGrid,对象绘制在,Page,上。,湖南城市学院,Hunnan City University,GIS,二次开发,29,地图排版,/SnapGuides,对象、,RulerSettings,对象,SnapGuides,对象是绘制在,PageLayout,上的,辅助线,,分为,水平辅助线,和,垂直辅助线,两种。,可以通过,IPageLayout,接口的,HorizontalSnapGuides,或,VerticalSnapGuides,获得,每个,SnapGuides,都管理着一个,Guide,集合,。,SnapGuides,对象实现了,ISnapGuides,接口,主要的属性和方法有:,?,AddGuides,:将一个,Guide,放在指定的位置;,?,AreVisible,:设置,SnapGuides,是否可见;,?,Draw,:绘制辅助线;,?,DrawHighlight,:绘制高亮辅助线;,?,GuideCount,:返回,SnapGuides,中,Guide,的数目;,?,RemoveAllGuides,:清除所有,Guide,;,?,RemoveGuide,:按照索引值清除,Guide,。,RulerSettings,对,象,辅,助,设,置,元,素,在,PageLayout,上,的,位,置,,,可,以,通,过,IPageLayout,的,RulerSettings,获得当前,PageLayout,的相关的标尺,。,RulerSettings,对象实现了,IRulerSettings,接口,该接口只有,SmallestDivision,属性,用于,设置最小的区分值,。,湖南城市学院,Hunnan City University,GIS,二次开发,30,Element,对象,Element,对象是地图上,不保存到数据库中的元素,,是内存中的对象,当,MapControl,显示地,图发生变化时,这些对象就会消失。,Element,对,象,分,为,两,大,部,分,:,图,形,元,素,(,Graphic,Element,),和,框,架,元,素,(,Frame,Element,),。,IElement,接口是所有图形元素和框架元素都实现的接口,提供了,Geometry,属性和查询、,绘制元素,的方法。,图形元素,GroupElement,MarkerElement,LineElement,TextElement,DataGraphElement,PictureElement,FillShapeElement,框架元素,FrameElement,MapFrame,MapSourroundFrame,OleFrame,TableFrame,?,思考题:,?,1.IMap,接口有哪些属性和方法?,?,2.IGraphicsContainer,接口有哪些属性和方法?,?,3.IActiveView,接口有哪些属性和方法?,?,4.IMapBookmark,接口有哪些属性和方法?,?,5.ILayer,接口有哪些属性和方法?,?,6.,添加、删除图层数据的关键代码是什么?,?,教学总结:,?,本次课程介绍了各对象及其接口,利用这些对象,可以进,行各种复杂的操作和设计。最后部分介绍了图层控制方面,的知识,在实际开发中,图层控制是最基础的功能之一。,