第三章地图控件.ppt

上传人:本田雅阁 文档编号:2557009 上传时间:2019-04-07 格式:PPT 页数:23 大小:718.01KB
返回 下载 相关 举报
第三章地图控件.ppt_第1页
第1页 / 共23页
第三章地图控件.ppt_第2页
第2页 / 共23页
第三章地图控件.ppt_第3页
第3页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第三章地图控件.ppt》由会员分享,可在线阅读,更多相关《第三章地图控件.ppt(23页珍藏版)》请在三一文库上搜索。

1、主要内容,一、Map对象 二、Layer对象,一、 Map对象,地图的组成 打开ArcMap程序后,用户首先看到的是数据视图 (data view) 。 ArcMap的主要功能查看数据和地理分析都是在这个视图中完成的。数据视图其实是一个Map对象。,一、 Map对象,地图的组成 在ArcMap中,可以显示在Map上的图像分为两大类,即地理数据和图形 element(元素),他们的共同特征是这两者都有Geometry属性,拥有明确的几何形状。 1、地理数据包括矢量类型的要素数据、栅格数据、TIN数据等,这些数据保存在地理数据库或数据文件中,他们是用于GIS分析制图的源数据; 2、元素是另一种可以

2、显示在Map上的对象。在使用ArcMap的过程中,用户可以使用“Draw”工具栏的图形工具在Map上直接绘制一个矩形或者线等对象,在PageLayout视图中也给地图上插入指北针、图例、比例尺等图形对象,这些都是图形元素,它们被用于地图制版过程中。,一、 Map对象,地图的组成 在ArcMap中, Map对象具有双重身份,一方面是数据的管理容器,可以加载地理数据和可视化元素,扮演了一个数据管理器的角色;另一方面, 又可以让用户看到这些数据,即扮演了一个数据显示器的角色。当程序员把地理数据加载到Map对象的时候,它是数据的管理者;在刷新地图、改变显示范围的时候,它就是一个数据的显示者。,一、 M

3、ap对象,地图的组成 Map组件的主要接的有:IMap, IGraphicContainer, IActiveView等,如图所示。,一、 Map对象,IMap接口图层管理 Map接口是开始多数GIS任务的起点,主要用于管理Map对象中的Layer对象、要素选择集、标注引擎和空间参考等对象。 Map对象可以显示地理数据,而这些地理数据都是通过某个图层引入到地图对象中的,因此可以认为Map对象是一个存放Layer对象的容器,Map接口定义了大量的方法来操作它其中的图层对象。下而简要介绍几个主要的方法: AddLayer方法可以将一个图层对象加入Map对象中去 AddLayers可以一次加入一个或

4、多个图层,当然多个图层对象必须放在一个 EnumLayer对象中才能被引入,后者是一个图层枚举对象,可以保存多个图层的指 针。 CIearLayers可以清除Map中所有的图层; LayerCount则指明这个地图对象中包含了多少个图层对象。 Getlayer(index)属性可以根据地图中图层的索引值得到具体的图层对象,如: Layer player; player=pMap.get_Layer(2);,一、 Map对象,IMap接口图层管理 如图5-2所示,图中是MapControl控件的属性对话框中的图层列表,其中可以 看到3号图层(states)放在列表框的最下面:,在添加地图的过程中

5、,第一个加入Map对象的图层是0号,第二个图层就是1号,0号图层放在图层对话框中最上面,但是在地图中实际放在最下面。如果在一个Map中放入两个面类型的图层,会发现第一次加入的图层会被后一次加入的图层所掩盖。这种层概念是数据组织的一种有效形式。,一、 Map对象,IMap接口选择对象 在ArcMap使用“Select Features”工具在地图上拖曳后,被选择的要素将会高亮显示,即使这些要素放在不同图层上的。这个工具没有什么限制,不管是点、线还是多边形,都可以同时选择到。这些被高亮显示的要素称为“FeatureSelection”(要素选择集),程序有多种方式可以用于选择要素,如SelectB

