《地图及相关对象.ppt》由会员分享,可在线阅读,更多相关《地图及相关对象.ppt(68页珍藏版)》请在三一办公上搜索。
1、第四章 地图及相关对象,主要内容,Map对象图层对象地图显示(Map Display)PageLayout对象图形元素与框架元素MapGrid对象MapSurround对象,1.Map对象,地图对象(Map object)是显示和操作地图数据的容器。地图对象上能显示的图形有两类地理数据:包括矢量类型的要素数据、栅格数据、Tin数据等,这些数据都保存在Geodatabase或数据文件如shapefile中。元素:包括图形元素和框架元素。图形元素可以显示出来,而框架元素充当了“容器”的角色。在ArcMap中可以使用“Draw”工具在Map上直接绘制矩形、圆形、文本等对象,在布局视图上也可以给地图添
2、加指北针、图例、比例尺等图形对象,这些都是图形元素。,1.Map对象,Map对象有双重身份数据的管理容器,可以加载地理数据和图形元素数据显示,可以让用户看到这些数据,如当改变视图范围、刷新地图的时候它是数据的显示者。地图对象中的所有图层共享相同的空间参考第一个载入的图层的空间参考被自动地设置为地图对象的空间参考。新载入的图层,如果它们的空间参考与地图的空间参考不同,会被投影到地图的空间参考。,1.Map对象,Map对象实现的主要接口:IMapIActiveViewIViewManagerIActiveViewEventsIGraphicsContainerIMapBookmarkITableC
3、ollection,1.1 IMap接口,IMap接口是有关地图操作任务的起点,它主要用于管理Map对象中的layer对象、要素选择集、MapSurround对象、标注引擎和空间参考等对象 IMap接口中定义的属性和方法,通过MapDocument获得map对象IMapDocument pMapDocument=new MapDocumentClass();pMapDocument.Open(path,null);IMap pMap=pMapDocument.get_Map(i);通过MapControl获得Map对象IMap pMap=axMapControl1.Map;IActiveVie
4、w pActiveView=pMap as IActiveView;或 pActiveView=axMapControl1.ActiveView;,Map对象的获取,通过PageLayoutControl获得Map对象IActiveView pActiveView=axPageLayoutControl1.PageLayout as IActiveView;或 pActiveView=axPageLayoutControl1.ActiveView;pMap=pActiveView.FocusMap;通过命令或工具类中获得Map对象IHookHelper m_hookHelper=null;IM
5、ap m_Map;IActiveView m_ActiveView;public override void OnCreate(object hook)if(hook=null)return;m_hookHelper=new HookHelperClass();m_hookHelper.Hook=hook;m_Map=m_hookHelper.FocusMap;m_ActiveView=m_hookHelper.ActiveView;,Map对象的获取,ArcObjects中有两种不同的选择集:要素选择集和元素选择集要素选择集可以基于地图的,也可以是基于图层的,使用IMap.SelectByS
6、hape方法构造的是基于地图的要素选择集。遍历选择集:清空选择集:IMap.ClearSelection();,地图的要素选择集,1.2 IGraphicsContaner接口,IGraphicsContaner接口用于管理Map中的元素对象实例:添加元素IGraphicsContainer pGraphicsContainer=pMap as IGraphicsContainer;/定义一个line类型的ElementILineElement pLineEle=new LineElementClass();/设置这个Element的符号对象pLineEle.Symbol=pSymbol;IE
7、lement pEle=pLineEle as IElement;/设置元素的几何形体对象属性pEle.Geometry=pGeo;/将元素添加到Map对象中pGraphicsContainer.AddElement(pEle,0);pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null,null);,1.3 IActiveView接口,IActiveView接口定义了Map对象的数据显示功能。在ArcObjects中,有4个对象实现了这个接口,即PageLayout、Map、Globe和Scene。在ArcMap中
8、,IMxDocument:ActiveView拥有当前活动视图对象的一个指针。如果处于布局视图状态,那么IMxDocument:ActiveView返回的IActiveView对象是指向PageLayout对象的;如果处于在数据视图状态,那么这个属性就会返回一个当前使用的Map对象的指针。,1.3 IActiveView接口,IActiveView:Extent属性返回Map对象当前视图的范围,它是一个Envelope对象。FullExtent属性则可以返回视图的全图范围,因此要显示整幅地图的代码为:/将地图的当前范围设置为全图范围 pActiveView.Extent=pActiveView
9、.FullExtent;pActiveView.Refresh();IActiveView:ScreenDisplay属性指向当前视图的ScreenDisplay对象。每一个视图对象都有一个ScreenDisplay对象用于控制视图的图形绘制工作。IActiveView:PartialRefresh方法可以让视图对象使用不同的方式来局部刷新以重绘地图。pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null,null),地图中活动视图的内容包括以下几种:,1.4 ITableCollection接口,Map对象
10、中除了可以添加地理数据外,还能够添加纯属性表,加入属性表是为了和要素类等对象进行关联和连接。AddTable方法可以将一个table对象添加进Map对象;Table属性可以依据表的标识号获得特定的属性表,如:ITableCollection pTableCol=pMap as ITableCollection;ITable pTable=pTableCol.get_Table(0);RemoveAllTables方法可以让pTableCol对象删除地图中的所有属性表,RemoveTable可以依据表的标识号删除某个属性表,TableCount则可以返回地图对象中所有的属性表的数目。,2.图层对
11、象,Map对象中装载的地理数据是以图层的形式组织到地图对象的。Layer对象本身没有包含数据,而仅仅是获得了数据的引用而已,是用于管理数据源的链接,在ArcObjects中,地理数据始终是保存在GeoDatabase或者地理文件中。此外,图层中还保存着符号化信息(注记要素类除外)。ArcGIS中也可以在一个要素类上新建一个图层文件,即lyr文件,这个文件也是仅仅获取了地理数据的存储位置而已,而没有拥有数据。,2.图层对象,ILayer是所有图层类都实现了的一般接口,它定义了所有图层的公共方法和属性。要素图层、栅格图层、TIN图层、CAD图层等,2.1 要素图层,要素数据是GIS中最常使用的数据
12、类型之一,它可以用于表示离散矢量对象的信息。IFeatureLayer2IGeoFeaturelayerIGeoDatasetIFeatureSelectionIFeatureLayerDefinitionILayerFieldsIIdentify,IFeatureLayer2接口用于管理要素图层的数据源,即要素类(Featureclass)。DataSourceType属性返回要素图层的数据源的类型.Search方法,对要素图层进行查询(*)DisplayField属性,指定显示地图图层提示的字段,IFeatureLayer接口,IGeoFeaturelayer接口继承了ILayer和IFe
13、atureLayer两个接口,用于控制要素图层中与地理相关的内容,例如要素的着色和标注等功能。SearchDisplayFeatures 方法,显示只符合查询要求的要素Renderer属性用于设置图层的着色对象;DisplayAnnotation属性可以设置要素图层是否出现标注,当它为true的时候,用户可以在这个要素图层上依据要素类的某个字段进行标注。实例:要素图层的符号化,IGeoFeatureLayer接口,IGeoDataset接口仅有两个属性,用于管理地理要素集的范围和空间参考。Extent可以返回当前数据集的范围,是一个IEnvelope类型的对象;SpatialReference
14、属性则可以让用户获得这个数据集的空间参考。所有的图层和数据集实现了IGeoDataset接口,IGeoDataset接口,IFeatureSelection接口负责管理一个图层中的要素的选择集的方法和属性。SelectFeatures(IFeatureSelection)和Search(IFeatureLayer)方法的区别:要素图层的Search方法返回的是ICursor对象,它仅仅是一个指向要素的指针;使用IFeatureSelection:SelectFeatures方法,则符合要求的要素会被标记为“被选择的要素集”,即高亮显示,这个选择集是一个ISelectionSet对象,可以用Se
15、lectionSet返回,如:IFeatureSelection pSel=pFeatureLayer as IFeatureSelection;ISelectionSet pSelectionSet=pSel.SelectionSet;,IFeatureSelection接口,IFeatureLayerDefinition接口定义了CreateSelectionLayer方法,可以将一个图层选择集中的要素转换为一个单独的要素图层。它要求四个参数:LayerName定义了新图层的名称;如果希望使用当前图层的要素选择集,需要设useCurrentSelection为TRUE;joinTableN
16、ames是一个可能与当前图层连接的表名称,使用这个方法同样也可以将连接表的数据放入新的图层中;DefinitionExpression可以用于设定一个选择过滤,将要素选择集中符合条件的要素放入新的图层。,IFeatureLayerDefinition接口,ILayerFields接口:可以直接获取一个要素图层的要素类字段结构。另外,也可以从要素类着手获得要素类的字段。Iidentify接口:定义了Identify()方法返回 FeatureIdentifyObject 类型的对象数组实例:使用Iidentify识别要素,其他接口,底图图层是一种特殊的图层组,用于可视化及漫游时存储参考图层,如影
17、像图、街道、公路网、地形信息等。底图的显示性能非常强大,它是用高性能的多线程绘制引擎绘制的,因此提供地图显示和相应速度非常高效。如果图层为底图图层中,则无法对图层属性进行修改,如果正在使用地图图层,则无法对其中的内容执行数据更新操作,如果需要编辑数据或更新图层,只需将该图层拖出底图即可,然后再将更新后的图层拖回到底图图层中。使用BasemapLayer类可以通过编程方式创建底图图层,实现了IGroupLayer接口。,2.2 底图图层,实例:创建底图图层并添加到地图对象中:IBasemapLayer basemapLayer=new BasemapLayerClass();IGroupLaye
18、r groupLayer=basemapLayer as IGroupLayer;groupLayer.Add(layer);map.AddLayer(basemapLayer as ILayer);,2.2 底图图层,3.地图显示,显示对象(Display objects)负责将地理要素或元素的几何形状等绘制到输出设备(屏幕、打印机或输出文件)中。有两类标准的显示对象:ScreenDisply:是对普通的应用程序窗体的抽象,实现了滚屏和后台存储功能SimpleDisply:是对其他使用Windows设备上下文着色的设备的抽象,这些设备包括打印机、次要窗体(如对话框、警示框)等。,3.1 Sc
19、reenDisplay对象,ScreenDisplay是与一个窗体相联系的显示设备,除了管理窗体屏幕的显示属性外,还管理发生在显示背后的对象和行为,如缓存和屏幕变化等。对于Map或PageLayout对象,可以通过IActiveView:ScreenDisplay属性获得ScreenDisplay 对象。IActiveView pActiveView=axMapControl1.ActiveView;IScreenDisplay screenDisplay=pActiveView.ScreenDisplay;,3.1 ScreenDisplay对象,ScreenDisplay类主要实现了ISc
20、reenDisplay3 接口,该接口继承了IScreenDisplay2、IDisplay接口。DrawPoint、DrawPolyline、DrawPolygon和DrawRectangle是在地图控件中经常使用于绘制几何对象的方法,除此以外还有一个DrawText可以用于在视图上绘制字符对象,所有的这些Draw方法在使用前都必须先使用StartDrawing方法,在绘制结束后需要使用FinishDrawing方法。使用这些Draw方法都需要传给要绘制的几何形体对象。这些Draw方法绘制的对象不能持久化,当使用Refresh后就不存在了。,3.1 ScreenDisplay对象,实例:绘制
21、Polyline,3.2 显示缓存,屏幕显示可以使用显示缓存来加速,以提高显示性能。Map 和PageLayout 都实现了缓存最简单的情况下,Map为所有的图层创建一个缓存;如果Map中有注记或图形元素,再创建另外一个缓存;如果Map中有要素选择集,再创建第三个缓存。除了这些缓存外,单个的图层也可以有私有缓存;一旦一个图层有了私有缓存,那么位于它之上、之下的图层分别组织到不同的缓存。,3.2 显示缓存,StartDrawing()有2个参数:hDc 和cacheID.hDc 参数指定绘制的目标设备,通常为一显示对象、打印机或位图(bitmap)。cacheID 参数指定绘制使用的缓存,绝大多
22、数情况下,应当使用esriNoScreenCache.当使用esriNoScreenCache 时,显示的活动缓存设置为0,并直接绘制到设备上。当不想直接绘制到屏幕上时,可以指定一个用于绘制的缓存(bitmap),最终将缓存中的位图拷贝到屏幕。当屏幕重绘时,首先检测缓存脏与否,不需重新从草图绘制,而仅需简单重绘位图,从而节省绘制时间。,3.2 显示缓存,如何添加缓存图层设置图层的cached属性为true;图层的缓存会一直使用,直到图层的数据变化,并调用IScreenDisplay.Invalidate()使该缓存无效。,4 地图排版,4.1 PageLayout对象4.2 Page对象4.3
23、 SnapGrid对象4.4 SnapGuides对象4.5 RulerSettings对象,4.1 PageLayout对象,PageLayout对象对应于ArcMap的布局视图,它是一个虚拟的页面,可放置和排列地理数据和地图元素,如地图框、地图标题、地图图例、地图比例尺等。PageLayout 主要用于地图的设计、打印与输出。PageLayout和Map两个对象非常相似视图对象,可以显示地理信息;图形容器,可以容纳图形元素(Graphics Elements)。区别:PageLayout除了保存图形元素外,还可以保存诸如MapFrame的框架元素(Frame Element)。,4.1 P
24、ageLayout对象,当使用地图文档时,PageLayout对象通过MapFrame 对象来管理文档中的地图对象;一个文档中的所有地图对象必须包含在MapFrame元素中,由PageLayout直接管理。为了更好地显示地图以便打印和输出,PageLayout会自动产生一些对象来修饰地图:SnapGuides、SnapGrid、RulerSettings和Page。实现的主要接口IPageLayout(2,3)IGraphicsContainer:管理元素IGraphicsContainerSelect,专门用于被选择的元素的管理IActiveView和IActiveViewEvents,用于
25、管理页面布局的视图及相关事件,4.2 Page对象,PageLayout对象被创建后,会自动产生一个Page对象来管理布局视图中的页面,通过IPageLayout3:Page可以得到它的引用。IPage:Page类的主要接口,用于:管理Page的颜色、尺寸、方向等属性管理版式单位、边框类型和打印区域等属性IPageEvents:Page类的另一个接口,用于管理页面的相关事件,如PageColorChanged、PageMarginsChanged、PageSizeChanged和 PageUnitsChanged等。Page对象会负责监听这些事件,并作出相应的反应。如当Page的单位发生变化后
26、,布局视图需要更新它的转换参数、Snapgrid以及SnapGuides等附属对象。,4.3 SnapGrid对象,SnapGrid是PageLayout上用于摆放元素而设置的辅助点,这些点有规则呈网状排列,便于用户对齐元素。SnapGrid类实现了 ISnapGrid接口,用于设置SnapGrid的各种属性。如 HorizontalSpacing和VerticalSpacing属性用于设置网点之间的水平距离和垂直距离,而IsVisible用于确定这些网点是否处于可见状态,Draw方法用于将一个SnapGrid对象绘制在Page上。,4.4 SnapGuides对象,SnapGuides是为了
27、更好放置地图而在PageLayout出现的辅助线。每个SnapGuides都管理着一个Guide集合,即这种辅助线可以同时存在多条。这个对象有两种类型:水平辅助线,通过 IPageLayout:HorizontalSnapGuides获得垂直辅助线,通过IPageLayout:VerticalSnapGuidesSnapGuides类实现了ISnapGuides接口,它定义了管理SnapGuide的属性和方法:AreVisible设定SnapGuides是否可见GuideCount可以返回一个 SnapGuides对象中 Guide的个数Guide可以按索引值得到某个具体的Guide对象。Ad
28、dGuide方法可以将一个 Guide放在指定位置上;RemoveAllGuides和 RemoveGuide方法分别可以清除所有的Guide和按照索引值清除Guide。,4.5 RulerSettings对象,标尺对象也是为了辅助元素的放置而出现在PageLayout对象上方和左方的辅助尺。RulerSettings是可以直接创建的对象,但一般都是直接通过IPageLayout:RulerSettings获得与当前PageLayout相关的标尺。RulerSettings实现了IRulerSettings,它仅仅定义了一个属性,即SmallestDivision用于设置最小的区分值(页面尺寸
29、单位)。,5 Element对象,5.1 概述5.2 图形元素5.3 框架元素,5 Element对象,在一幅地图中,除了地理数据外,还可以拥有元素。Element是一个非常庞大复杂的对象集合,它主要分为两大部分:图形元素(Graphic Element)和框架元素(Frame Element)。图形元素包括MarkerElement、LineElement、FillshapeElement、TextElement、DataGraphElement、PictureElement 和GroupElement等对象,它们都是作为图形的形式而存在,在视图上是可见的。框架元素包括FrameElemen
30、t、MapFrame、MapSurroundFrame、OleFrame和TableFrame等对象,它们都是作为不可见的容器而存在的。IElement是所有图形元素和框架元素类都实现的接口。这个接口可以让程序员确定元素的Geometry属性,它也定义了方法让用户查找和绘制元素。,5.1 图形元素,所有的图形元素(Graphics Element)类都实现了 IGraphicElement接口,这个接口仅定义了一个 SpatialReference属性,用于设置这些图形元素的空间参考。除此以外,图形元素还实现ITransform2D接口,这个接口定义的方法和属性可以让图形元素移动、旋转和缩放。
31、,LineElement和MarkerElement对象,LineElement和 MarkerElement是最简单的图形元素,它们在数据视图(data view)或者布局视图(Pagelayout view)上表现为线和点的形式。要将图形元素显示在视图上,一般的步骤是这样的:产生一个新的元素对象;确定元素显示时使用的Symbol(符号)和Geometry(几何形体对象);使用 IGraphicsContainer:AddElement把元素添加到视图中去;刷新视图,让添加的元素可以显示出来。,LineElement和MarkerElement对象,以 LineElement为例,添加它到视
32、图需要使用两个接口:IElement和ILineElement,前者用于确定线元素的Geometry,后者用于确定Symbol。注意:能够使用的Symbol和Geometry不是混用的,LineElement元素只能使用用于修饰LineElement对象的符号,也只能使用Line或者Polyline作为Geometry。MarkerElement也是一样,使用的是Marker类型的Symbol和点作为它的Geometry。MarkerElement类支持IMarkerElement接口,这个接口的Symbol方法用于在新建一个MarkerElement对象时设置点符号(MarkerSymbol
33、)。看实例,地图为了显示图形的附加信息,一般都是需要采用文字标注来完成。地图的标注有两种形式:一种是保存在地理数据库中以标注类的形式存在;另一种是使用文字元素。TextElement对象实现了ITextElement接口,这个接口定义了设置文字元素的属性,如 ScaleText(文字尺寸)、Text(字符)和 Symbol(文字的修饰符号)。注意:TextElement的 Geometry是一个点,即 Point对象。,TextElement对象,DataGraph是一种基于地理数据而创建的图表。在ArcMap中载入地理数据后,点击“View”-“Graphs”-“Create”,可依据表或图
34、层的数值数据产生一张图表。这样的图表就是DataGraphElement对象,可将其添加到页面布局上。IDataGraphElement接口仅仅被DataGraphElement对象所实现,它定义了两个属性,IDataGraphElement:DataGraph用于设定元素的数据图表对象,IDataGraphElement:Map为图表的父地图对象。,DataGraphElement对象,GroupElement对象可以将多个元素编为一组当一个实体来使用。如果用户需要对多个元素进行相同的操作,如同时移动多个元素的时候,可以将它们编为一个组。GroupElement是一个组件类,即用户可以新建一
35、个单独的GroupElement对象用于处理元素。GroupElement类默认实现IGroupElement3接口,它定义了操作GroupElement的方法和属性。AddElement方法可以将一个元素添加到GroupElement对象;ClearElements可以清除 GroupElement中所有的元素;DeleteElement方法可以根据GroupElement中的某个元素的索引值删除这个元素。ReplaceElement方法替换组中的某个元素。,GroupElement对象,FillshapeElement是一个抽象类,它的子类有 CircleElement、EllipseEl
36、ement、PolygonElement和RectangleElement。这些对象的共同特点是它们的Geometry属性都是一个二维的封闭图形,在视图上分别表现为圆形元素、椭圆形元素、多边形元素和矩形元素。IFillshapeElement是所有FillshapeElement类都实现的接口,它定义了用于显示图形元素的Symbol属性,这个Symbol属性必须设置为IFillsymbol对象。,FillShapeElement对象,在制作地图时,可以向PageLayout中插入图片,这样的图片作为一种元素图片元素(PictureElement)。主要的图片元素有:BmpPictureElem
37、ent、EmfPictureElement、GifPictureElement、Jp2PictureElement、JpgPictureElement、PictureElement、PngPictureElement和TifPictureElement。所有的图片元素都实现了IPictureElement4接口,使用于管理和操作图片元素。Filter属性是供 OpenFileDialog使用的过滤器;MaintainAspectRatio属性可以决定调整图片尺寸时是否保持其长宽比例;PictureAspectRatio 返回图片X、Y方向长度的比率。只有MaintainAspectRatio
38、属性为False 时,才可获得PictureAspectRatio 的值。PictureDescription可以添加图片的附加描述信息;SavePictureInDocument属性则确定这张图片是否会被保存到地图文件中ImportPictureFromFile用于从文件导入一张图片。,PictureElement对象,5.2 框架元素,框架元素(Frame Element)是一种包含其他地图元素的容器。所有的图片元素都属于框架元素,除此之外,还有两个主要的框架元素:MapFrame(地图框架)和地图附属物框架(MapSurroundFrame)。MapFrame对象是Map的容器,用于管理
39、Map对象MapSurroundFrame对象用于管理MapSurround对象,MapSurround就是为了修饰地图而使用的比例尺、比例文本、指北针、图例等对象。每个MapSurroundFrame都是与一个MapFrame相联系的。如果一个MapFrame被删除了那么它其中所有的MapSurroundFrame对象也将被删除。所有的框架元素类都实现了IFrameElement接口,这个接口定义了操作框架元素最一般的属性和方法。,MapFrame是由PageLayout控制的。使用IGraphicsContainer.FindFrame方法可以查找到某个特定对象的框架对象。MapFrame
40、对象支持IMapFrame接口,使用IMapFrame定义的属性和方法可以控制其中的Map对象。Map属性可以获得这个地图框架内的地图对象,它是一个只读属性MapBounds属性则可以返回地图对象的范围,即一个 Envelope对象MapScale属性来确定地图显示的比例CreateSurroundFrame方法用于创建一个 MapSurroundFrame对象 MapFrame对象还实现了IMapGrids接口,它可以用于管理地图框架中的MapGrid(地图格网),5.2.1 MapFrame对象,MapSurroundFrame是一种用于管理MapSurround对象的框架元素。MapSu
41、rround是指北针、比例尺和图例一类的对象,它们是一种“智能”的,会自动与某个地图对象关联,随着地图视图的变化而变化的对象。当地图框架发生旋转的时候,指北针对象的方向也会发生变化。MapSurroundFrame支持MapFrameResized事件,当地图的尺寸改变的时候,它会监听这个事件,并自动更新比例尺等对象。IMapsurroundFrame接口是MapsurroundFrame对象的默认接口,IMapSurroundFrame:MapFrame属性可以得到与自身关联的MapFrame对象,而IMapSurroundFrame:MapSurround属性则可以得到它持有的 MapSu
42、rround对象,5.2.2 MapSurroundFrame对象,TableFrame是一种可以容纳Table对象的框架元素,只能放置在布局视图中,而不能添加到Map对象中去。ITableFrame接口是TableFrame类实现的唯一接口,它提供了操作框架元素中表的属性和方法。StartCol和StartRow可以设置显示表时的列数和行数TableView属性可以让程序员得到一个 ITabelView对象去改变表视图的属性,诸如选择显示等。Table属性将会返回给用户一个与框架相关的 ITable对象,它实际上是普通属性表或是要素类,也就是这个数据表的数据源对象。TableProperty
43、属性得到的ITableProperty对象来获得它的指针。当用户在ArcMap打开一个要素图层的属性表,点击“Table Options”按钮,选择“Add Table to Layout”后,会在布局视图中发现一份数据表。,5.2.3 TableFrame对象,6 MapGrid对象模型,ArcObjects中也提供了用于辅助显示地图的地图格网MapGrids对象,它出现了地图边缘上,用于显示经纬度或者方格网。必须出现在PageLayout视图而不是Map视图。一个地理网格主要由三部分组成GridLine(格网线)GridLabel(格网标注)GridBorder(格网边框),6.1 Map
44、Grid对象,MapGrid对象是布局视图中的一种参考线或点,它可以帮助用户快速地确定地图中要素的位置。MapGrid对象由MapGrids来管理,一个MapGrids中可以存在多个MapGrid对象。在布局视图中获得一个MapGrid的指针非常容易,使用 IGraphicsContainer:FindFrame可以得到PageLayout对象的MapFrame对象,然后通过QI方法可以得到。,private IMapGrid GetMapGrid()IActiveView pActiveView=axPageLayoutControl1.PageLayout as IActiveView;I
45、GraphicsContainer pGraphicsContainer=pActiveView as IGraphicsContainer;IMap pMap=pActiveView.FocusMap;IMapFrame pMapFrame=pGraphicsContainer.FindFrame(pMap)as IMapFrame;IMapGrids pMapGrids=pMapFrame as IMapGrids;IMapGrid pMapGrid=pMapGrids.get_MapGrid(0);return pMapGrid;,MapGrid是一个抽象类,它有四个子类对象,如 Mea
46、suredGrid、Graticule、IndexGrid和CustomOverlayGrid。IMapGrid是所有类型的地图格网类都实现的接口,它用于设置MapGrid对象的一般属性和方法Border属性,用于设置地图网格的边框LabelFormat属性用于设置地图网格上的标签格式Linesymbol则可以用于设置网线的样式IMapGrid接口还定义了多个设置 tick对象的属性,tic就是一个小记号点,如网线之间的交点、网线与边的交点等SetSubTicksVisiblity等方法可以按照用户的要求来确定这些点,Graticule是使用经纬线来划分地图的地图格网对象,它实现了两个接口 I
47、Graticule和IMeasuredGrid。由于Graticule对象是使用经纬网,因而需要设置空间参考属性。MeasuredGrid也是使用经纬度作为地图网格来划分地图的,它与Graticule对象的不同之处在于它的空间参考属性可以和MapFrame对象一致,也可以不一致。它除了实现IMeasureGrid接口外,还实现了IProjectedGrid接口用于设置它的投影属性。IndexGrid是使用索引值的方式来划分地图的区域的对象,通常南北方向用“ABC”,而东西方向用“123”来表示,它适合小区域内地块的划分等。,6.2 MapGridBorder对象,地图格网边框的有两种类型:Si
48、mpleMapGridBorder和 CalibratedMapGridBorder。它们都实现了IMapGridBorder接口。IMapGridBorder:DisplayName属性可以得到边框的显示名,它们的 DisplayName分别是“simple border”和“calibrated border”。SimpleMapGridBorder对象只是使用简单的直线来作为地图的边框,因而在ISimpleMapGridBorder接口中必须设置的是LineSymbol属性,它用于确定边框线的样式、宽度和颜色。CalibratedMapGridBorder是使用一种渐变线段的边框对象,这
49、个对象支持的接口是ICalibratedMapGridBorder,它定义了边框的前景色、后景色、宽度,线段的间隔长度等属性。,6.3 MapGridLabel对象,地图格网标签:无论是在地图中使用经纬网还是方里网,都必须设置一些标识性字符,这些字符都需要使用到MapGridLabel对象来设置。IGridLabel接口控制着所有GridLabel对象的一般属性。IGridLabel:LabelAlignment属性可以设置格网标注在格网对象的四个边上的水平和垂直方向,它需要传入一个esriGridAxisEnum枚举类型值。DMSGridLabel对象的特点是其标注字符使用的是经纬度的单位,
50、即度、分和秒,例如110。1010”。DMSGridLabel类实现IDMSGridLabel接口用于管理经纬网标注对象的属性,如字体、标注类型等。,6.4 MapGridFactory对象,MapGridFactory对象可以让程序员快速新建一个地图格网对象,这些新建的格网对象的属性被设置为缺省值。MapGridFactory是一个抽象类,它唯一的接口是IMapGridFactory,其中定义的create方法可以新建MapGrid对象。MapGridFactory的子类有GraticuleFactory、IndexGridFactory、MeasuredGridFactory、Custom