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