6、yShape方法就是其中之。 SelectByShape方法实现了ArcMap软件“select Features”功能,选择Map所有处于拖曳范围内的要素,无论是哪个图层,把选择的要素添加到Map的Selectionset里面。,一、 Map对象,IMap接口选择对象,一、 Map对象,IMap接口选择对象 IMap.FeatureSelection属性可以返回map中被选择的要素,SelectionCount 属性可以得到Map对象的要素选择集中的要素的数目,CIearSelection方法用于清 除Map对象中的选择集。,一、 Map对象,IActiveView接口 IActiveVie

7、w接口定义了Map对象的数据显示功能。这个接口管理着ArcMap 主要的程序窗口和所有绘制图形的方法。使用这个接日的方法可以改变视图的范围, 可以得到ScreenDisplay对象的指针,可以显小或隐藏标尺和滚动条,也可以刷新 视图。 在ArcObjects中,有两个对象实现了这个接口, Map和PageLayout。这两 个对象分别代表了ArcMap中两种不同的视图:数据(Data)视图和布局(Layout)视图, 在任何一个时刻仅仅只有一个视图能够处于活动状态。,一、 Map对象,IActiveView接口 在使用MapControl控件编程的方式下获得ActiveView: IMap p

8、Map; pMap=axMapControll.Map; IActiveView pActiveView; pActiveView=pMap as IActiveView; 或pActiveView=axMapControll .ActiveView; 在PageLayoutControl控件中获得正在使用的地图对象的方法如下: IActiveView pActiveView; pActiveView=axPageLayoutControll.PageLayout as IActiveView; 或pActiveView=axPageLayoutControll.ActiveView; pMa

9、p=pActiveView.FocusMap;,一、 Map对象,IActiveView接口,一、 Map对象,IActiveView接口 Extent属性返回Map对象当前视图的范围,它是一个Envelope对象,即所谓 的包络线对象。FuIlExtent属性则可以返回视图的全图范围,因此要显小整幅地图 的代码为: /将当前地图的范围设置为全幅范围 pActiveView. Extent=pActiveView.FuIlExtent; pActiveView.Refresh(); ScreenDisplay属性指向一个ScreenDisplay对象。每一个视图对象都有一个 ScreenDis

10、play对象用于控制视图的图形绘制工作,使用这个属性会得到一个与当 前正在使用的视图相关的ScreenDisplay对象。例如要在数据视图上绘制一条线 必须先得到一个当前地图对象的IActiveView接口,通过IActiveView.ScreenDisplay获得地图的ScreenDisplay对象的指针。ScreenDisplay对象将在后而的章节中详细叙述。,一、 Map对象,IGraphicsContainer接口 Map对象可以显示图形元素(Graphics Element),它使用IGraphicsContainer 接口来管理这些元素对象(包括图形元素和框架元素)。IGraphi

11、csContainer返回的是 Map对象中处于活动状态的图形图层(graphics layer)的指针。,一、 Map对象,IGraphicsContainer接口 使用这个接口的方法往Map中添加元素,实际上是往其中的一个图形图层上添 加元素对象的过程,如下面代码所示。 IGraphicsContainer pGraphicsContainer; pGraphicsContainer=pMap as IGraphicsContainer 通过AddElement方法用于将一个元素放入Map对象中,下而是一个添加元素的例子 /定义个line类刑的Element ILineElement pL

12、ineEle; pLineEle=new LineElementClass(); /设段这个Element的符、J对象 pLineEle.Symbol=pSymbol; Element pEle; pEle=pLineEle as Element; /设置元素的集合体对象属性 pEle.Geometry=pGeo; / 将元素添加到Map对象 pGraphicsContainer.AddElement(pEle, 0); pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,nu1l, null),二、 Map对象,IGra

13、phicsContainer接口 IGraphicsContainer.DeleteElement方法用于删除Map对象中的一个给定的元 素。 如果在Map中改变了一个元素的形状或者符号对象,用户希望能够即时更新后在地图上表现出来,这个更新的方法也非常简单,使用UpdateElement即可。,二、 Map对象,IGraphicsContainer接口 IGraphicsContainer.LocateElements方法是使用一个点来选择元素,它击要传 入一个点对象和一个容差值,Map对象会将所有处于点容差周围的元素选择到。下 面的例子中,代码在MapControl的MouseDown事件中

