gis二次开发地图的组成.ppt_第1页
gis二次开发地图的组成.ppt_第2页
gis二次开发地图的组成.ppt_第3页
gis二次开发地图的组成.ppt_第4页
gis二次开发地图的组成.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四讲 地图的组成,王佳 34247763,主要内容,地图(Map) 图层(Layer) 元素(Element),第一节 地图(Map),地图是GIS中的重要概念,也是GIS的应用中的成果,GIS的很多成果都是用地图来说话的,当我们打开ArcMap程序后,首先看到的是数据视图(ArcMap有两种视图,数据视图和布局视图) 我们看到的这个数据视图其实就是一个Map对象。,在ArcMap中Map是由文档对象控制的,每一个MXD的文档文件中至少包含一个Map对象,但是在一个时刻,仅仅只能有一个Map处于使用状态,在程序中这样的Map为“FocusMap”,每一个对象都用机会成为FocusMap。 IActiveView pActiveView = axMapControl1.ActiveView.FocusMap as IActiveView; 可以利用IMxDocument接口的maps属性获得可以操作文档中的所有地图对象集合。利用FocusMap属性获得焦点地图。,在ArcMap中,可以显示在Map中的数据有两大类,也就是地理数据和图形元素,空间数据是GIS分析制图的数据源,保存在地理数据库库或者Shp文件中,图形元素也是一种可以在Map上显示的对象。他们两个的共同特征是拥有一个geomtry属性。,元素,是另一种可以显示在Map上的对象,它分为两部分一类是图形元素,一类是框架元素,图形元素可以显示出来,而框架元素充当了“容器”的角色。在ArcMap中可以使用“Draw”工具在Map上直接绘制一个矩形,圆形,文本等对象。,在布局视图上也可以给地图添加指北针,图例,比例尺等图形对象,这些都是图形元素,用于地图制图输出。,Map对象深入理解: Map对象是由MxDocument对象通过MapFrame对象管理的,MapFrame对象是一种框架元素。 Map对象具有双重身份,一方面是数据的管理容器,可以引入地理数据和可视化元素,扮演了一个数据管理器的角色;另一方面又是它可以让用户看到这些数据,即扮演了数据显示器的角色。 当我们程序员把地理数据加载到Map对象时,它是数据管理者;在刷新地图、改变显示范围时,它就是一个数据显示者。 Map 双重身份!,地图对象是地图数据的容器,它由图层和图形数据组成。Map对象实现了众多的接口,我们重点研究: Imap IActiveView IGraphicsContainer,IMap接口,该接口主要用于管理Map对象中的图层对象,要素选择集和空间参考等对象,IMap接口也往往是我们一个任务的起点。使用IMap接口,我们可以获取这个Map对象中的图层的个数,可以添加图层,删除图层,还可以利用IMap实现查询的高亮显示。,IMap接口,添加Shp图层功能实现(AddLayer方法) 步骤: 1 利用OpenFileDialog 找到Shp图层 2 创建工作空间工厂 3 打开要素类 4 创建要素图层 5 关联图层和要素类 6 添加到地图控件中,openFileDialog1 = new OpenFileDialog(); openFileDialog1.Title = “打开图层文件“; openFileDialog1.Filter = “map documents(*.shp)|*.shp“; openFileDialog1.ShowDialog(); FileInfo fileInfo = new FileInfo(openFileDialog1.FileName); string pPath = openFileDialog1.FileName; string pFolder = System.IO.Path.GetDirectoryName(pPath); string pFileName = System.IO.Path.GetFileName(pPath); IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory(); IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(pFolder, 0); IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; IFeatureClass pFC = pFeatureWorkspace.OpenFeatureClass(pFileName); IFeatureLayer pFLayer =new FeatureLayer(); pFLayer.FeatureClass = pFC; pFLayer.Name = pFC.AliasName; ILayer pLayer = pFLayer as ILayer; IMap pMap = axMapControl1.Map; pMap.AddLayer(pLayer); axMapControl1.ActiveView.Refresh();,Imap接口,删除Shp图层功能实现(DeleteLayer方法) 步骤: 1 获得当前地图控件中的地图 2 在地图中获得最上面的一个数据层 3 删除数据层,IMap pMap = axMapControl1.Map; ILayer pLayer = pMap.get_Layer(0); pMap.DeleteLayer(pLayer);,Imap接口,AddLayers方法,不同于AddLayer方法一次添加一个对象到Map中, AddLayers可以一次加入一个或多个图层,当然多个图层对象要放到EnumLayer对象中才能引入, EnumLayer对象是一个图层枚举对象,可以保存多个图层的指针。 ClearLayers方法,不同于DeleteLayer方法一次删除一个图层, ClearLayers可以一次清除Map对象中的所有图层; LayerCount 属性,指明这个Map对象中一共有多少个图层对象,Imap接口,在添加地图的过程中,第一个加入Map对象图层是0号,第二个图层是1号,依次类推,0号是放在图层对话框中最上面,但是在地图中实际是放在最下面。如果在一个Map中放入两个polygon类型的图层,会发现第一次加入的图层被后一次加入的图层所掩盖。(ArcMap为例) 这样层概念是GIS数据组织的一种有效形式。,IMap接口,在ArcMap中,使用“Select Features”工具在地图上拖拽以后,被选中的要素将会高亮显示,即使这些要素放在不同的图层上。这个工具没有什么限制,不管是点、线或者多边形,它都可以同时选,IMap接口,被高亮显示的要素称为“FeatureSelection”(要素选择集),程序有多种方式可以用于选择要素,比如SelectByShape方法就是其中之一,IMap pMap = axMapControl1.Map; pActiveView = pMap as IActiveView; objEnvelope = axMapControl1.TrackRectangle(); ISelectionEnvironment pSelectionEnvironment = new SelectionEnvironment(); pMap.SelectByShape(objEnvelope,pSelectionEnvironment,false);,SelectByShape方法实现了ArcMap中“Select Features”命令的角色,它选择Map里面所有处于拖拽范围内的Featurelayer的要素,无论是哪个图层,他把选择的要素添加到Map的FeatureSelection中。,IGraphicsContainer接口,Map对象可以显示图形元素(Element),它使用IGraphicsContainer接口来管理这些元素对象(包括图形元素和框架元素)。,使用这个接口可以完成元素添加、更新和删除元素的方法 添加元素是一个往其中一个图形图层上添加元素的对象的过程,如下代码所示,IGraphicsContainer graphicsContainer; IMap map = this.axMapControl1.Map; ILineElement lineElement = new LineElementClass(); IElement element; IPolyline polyline = new PolylineClass(); IPoint point = new PointClass(); point.PutCoords(1,5); polyline.FromPoint = point; point.PutCoords(80,5); polyline.ToPoint = point; IElement element = lineElement as IElement;接口查询! 其实没有必要用lineElement,实际上也是继承 element.Geometry = polyline as IGeometry; graphicsContainer = map as IGraphicsContainer; graphicsContainer.AddElement(element, 0); this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);(添加元素后一定要刷新,不然无法显示),IGraphicsContainer接口,更新元素:用户改变了是Map中一个元素的形状或者符号,用户一定希望它能够及时更新后在地图上显示出来,用到UpdateElement,IGraphicsContainer graphicsContainer; IPolyline polyline = new PolylineClass(); IPoint point = new PointClass(); point.PutCoords(1, 5); polyline.FromPoint = point; point.PutCoords(80,20); polyline.ToPoint = point; IElement el; graphicsContainer = this.axMapControl1.Map as IGraphicsContainer; graphicsContainer.Reset(); el = graphicsContainer.Next(); if (el != null) el.Geometry = polyline; graphicsContainer.UpdateElement(el); this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);,IGraphicsContainer接口,删除元素:DeleteElement用于删除Map对象中的一个给定元素,IGraphicsContainer graphicsContainer; IElement el; graphicsContainer = this.axMapControl1.Map as IGraphicsContainer; graphicsContainer.Reset(); el = graphicsContainer.Next(); while (el != null) graphicsContainer.DeleteElement(el); el = graphicsContainer.Next(); this.axMapControl1.ActiveView.Refresh ();,IGraphicsContainer接口,选择元素:Map对象提供了SelectByShape方法用于选择要素,当然也提供了图形元素选择的方法,而且元素的选择更为简单,因为元素不保存到MXD文件前,都是存储到缓存,只存在内存中的,有两种方法可以选择元素 一是LocateElements方法,该方法是使用一个点来选择元素,需要传入一个点对象和容差值,Map对象会将所用处于点容差范围内的元素选择到。 二是LocateElementsByEnvelope方法,它和SelectByShape方法类似,使用鼠标在图上拖拽出一个矩形,从而选择这个区域内的所有元素。 当然元素既然可以选择,也就有相应的选择集,但是使用很少。,IActiveView接口,前面的两个接口都是管理图形的 而IActiveView接口定义了Map对象的另一个功能-数据显示功能。使用该接口可以改变视图的范围,刷新视图。 在ArcMap中,有两个对象实现了这个接口,PageLayout和Map。这两个对象分别代表了ArcMap中两种不同的视图,数据视图和版式视图,在任何一个时刻仅仅只能有一个视图处于活跃状态。 如果ArcMap处于版式视图状态,则ActiveView返回一个IActiveView对象指向PageLayout对象的,反之,处于视图状态,则指向Map对象。,IActiveView接口,IActiveView接口定义了Map对象的数据显示功能。使用该接口可以改变视图的范围,刷新视图。 IActiveView的PartialRefresh(esriViewGeography, pLayer, null)用于刷新指定图层: IActiveView的PartialRefresh(esriViewGeography, null, null) 用于刷新刷新所有图层: IActiveView的PartialRefresh(esriViewGeoSelection, null, null) 用于刷新所选择的对象: IActiveView的PartialRefresh(esriViewGraphics, null, null) 用于刷新图形元素: IActiveView的PartialRefresh(esriViewGraphics, pElement, null) 用于刷新指定图形元素 IActiveView的PartialRefresh(esriViewGraphics, null, null) 用于刷新所有图形元素 IActiveView的PartialRefresh(esriViewGraphicSelection, null, null)用于刷新所选择的图元,Extent属性返回Map对象的当前视图的范围,是一个Envolope对象 FullExtent属性可以返回视图的全图范围,IGraphicsContainer接口,选择元素:Map对象提供了SelectByShape方法用于选择要素,当然也提供了图形元素选择的方法,而且元素的选择更为简单,因为元素不保存到MXD文件前,都是存储到缓存,只存在内存中的,有两种方法可以选择元素 一是LocateElements方法,该方法是使用一个点来选择元素,需要传入一个点对象和容差值,Map对象会将所用处于点容差范围内的元素选择到。 二是LocateElementsByEnvelope方法,它和SelectByShape方法类似,使用鼠标在图上拖拽出一个矩形,从而选择这个区域内的所有元素。 当然元素既然可以选择,也就有相应的选择集,但是使用很少。,第二节 图层(Layer),Map对象可以装载地理数据,这些数据是以图层的形式加载到地图对象上的,图层对象Layer作为一个数据的“中介”存在,它本身没有转载地理数据,而仅仅是获得了数据的引用,用于管理数据源的连接。地理数据始终保存在Geodatabase或者地理数据文件中。,ILayer接口,所有图层类都实现这一接口,它定义了所有图层的公共方法和属性,如 Name属性可以返回图层名称,MaximunScale和MinimunScale两个可写属性,用于显示和设置图层可以出现的最大尺寸和最小尺寸。 Showtips属性用于指示当鼠标放在图层某个要素上的时候,是否会出现提示(Tips), TipText确定图层可提示显示的区域。SpatialReference属性用于设置图层的空间参考,这个对象是从Map对象中传入,对于地理数据及其重要,IFeatureLayer接口,IFeatureLayer接口主要用于设置要素图层的数据源(FeatureClass),IFeatureLayer的DataSourceType获取FeatureLayer对象的数据源类型。此外通过IFeatureLayer的Search方法可以查询要素图层上符号某一条件的要素集。,IGeoFeatureLayer接口继承了ILayer和IFeatureLayer两个接口,用于控制要素图层的符号化和标注等。 IGeoDataset接口仅有两个属性,它们用于管理地理要素集。Extent可以返回当前数据集的范围,是一个IEnvelope类型的对象;SpatialReference属性则可以让用户获得这个数据集的空间参考。 IFeatureSelection接口提供管理一个图层中的要素的选择集的方法和属性。,第三节 元素(Element),在Map对象和PageLayout对象显示的数据除了地理数据之外,另一种即为元素数据。,图形元素(GraphicElement)包LineElement, MarkerElement, TextElement,GroupElement,FillshapElement,PictureElement,MultiPatchElement等。它们都是作为图形的形式而存在,在地图视图或PageLayout视图上时可见的。框架元素(Frame Element)包括 MapFrameElement, MapSurroundElement等它们是作为不可见的容器而存在的。 Map对象或者PageLayout对象可以通过IGraphicsContainer接口来管理这些元素,使用IGraphicsContainer接口可以添加,删除和更新位于Map或PageLayout上的元素。使用GroupElement对象还可以将多个元素编组为单个实体来给用户使用。,IElement是所有图形元素(GraphicElement)和框架元素(Frame Element)都实现的接口,通过IElement接口可以确定Element对象的Geometry属性,同时IElment接口也提供了用于查找和绘制元素的方法。Element是个抽象类,在开发中必须明确指定使用的Element的类型。另外IElement和ILineElement, ITextElement等并不是父子关系,后者没有Geometry属性。,要将图形元素显示到视图中的步骤: 1 产生一个新的元素对象 2 确定元素显示时使用的Symbol(符号)和Geometry(几何图形) 3 使用IGraphicsContainer 的AddElement方法添加到视图中 4 刷新视图,让添加元素显示出来,如何添加一个元素到视图中,要将图形元素显示到视图中的步骤: 1 产生一个新的元素对象 2 确定元素显示时使用的Symbol(符号)和Geometry(几何图形) 3 使用IGraphicsContainer 的AddElement方法添加到视图中 4 刷新视图,让添加元素显示出来,如何添加一个元素到视图中,要将图形元素显示到视图中的步骤: 1 产生一个新的元素对象 2 确定元素显示时使用的Symbol(符号)和Geometry(几何图形) 3 使用IGraphicsContainer 的Ad

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论