第三章 地图控件

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

主要内容一、Map对象二、Layer对象一、Map对象地图的组成打开ArcMap程序后,用户首先看到的是数据视图(dataview)。ArcMap的主要功能查看数据和地理分析都是在这个视图中完成的。数据视图其实是一个Map对象。一、Map对象地图的组成在ArcMap中,可以显示在Map上的图像分为两大类,即地理数据和图形element(元素),他们的共同特征是这两者都有Geometry属性,拥有明确的几何形状。1、地理数据包括矢量类型的要素数据、栅格数据、TIN数据等,这些数据保存在地理数据库或数据文件中,他们是用于GIS分析制图的源数据;2、元素是另一种可以显示在Map上的对象。在使用ArcMap的过程中,用户可以使用Draw”工具栏的图形工具在Map上直接绘制一个矩形或者线等对象,在PageLayout视图中也给地图上插入指北针、图例、比例尺等图形对象,这些都是图形元素,它们被用于地图制版过程中。一、Map对象地图的组成在ArcMap中,Map对象具有双重身份,一方面是数据的管理容器,可以加载地理数据和可视化元素,扮演了一个数据管理器的角色;另一方面,又可以让用户看到这些数据,即扮演了一个数据显示器的角色。当程序员把地理数据加载到Map对象的时候,它是数据的管理者;在刷新地图、改变显示范围的时候,它就是一个数据的显示者。一、Map对象地图的组成Map组件的主要接的有:IMap,IGraphicContainer,IActiveView等,如图所示。一、Map对象IMap接口--图层管理Map接口是开始多数GIS任务的起点,主要用于管理Map对象中的Layer对象、要素选择集、标注引擎和空间参考等对象。Map对象可以显示地理数据,而这些地理数据都是通过某个图层引入到地图对象中的,因此可以认为Map对象是一个存放Layer对象的容器,Map接口定义了大量的方法来操作它其中的图层对象。下而简要介绍几个主要的方法:AddLayer方法可以将一个图层对象加入Map对象中去AddLayers可以一次加入一个或多个图层,当然多个图层对象必须放在一个EnumLayer对象中才能被引入,后者是一个图层枚举对象,可以保存多个图层的指针。CIearLayers可以清除Map中所有的图层;LayerCount则指明这个地图对象中包含了多少个图层对象。Getlayer(index)属性可以根据地图中图层的索引值得到具体的图层对象,如:Layerplayer;player=pMap.get_Layer(2);一、Map对象IMap接口--图层管理如图5-2所示,图中是MapControl控件的属性对话框中的图层列表,其中可以看到3号图层(states)放在列表框的最下面:在添加地图的过程中,第一个加入Map对象的图层是0号,第二个图层就是1号,0号图层放在图层对话框中最上面,但是在地图中实际放在最下面。如果在一个Map中放入两个面类型的图层,会发现第一次加入的图层会被后一次加入的图层所掩盖。这种层概念是数据组织的一种有效形式。一、Map对象IMap接口--选择对象在ArcMap使用“SelectFeatures”工具在地图上拖曳后,被选择的要素将会高亮显示,即使这些要素放在不同图层上的。这个工具没有什么限制,不管是点、线还是多边形,都可以同时选择到。这些被高亮显示的要素称为“FeatureSelection”(要素选择集),程序有多种方式可以用于选择要素,如SelectByShape方法就是其中之。SelectByShape方法实现了ArcMap软件“selectFeatures”功能,选择Map所有处于拖曳范围内的要素,无论是哪个图层,把选择的要素添加到Map的Selectionset里面。一、Map对象IMap接口--选择对象一、Map对象IMap接口--选择对象IMap.FeatureSelection属性可以返回map中被选择的要素,SelectionCount属性可以得到Map对象的要素选择集中的要素的数目,CIearSelection方法用于清除Map对象中的选择集。一、Map对象IActiveView接口IActiveView接口定义了Map对象的数据显示功能。这个接口管理着ArcMap主要的程序窗口和所有绘制图形的方法。使用这个接日的方法可以改变视图的范围,可以得到ScreenDisplay对象的指针,可以显小或隐藏标尺和滚动条,也可以刷新视图。在ArcObjects中,有两个对象实现了这个接口,Map和PageLayout。这两个对象分别代表了ArcMap中两种不同的视图:数据(Data)视图和布局(Layout)视图,在任何一个时刻仅仅只有一个视图能够处于活动状态。一、Map对象IActiveView接口在使用MapControl控件编程的方式下获得ActiveView:IMappMap;pMap=axMapControll.Map;IActiveViewpActiveView;pActiveView=pMapasIActiveView;或pActiveView=axMapControll.ActiveView;在PageLayoutControl控件中获得正在使用的地图对象的方法如下:IActiveViewpActiveView;pActiveView=axPageLayoutControll.PageLayoutasIActiveView;或pActiveView=axPageLayoutControll.ActiveView;pMap=pActiveView.FocusMap;一、Map对象IActiveView接口一、Map对象IActiveView接口Extent属性返回Map对象当前视图的范围,它是一个Envelope对象,即所谓的包络线对象。FuIlExtent属性则可以返回视图的全图范围,因此要显小整幅地图的代码为://将当前地图的范围设置为全幅范围pActiveView.Extent=pActiveView.FuIlExtent;pActiveView.Refresh();ScreenDisplay属性指向一个ScreenDisplay对象。每一个视图对象都有一个ScreenDisplay对象用于控制视图的图形绘制工作,使用这个属性会得到一个与当前正在使用的视图相关的ScreenDisplay对象。例如要在数据视图上绘制一条线必须先得到一个当前地图对象的IActiveView接口,通过IActiveView.ScreenDisplay获得地图的ScreenDisplay对象的指针。ScreenDisplay对象将在后而的章节中详细叙述。一、Map对象IGraphicsContainer接口Map对象可以显示图形元素(GraphicsElement),它使用IGraphicsContainer接口来管理这些元素对象(包括图形元素和框架元素)。IGraphicsContainer返回的是Map对象中处于活动状态的图形图层(graphicslayer)的指针。一、Map对象IGraphicsContainer接口使用这个接口的方法往Map中添加元素,实际上是往其中的一个图形图层上添加元素对象的过程,如下面代码所示。IGraphicsContainerpGraphicsContainer;pGraphicsContainer=pMapasIGraphicsContainer通过AddElement方法用于将一个元素放入Map对象中,下而是一个添加元素的例子//定义个line类刑的ElementILineElementpLineEle;pLineEle=newLineElementClass();//设段这个Element的符、J对象pLineEle.Symbol=pSymbol;ElementpEle;pEle=pLineEleasElement;//设置元素的集合体对象属性pEle.Geometry=pGeo;//将元素添加到Map对象pGraphicsContainer.AddElement(pEle,0);pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,nu1l,null)二、Map对象IGraphicsContainer接口IGraphicsContainer.DeleteElement方法用于删除Map对象中的一个给定的元素。如果在Map中改变了一个元素的形状或者符号对象,用户希望能够即时更新后在地图上表现出来,这个更新的方法也非常简单,使用UpdateElement即可。二、Map对象IGraphicsContainer接口IGraphicsContainer.LocateElements方法是使用一个点来选择元素,它击要传入一个点对象和一个容差值,Map对象会将所有处于点容差周围的元素选择到。下面的例子中,代码在MapControl的MouseDown事件中:PointpPt;pPt=newPointClass();//获得鼠标点击处的点对象pPt.PutCoords(e.mapX,e.mapY);IEnumElementpEnumEle;//选择元素,其中1为容忍值pEnumEle=pGraphicsContainer.LocateElements(pPt,1);ElementpElement;//获得单个元素pElement=pEnumEle.Next();另外一个可以使用的是LocateElementsByEnvelope方法,它和SelectByShape方法类同,是使用鼠标拖曳一个矩形区域,从而选择到这个区域内的所以元素。二、Layer对象ILayer接口ILayer是所有图层类都实现了的一般接口,它定义了所有图层的公共方法和属性,如Name属性可以返回图层名称,MaximumScale和MinimumScale可以用于获取和设置图层可以显示的最大和最小比例。ILayer.ShowTips属性用于指小当鼠标放在图层某个要素上的时候,是否会出现Tip(提示),而TipText确定图层提小显小的区域。下面是展示一个显示图层Tip的代码:二、Layer对象要素图层(FeatureLayer)--IFeatureLayer接口要素数据是GIS中最常使用的数据类型之一,它可以用于表示离散矢量对象的信息,而承载要素数据的要素图层(FeatureLayer)是本节研究的重点。本节会介绍要素图层的几个重要接口定义的方法和属性。IFeatureLayer接口用于管理要素图层的数据源,即要素类(Featureclass)。IFeatureLayer.DataSourceType属性返回要素图层的数据源的类型,FeatureLayer的数据源有:PersonalGeodatabaseSDEShapefileCoverageEdgeCAD二、Layer对象要素图层(FeatureLayer)--IFeatureLayer接口要素数据是GIS中最常使用的数据类型之一,它可以用于表示离散矢量对象的信息,而承载要素数据的要素图层(FeatureLayer)是本节研究的重点。本节会介绍要素图层的几个重要接口定义的方法和属性。IFeatureLayer接口用于管理要素图层的数据源,即要素类(Featureclass)。IFeatureLayer.DataSourceType属性返回要素图层的数据源的类型,FeatureLayer的数据源有:PersonalGeodatabaseSDEShapefileCoverageEdgeCAD二、Layer对象要素图层(FeatureLayer)--IFeatureLayer接口新建一个要素图层对象必须引入GeoDatabase库,然后使用下面的代码:IFeatureLayerpFeatLyr;pFeatLyr=newFeatureLayerClass();I

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功