14、: Point pPt; pPt=new PointClass(); /获得鼠标点击处的点对象 pPt.PutCoords(e.mapX, e.mapY); IEnumElement pEnumEle; /选择元素,其中1为容忍值 pEnumEle=pGraphicsContainer.LocateElements(pPt, 1); Element pElement; /获得单个元素 pElement=pEnumEle.Next(); 另外一个可以使用的是LocateElementsByEnvelope方法,它和SelectByShape方法类同,是使用鼠标拖曳一个矩形区域,从而选择到这个区域

15、内的所以元素。,二、 Layer对象,ILayer接口 ILayer是所有图层类都实现了的一般接口,它定义了所有图层的公共方法和属性,如Name属性可以返回图层名称,MaximumScale和 MinimumScale可以用于获取和设置图层可以显示的最大和最小比例。 ILayer.ShowTips属性用于指小当鼠标放在图层某个要素上的时候,是否会出现Tip(提示),而TipText确定图层提小显小的区域。下面是展示一个显示图层Tip的代码:,二、 Layer对象,要素图层(FeatureLayer) IFeatureLayer接口 要素数据是GIS中最常使用的数据类型之一,它可以用于表示离散矢

16、量对象的信息,而承载要素数据的要素图层(FeatureLayer)是本节研究的重点。本节会介绍要素图层的几个重要接口定义的方法和属性。 IFeatureLayer接口用于管理要素图层的数据源,即要素类(Featureclass)。 IFeatureLayer.DataSourceType属性返回要素图层的数据源的类型,FeatureLayer的数据源有: Personal Geodatabase SDE Shapefile Coverage Edge CAD,二、 Layer对象,要素图层(FeatureLayer) IFeatureLayer接口 要素数据是GIS中最常使用的数据类型之一,它

17、可以用于表示离散矢量对象的信息,而承载要素数据的要素图层(FeatureLayer)是本节研究的重点。本节会介绍要素图层的几个重要接口定义的方法和属性。 IFeatureLayer接口用于管理要素图层的数据源,即要素类(Featureclass)。 IFeatureLayer.DataSourceType属性返回要素图层的数据源的类型,FeatureLayer的数据源有: Personal Geodatabase SDE Shapefile Coverage Edge CAD,二、 Layer对象,要素图层(FeatureLayer) IFeatureLayer接口 新建一个要素图层对象必须引

18、入GeoDatabase库,然后使用下面的代码: IFeatureLayer pFeatLyr; pFeatLyr=new FeatureLayerClass(); IFeatureLayer.FeatureClass属性返回要素图层使用的要素类。关于要素类的内容,会在GeoDatabase一章中详细介绍。 如果需要对要素图层进行查询,可以使用IFeatureLayer.Search方法,它将返 回一个ICursor类型的对象。如在一幅世界地图中寻找人日多于5000万的国家或者 是国土而积大于100万平方公里的国家,都可以使用Search方法实现。,二、 Layer对象,要素图层(Featur

19、eLayer) IFeatureLayer接口 下面给出一个查找要素的方法,需要要传入过滤参数和图层: private void searchFeatures(string sqlfilter,IFeatureLayer pFeatureLayer) IFeatureLayer pFeatLyr=pFeatureLayer; /定义个过滤器对象 IQueryFilter pFilter=new QueryFiIterClass(); /添加过滤参数sqlfilter, “area100000“ pFilter.WhereClause=sqlfilter; IFeatureCursor pFea

20、tCursor=pFeatLyr.Search(pFilter, true); IFeature pFeat=pFeatCursor.NextFeature(); while( pFeat!=null) pFeat=pFeatCursor.NextFeature(); if (pFeat!=null) ISimpIeFiIISymbol pFillsyl; pFillsyl=new SimpIeFiIISymboIClass(); pFiIIsyI.Color=getRGB(220, 100, 50); IPolygon pPolygon; pPolygon=pFeat.Shape as IPolygon; /使用 FIashShape来使要素闪烁 axMapControll .FIashShape(pPolygon, 15, 20, pFillsyl); 在使用这个方法对一个要素图层进行查询时,符合条件的要素将逐个闪烁,然 后呈橘红色显示出来。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1