地图及相关对象.ppt
《地图及相关对象.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的单位发生变化后
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 地图 相关 对象
链接地址:https://www.31ppt.com/p-6261532.html