第七章 元素.ppt.Convertor.doc_第1页
第七章 元素.ppt.Convertor.doc_第2页
第七章 元素.ppt.Convertor.doc_第3页
第七章 元素.ppt.Convertor.doc_第4页
第七章 元素.ppt.Convertor.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

元素一、 图形元素(Graphics Element)模型二、 框架元素(Frame Element)模型三 、MapSurround对象模型1概述 在ArcGIS中,显示在地图上的图形分为两种: 要素(Feature):储存在数据库(或文件)中的数据; 元素(Element):以图像的形式存在工程文件(.MXD)中。2概述 Element是一个非常庞大复杂的对象集合,分为两大部分:图形元素(Graphic Element)和框架元素(Frame Element ) 。 在Map或PageLayout对象中可以通过IGraphicsContainer接口来管理这些元素,使用这个接口定义的方法可以添加、删除和更新位于Map或PageLayout上的元素。 IElement是所有图形元素和框架元素类都实现的接口,IElement :Geometry属性定义了元素的形状和位置。 Element是一个抽象类,在编程中使用其子类进行实例化。3一、Graphics Element对象模型 图形元素(GraphicElement) 实现了IGraphicsElement接口,这个接口仅定义了一个SpatialReference属性,用于设置这些图形元素的空间参考。 图形元素(GraphicElement)还实现ITransform2D接口,这个接口定义的方法和属性可以让图形元素移动、旋转和缩放。 图形元素包括MarkerElement, LineElement,FiIIShapeElement ,TextElement,DataGraphElement,PictureElement和 GroupElement等对象,它们都是作为图形的形式而存在,在视图上是可见的。4一、Graphics Element对象模型MarkerElement和LineElement MarkerElement 和 LineElement是最简单的图形元素,它们在数据视图(DataView)或者布局视图(Pagelayout view)上表现为点和线的形式。要将图形元素显示在视图上,一般的步骤是这样的: 1.产生一个新的元素对象; 2.确定元素显示时使用的Symbol(符号)和Geometry(几何形体对象); 3.使用IGraphicsContainer.AddElement把元素添加到视图中去; 4.刷新视图,让添加的元素可以显示出来。 以LineElement为例,添加它到视图需要使用两个接口:IElement和ILineElement,前者用于确定线元素的Geometry ,后者用于确定Symbol。设置Symbol和 Geometry属性时需要注意对象的类型, Symbol属性只能有线符号设置, Geometry属性只能使用Line或者Polyline进行设置。MarkerElement也是一样,使用的是Marker类型的Symbol和点作为它的Geometry。5一、Graphics Element对象模型MarkerElement和LineElementIMap pMap;IActiveView pActiveView;/获得控件的Map对象pMap=axMapControll .Map;pActiveView=pMap as IActiveView;/创建Point对象IPoint pPt;pPt=new PointClass();pPt.PutCoords(e.mapX, e.mapY);/设置MarkerElement的Symbol属性ISimpleMarkerSymbol pMarkerSymbol;pMarkerSymbol=new SimpIeMarkerSymboIClass();/设置符号颜色pMarkerSymboLColor=getRGB(11,200, 145);/设置符号大小pMarkerSymboI.Size=2;/设置符号样式pMarkerSymboLStyle=esriSimpIeMarkerStyle.esriSMSDiamond;6一、Graphics Element对象模型MarkerElement和LineElement/创建MarkerElement对象IMarkerElement pMarkerElement;pMarkerElement=new MarkerElementClass();/获取IElement对象,用于设置元素的Geometry属性IElement pElement;pElement=pMarkerElement as IElement;pElement.Geometry=pPt;/设置元素的Symbol属性pMarkerElement.Symbol=pMarkerSymbol;IGraphicsContainer pGraphicsContainer;pGraphicsContainer=pMap as IGraphicsContainer;/将元素添加到Map对象中pGraphicsContainer.AddElement(pMarkerElement as IElement, 0);/刷新地图pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null)7一、Graphics Element对象模型FiIIShapeElement对象 FiIIshapeElement是一个抽象类,它的子类有CircIeElement, EllipseElement,PolygonElement和 RectangleElement。这些对象的共同特点是它们的Geometry属性都是二维的封闭图形,分别表现为圆形元素、椭圆形元素、多边形元素和矩形元素。 IFiIIShapeElement是所有FiIIShapeElement类都实现的接口,它定义了用于显示图形元素的Symbol属性,这个Symbol属性必须设置为IFillsymbol对象。 创建FiIIShapeElement对象和把FiIIShapeElement对象添加到MapControl或PageLayout的方法与点、线元素基本相同。8一、Graphics Element对象模型FiIIShapeElement对象 IMap pMap; IActiveView pActiveView; /获得控件的Map对象 pMap=axMapControll .Map; pActiveView=pMap as IActiveView; IPolygon pPolygon=axMapControll.TrackPolygon() as IPolygon; /创建SimpIeFillSymbol对象 ISimpIeFiIISymbol pSimpIeFillsym; pSimpIeFillsym=new SimpIeFiIISymboIClass(); pSimpIeFiIIsym.Style=esriSimpIeFiIIStyle.esriSFSDiagonalCross; pSimpIeFiIIsym.Color=getRGB(102, 200, 103);9一、Graphics Element对象模型FiIIShapeElement对象 /创建PolygonElement对象 IFiIIShapeElement pPolygonEle; pPolygonEle=new PolygonElementClass(); pPolygonEle.Symbol=pSimpIeFillsym; IElement pEle; pEle=pPolygonEle as (Element; pEle.Geometry=pPolygon; /将元素添加到Map对象中 IGraphicsContainer pGraphicsContainer; pGraphicsContainer=pMap as IGraphicsContainer; pGraphicsContainer.AddElement(pEle, 0); /刷新地图pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null)10一、Graphics Element对象模型PictureElement对象 在ArcMap制作地图的时,用户可以向PageLayout中插入位图图片,通过这种方式可以制作更加漂亮的地图以输出使用。这种图片其实也是一种图形元素,即PictureElement对象。PictureElement是一个抽象类,它的两个了类BmpPictureElement和EmfPictureElement,它们分别用于往布局视图中插入BMP文件和EMF文件。 IPictureElement是这两个子类都实现的接口,使用它可以用于操作一个图片元素。 IPictureElement.Filter属性是供OpenFileDialog使用的过滤器; IPictureElement.MaintainAspectRatio属性可以决定调整图片尺寸时是否保持其长宽比例; IPictureElement.PictureDescription可以添加图片的附加描述信息; IPictureElement.SavePicturelnDocument属性则确定这张图片是否会被保存到MXD文件上。 IPictureElement.ImportPictureFromFile用于取得一张图片文件。11一、Graphics Element对象模型PlctureElement对象IPageLayout pPageLayout;pPageLayout=axPageLayoutControll .PageLayout;IGraphicsContainer pGraphicsContainer;pGraphicsContainer=pPageLayout as IGraphicsContainer;IActiveView pActIveView=pPageLayout as IActiveView;/新建BmpPictureElement对象IPictureElement pBmpPicEle=new BmpPictureElementClass();/设置使用的位图文件pBmpPicEle.ImportPictureFromFile( C:My Documentssim.bmp);/图片在缩放时保持长宽比例pBmpPicEle.MaintainAspectRatio=true;IEnvelope pEnv=axPageLayoutControll.TrackRectangle();IElement pEle=pBmpPicEle as IElement;/设置Geometry属性pEle.Geometry=pEnv;pGraphicsContainer.AddElement(pEle, 0);pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null)12一、Graphics Element对象模型PlctureElement对象13一、Graphics Element对象模型TextElement对象 地图为了显示图形的附加信息,一般都是需要采用文字标注来完成。 地图标注有两种形式:一种是保存在地理数据库中以标注类的形式存在,另一种是使用文字元素。 TextElement对象实现了ITextElement接口,这个接口定义了设置文字元素特征的属性,如Text(文字)和Symbol(文字的修饰符号)。需要注意的是TextElement的Geometry是一个点,即Point对象。14一、Graphics Element对象模型TextElement对象private void TextElementLabel(IMap pMap, IFeatureClass pFeatureClass, string strName) /获取要素查询后的要素有表对象 IFeatureCursor pFeatCursor; pFeatCursor = pFeatureClass.Search(null,true);/全部要素IFeature pFeature;pFeature = pFeatCursor.NextFeature(); while (pFeature != null) IFields pFields = pFeature.Fields;int i; /找出标注字段的索引号 i = pFields.FindField(strName); /得到要素的Envelope IEnvelope pEnve = pFeature.Extent; IPoint pPoint = new PointClass(); pPoint.PutCoords(pEnve.XMin + pEnve.Width / 2, pEnve.YMin + pEnve.Height / 2); 15一、Graphics Element对象模型TextElement对象 /新建字体对象 stdole.IFontDisp pFont; pFont = new stdole.StdFontClass() as stdole.IFontDisp; pFont.Name = arial; /新建颜色对象IRgbColor pRGB = new RgbColorClass(); pRGB.Red = 110; pRGB.Green = 60; pRGB.Blue = 200; /创建文本符号 ITextSymbol pTextSymbol = new TextSymbolClass(); /设置文本符号的大小 pTextSymbol.Size = 3; pTextSymbol.Font = pFont; pTextSymbol.Color = pRGB; /创建文本对象 ITextElement pTextEle = new TextElementClass(); pTextEle.Text = pFeature.get_Value(i).ToString(); pTextEle.Symbol = pTextSymbol; 16一、Graphics Element对象模型TextElement对象pTextEle.Symbol = pTextSymbol; IElement pEle = pTextEle as IElement; pEle.Geometry = pPoint; IActiveView pActiveView = pMap as IActiveView; IGraphicsContainer pGraphicsContainer = pMap as IGraphicsContainer; /添加元素 pGraphicsContainer.AddElement(pEle, 0); pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null,null); pFeature = pFeatCursor.NextFeature(); 17一、Graphics Element对象模型GroupElement对象 GroupElement对象可以将多个元素编为一组当一个实体来使用。如果用户需要对多个要素进行相同的操作,如同时移动多个要素的时候,可以将它们编为一个组。GroupElement类默认实现IGroupElement接口,它定义了操作GroupElement的方法和属性。 IGroupElement.AddElement方法可以将一个元素添加到GroupElement对象;而IGroupElement.CIearElements可以清除GroupElement中所有的元素;DeleteElement方法可以根据GroupElement中的某个元素的索引值删除这个元素。18一、Graphics Element对象模型GroupElement对象private void GroupElement(IGraphicsContainer pGraphicsContainer) /创建GroupElement对象 IGroupElement pGroupEle; pGroupEle=new GroupElementClass(); IElement pEle; pGraphicsContainer.Reset(); /获得pGraphicsContainer中的第一个元素 pEle=pGraphicsContainer.Next(); /遍历元素 while (pEle!=null) /添加到pGroupEle对象中 pGroupEle.AddElement(pEle); pEle=pGraphicsContainer.Next(); /最后使用lElementCount来测试是否成功 MessageBox.Show(pGroupEle.EIementCount.ToString();19二、框架元素模型 框架元素(Frame Element)是另一大类的元素对象。框架元素包含两个对象:MapFrame(地图框架)和MapSurroundFrame(地图修饰框架)。 所有的框架元素类都实现了IFrameElement接口,这个接口定义了操作框架元素最一般的属性和方法,如BackGround、Border属性可以用于设置框架元素的背景和边框。20二、框架元素模型 从图可以看到,PageLayout可以直接得到它管理的MapFrame和MapSurroundFrame对象。MapFrame对象是Map的容器,它用于管理Map对象;而MapSurroundFrame对象则用于管理MapSurround对象,MapSurround就是为了修饰地图而使用的比例尺、比例文本和指北针等对象。 每个MapSurroundFrame都是与一个MapFrame相联系的。如果一个MapFrame被删除了那么它其中所有的MapSurroundFrame对象也将被删除。21二、框架元素模型MapFrame MapFrame对象是由PageLayout对象来控制的,它用于管理Map对象。MapFrame对象支持IMapFrame接口,使用IMapFrame定义的属性和方法可以控制其中的Map对象。 IMapFrame.Map属性可以获得这个地图框架内的地图对象,它是一个只读属性;MapBounds属性则可以返回地图对象的范围,它一个Envelope对象;MapFrame使用MapScale属性来确定地图显示的比例。 IMapFrame.CreateSurroundFrame方法用于返回一个MapSurroundFrame对象。 MapFrame对象还实现了IMapGrids接口,它可以用于管理地图框架中的MapGrid(地图格网)。AddMapGrid用于添加MapGrid对象,CIearMapGrids可以清除所有的MapGrid对象,DeleteMapGrid使用索引值删除地图框架对象中的某个MapGrid。22二、框架元素模型 MapSurroundFrame MapSurroundFrame是用于表示地图整饰元素,包括指北针、比例尺和图例等对象,是一种“智能”的,能够自动与某个地图对象关联,随着地图视图的变化而变化的对象。 MapSurroundFrame对象与MapFrame是相关联的,当地图框架旋转的时候,指北针对象的方向也会跟着变化。IMapsurroundFrame接口是MapsurroundFrame对象的默认接口,IMapSurroundFrame.MapFrame属性可以获得与自身关联的MapFrame对象,IMapSurroundFrame.MapSurround属性则可以得到它持有的MapSurround对象。23二、框架元素模型MapGrid 一幅成品地图中总是会看到地图格网。在小比例尺地图中,经纬网可以让指明某个区域在地球上的确切位置;在大比例地图见,也可以使用方见网将一块区域进行规律划分,它们是修饰一幅地图不可缺少的部分。 ArcObjects中也提供了用于辅助显示地图的地图格网MapGrids对象,它出现了地图边缘上,用于显示经纬度或者方格网。在本质上它就是MapFrame对象,必须出现在PageLayout视图而不是Map视图。一幅地理网格主要由GridLine(格网线)、GridLabel(格网标注)和 GridBorder(格网边框)三部分组成。24二、框架元素模型MapGrid MapGrid对象是布局视图中的一种参考线或点,它可以帮助用户快速地确定地图中要素的位置。MapGrid对象由MapGrids,一个MapGrids中可以存在多个MapGrid对象。 在布局视图中获得一个MapGrid的指针非常容易,使用IGraphicsContainer.FindFrame可以得到PageLayout对象的MapFrame对象。 private IMapGrid GetMapGrid() IActiveView pActiveView=(IActiveView) axPageLayoutControll.PageLayout IMap pMap=pActiveView.FocusMap; IGraphicsContainer pGraphicsContainer = axPageLayoutControll .PageLayout as IGraphicsContainer; IMapFrame pMapFrame=pGraphicsContainer.FindFrame(pMap) as MapFrame; IMapGrids pMapGrids; pMapGrids=pMapFrame as IMapGrids; IMapGrid pMapGrid; pMapGrid=pMapGrids.get_MapGrid(0); return pMapGrid; 25二、框架元素模型MapGridBorder 地图格网是有边框,这些边框对象类型很多,它们都实现了IMapGridBorder接口,有两种类型:SimpIeMapGridBorder和 CalibratedMapGridBorder。 SimpIeMapGridBorder对象只是使用简单的直线来作为地图的边框,因而在ISimpIeMapGridBorder接口中必须设置的是LineSymbol属性,它用于确定边框线的样式、宽度和颜色。private ISimpIeMapGridBorder CreateSimpIeMapGridBorder()/新建个简单边框对象ISimpleMapGridBorder pSimpIeMapGridBorder;pSimpIeMapGridBorder=new SimpIeMapGridBorderClass();/设置简单边框的属性ISimpleLineSymbol pLineSymbol;pLineSymbol=new SimpIeLineSymboIClass();pLineSymbol.Style=esriSimpIeLineStyle.esriSLSSoIid;pLineSymbol.Color=getRGB(255, 0, 0);pLineSymbol.Width=10;pSimpIeMapGridBorder.LineSymbol=pLineSymbol;return pSimpIeMapGridBorder;26二、框架元素模型MapGridBorderCalibratedMapGridBorder是表示渐变边框,实现ICalibratedMapGridBorder接口,它定义了边框的前景色、后景色、宽度,线段的间隔长度等属性。 ICalibratedMapGridBorder pCalibratedBorder; pCalibratedBorder=new CalibratedMapGridBorderClass(); /设置复杂边框的属性 pCalibratedBorder.BackgroundColor=getRGB(255, 255, 255); pCalibratedBorder.ForegroundColor=getRGB(100, 100, 60); pCalibratedBorder.BorderWidth=10; pCalibratedBorder.lnterval=60; pCalibratedBorder.Alternating=true; /将边框对象设置给MapGrid的border属性 pMapGrid.Border=pCalibratedBorder;27三、MapSurround对象模型 MapSurround是与一个地图对象关联的一种用于修饰地图的辅助图形元素对象。它们的形状或数值会随着地图属性的变化而自动改变。如地图视图范围改变后,ScaleBar(比例尺)对象将会自动调整比例,ScaleBarText(比例尺文本)也会相应改变它的比例值,即 MapSurround类型对象会监听Map对象的行为而做出相应反应。 在ArcObjects中Mapsurround是由MapSurroundFrame对象管理的。由于MapSurround与一个Map对象有直接关联,因此可以使用IMap.Mapsurrounds来得到它,通过IMap.MapSurroundCount来遍历一个给定的Map对象所有可以使用的MapSurround对象;也可以通过MapSurroundFrame . MapSurround 属性获得。 所有的MapSurround对象都支持IMapSurround接口,它定义了MapSurround对象一般的属性和方法,如使用Name属性可以得到某个MapSurround的名称。28三、MapSurround对象模型图例对象 图例(Legend)是MapSurround对象群中最复杂的一个,这是因为它涉及到太多其它的对象以生成一个美观合理的图例。图例是与一个Map对象中图层的着色操作(Renderer)相关的对象,着色对象可以在地图上产生专题图。每个着色对象都有一个或者多个LegendGroup(图例组),而这个数目则取决于地图有多少种着色方案。29三、MapSurround对象模型图例对象 从TOC中可以看出Map中有两个要素图层一ushigh和states。ushigh图层使用了一种符号来设置它的要素,因此这个图层上所有的要素的外观都是一样的;states使用了唯一值着色方法,基于POP1999属性使用的是分级作色法。 由于两个图层都使用了符号化,因而与Map对象相关的图例项有两个,即图中的legenditem0和legenditem1,每个legenditem都和一个图层相关联。states图层使用的是POP1999属性来进行符号化着色,legend group内拥有5个legend class对象。30三、MapSurround对象模型图例对象 Legend类的主要接口是ILegend,使用它可以修改legend的属性和获得它的组成对象,如ILegend.ltem可以用于获得一个地图图例内的某个图例项( Legendltem )。 Legendltem对象有多种类型,它本身是一个抽象类,拥有 HorizontaIBarLegendltem、HorizontalLegendltem, NestedLegendltem和VerticalLegendltem四个子类,Legendltem对象实现ILegendltem接口,这个接口定义了Legendltem的一般属性,如是否显示标题、是否显示标签,是否出现图层名以及Legendltem的宽度和高度等。 LegendCIassFormat对象用于控制单个Legendltem的外观,Patch是一个LegendClass中的帮助描述要素着色的图片,如上图中的绿色方框、线和橘色的圆,都是一种Patch,这个类有两个子类:AreaPatch和LinePatch。 ArcObjects使用LegendCIassFormat和LegendFormat对象来管理一个图例项内的Patch对象。31三、MapSurround对象模型图例对象private void CreatePatch(IGeometry pGeo) IPageLayout pPageLayout=axPageLayoutControll.PageLayout; IGraphicsContainer pGraphicsContainer=pPageLayout as IGraphicsContainer; IActiveView pActiveView=pPageLayout as IActiveView; IMap pMap=pActiveView.FocusMap; /从pMap对象获得相关联MapSurround对象(legend) ILegend pLegend=pMap.get_MapSurround(0) as ILegend; /获得图例的项 ILegendltem pLegendltem=pLege

温馨提示

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

评论

0/150

提交评论