
第三章地图控件.ppt
23页主要内容一、一、MapMap对象对象二、二、LayerLayer对象对象 颓络裙碾曙懒氧鸟免篷卞郧篷饼碰傻竭凿她删帕河肾蔽敖蚜负烃磨搁敢硅第三章地图控件第三章地图控件一、 Map对象对象地图的组成地图的组成 打开ArcMap程序后,用户首先看到的是数据视图 (data view) 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)属性可以根据地图中图层的索引值得到具体的图层对象,如: Layer player; player=pMap.get_Layer(2);报深恳酒蹬听堰腹诌茎擂挑倚葡篙拴散信沟雕慷战酞愈疚校议颇炬煮竹废第三章地图控件第三章地图控件一、 Map对象对象IMap接口--图层管理接口--图层管理 如图5-2所示,图中是MapControl控件的属性对话框中的图层列表,其中可以看到3号图层(states)放在列表框的最下面: 在添加地图的过程中,第一个加入Map对象的图层是0号,第二个图层就是1号,0号图层放在图层对话框中最上面,但是在地图中实际放在最下面。
如果在一个Map中放入两个面类型的图层,会发现第一次加入的图层会被后一次加入的图层所掩盖这种层概念是数据组织的一种有效形式疼筋扬拌难食倘惰邵靛艳跪率毕构右彼仟桅囱娄牧趁戍拼毫烫圣课酒幸墓第三章地图控件第三章地图控件一、 Map对象对象IMap接口--选择对象接口--选择对象 在ArcMap使用“Select Features”工具在地图上拖曳后,被选择的要素将会高亮显示,即使这些要素放在不同图层上的这个工具没有什么限制,不管是点、线还是多边形,都可以同时选择到这些被高亮显示的要素称为“FeatureSelection”(要素选择集),程序有多种方式可以用于选择要素,如SelectByShape方法就是其中之 SelectByShape方法实现了ArcMap软件“select Features”功能,选择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: IMap pMap; pMap=axMapControll.Map; IActiveView pActiveView; pActiveView=pMap as IActiveView; 或pActiveView=axMapControll .ActiveView;Ø 在PageLayoutControl控件中获得正在使用的地图对象的方法如下: IActiveView pActiveView; pActiveView=axPageLayoutControll.PageLayout as IActiveView; 或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对象可以显示图形元素(Graphics Element),它使用IGraphicsContainer接口来管理这些元素对象(包括图形元素和框架元素)。
IGraphicsContainer返回的是Map对象中处于活动状态的图形图层(graphics layer)的指针猪罢傅溶纂展孺匝拧耶萄落污蹈夸租饺栖询商河肤奋寺洪线形甘郊腺趁购第三章地图控件第三章地图控件一、 Map对象对象IGraphicsContainer接口接口 使用这个接口的方法往Map中添加元素,实际上是往其中的一个图形图层上添加元素对象的过程,如下面代码所示IGraphicsContainer pGraphicsContainer;pGraphicsContainer=pMap as IGraphicsContainer 通过AddElement方法用于将一个元素放入Map对象中,下而是一个添加元素的例子//定义个line类刑的ElementILineElement pLineEle;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对象对象IGraphicsContainer接口接口 IGraphicsContainer.DeleteElement方法用于删除Map对象中的一个给定的元素。
如果在Map中改变了一个元素的形状或者符号对象,用户希望能够即时更新后在地图上表现出来,这个更新的方法也非常简单,使用UpdateElement即可 包忧乓了洽囊耙覆坝厢卡胚窍拓漠包奎枯点阜勾搪错腻屿笔纠争恋啸橡质第三章地图控件第三章地图控件二、 Map对象对象IGraphicsContainer接口接口 IGraphicsContainer.LocateElements方法是使用一个点来选择元素,它击要传入一个点对象和一个容差值,Map对象会将所有处于点容差周围的元素选择到下面的例子中,代码在MapControl的MouseDown事件中: 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方法类同,是使用鼠标拖曳一个矩形区域,从而选择到这个区域内的所以元素。
霸单底苯加掳景崎注题粗去笆各影僚夯局侍墙武错谊呛圣碴锤绞摘扁粳蜡第三章地图控件第三章地图控件二、 Layer对象对象ILayer接口接口 ILayer是所有图层类都实现了的一般接口,它定义了所有图层的公共方法和属性,如Name属性可以返回图层名称,MaximumScale和 MinimumScale可以用于获取和设置图层可以显示的最大和最小比例 ILayer.ShowTips属性用于指小当鼠标放在图层某个要素上的时候,是否会出现Tip(提示),而TipText确定图层提小显小的区域下面是展示一个显示图层Tip的代码: 渊饼震镍吴挎茫牢拧家翘潭然棺趁羊耍录丰痪祭差狸辨铱腾靛剿卷巨蛆仪第三章地图控件第三章地图控件二、 Layer对象对象要素图层(要素图层(FeatureLayer)-- IFeatureLayer接口 要素数据是GIS中最常使用的数据类型之一,它可以用于表示离散矢量对象的信息,而承载要素数据的要素图层(FeatureLayer)是本节研究的重点本节会介绍要素图层的几个重要接口定义的方法和属性 IFeatureLayer接口用于管理要素图层的数据源,即要素类(Featureclass)。
IFeatureLayer.DataSourceType属性返回要素图层的数据源的类型,FeatureLayer的数据源有:Ø Personal GeodatabaseØ SDEØ ShapefileØ Coverage Ø EdgeØ CAD乙餐片获烃父旷蓄剐顽识帖刷漳驾堂眠拄椭锋别盈抹蔡籽扩釜哇些卧扶脓第三章地图控件第三章地图控件二、 Layer对象对象要素图层(要素图层(FeatureLayer)-- IFeatureLayer接口 要素数据是GIS中最常使用的数据类型之一,它可以用于表示离散矢量对象的信息,而承载要素数据的要素图层(FeatureLayer)是本节研究的重点本节会介绍要素图层的几个重要接口定义的方法和属性 IFeatureLayer接口用于管理要素图层的数据源,即要素类(Featureclass) IFeatureLayer.DataSourceType属性返回要素图层的数据源的类型,FeatureLayer的数据源有:Ø Personal GeodatabaseØ SDEØ ShapefileØ Coverage Ø EdgeØ CAD厚五狰尺件添街论滞块观赌粤齿休骗碱虞祭纽络隙亏欢僧倾拈艳唐凶咽疫第三章地图控件第三章地图控件二、 Layer对象对象要素图层(要素图层(FeatureLayer)-- IFeatureLayer接口 新建一个要素图层对象必须引入GeoDatabase库,然后使用下面的代码: IFeatureLayer pFeatLyr; pFeatLyr=new FeatureLayerClass(); IFeatureLayer.FeatureClass属性返回要素图层使用的要素类。
关于要素类的内容,会在GeoDatabase一章中详细介绍 如果需要对要素图层进行查询,可以使用IFeatureLayer.Search方法,它将返回一个ICursor类型的对象如在一幅世界地图中寻找人日多于5000万的国家或者是国土而积大于100万平方公里的国家,都可以使用Search方法实现 林难遂价湛嘉养座柴稗柴纫椎挣批涪荧项狸蓬腰尾旅虚漓琵链茸正盘胰除第三章地图控件第三章地图控件二、 Layer对象对象要素图层(要素图层(FeatureLayer)-- IFeatureLayer接口 下面给出一个查找要素的方法,需要要传入过滤参数和图层: private void searchFeatures(string sqlfilter,IFeatureLayer pFeatureLayer){IFeatureLayer pFeatLyr=pFeatureLayer;//定义个过滤器对象IQueryFilter pFilter=new QueryFiIterClass();//’添加过滤参数sqlfilter, "area>100000"pFilter.WhereClause=sqlfilter;IFeatureCursor pFeatCursor=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);}在使用这个方法对一个要素图层进行查询时,符合条件的要素将逐个闪烁,然后呈橘红色显示出来。
唇清弹呛讲穴成糙腊娩赖青么尤恭智娱舶唯珊腹矢坑醚憎扁彰契迢锅话惫第三章地图控件第三章地图控件。












