版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、GIS开发与应用 基于ArcEngine方法花利忠2011-11-15第五章 地图整饰与输出5.1 MapControl 地图控件Map对象(CoClass,组建类) (ESRI.ArcGIS.Carto)5.2 PageLayoutControl 页面布局控件PageLayout对象(CoClass,组建类) (ESRI.ArcGIS.Carto)5.3 Map与PageLayout对象共同点5.4 Element对象(ESRI.ArcGIS.Carto)图形元素框架元素MapFrame对象MapSurroundFrame对象5.5 MapSurround对象(ESRI.ArcGIS.Car
2、to)5.6 地图输出5.1 MapControl地图控件MapControl控件对应ArcMap中的数据视图(Data View),它封装了Map对象(CoClass,组建类),并提供了额外的属性、方法、事件用于: 管理控件的外观、显示属性和地图属性;添加并管理控件中的数据层;装载Map地图文档(mxd) ;动态添加和显示几何对象等;Map组件类主要接口IMap:IMap pMap = axMapControl1.Map;5.2 PageLayoutControl页面布局(版式)控件PageLayoutControl对应ArcMap中的布局视图(Layout View),它封装了PageLa
3、yout对象,并提供了额外的属性、方法、事件用于:加载地图文档(mxd) ;绘制地图元素;创建布局视图(图例、指北针和比例尺等)地图的打印输出;PageLayout组件类主要实现了IPageLayout 接口,它定义了用于修改页面布局的方法和属性。 IPageLayout pPageLayout = axPageLayoutControl1. PageLayout;IPageLayout :ZoomToWhole 方法:让PageLayout 以最大尺寸显示;IPageLayout : ZoomToPercent方法:让PageLayout 以按照输入的比例显示;IPageLayout : Z
4、oomToWidth 方法:让视图显示的范围匹配对象的宽度。5.3 Map与PageLayout对象共同点PageLayout与Map都是视图对象,能够显示地图,都实现了IActiveView接口; 同时它们都是图形元素的容器,能存储图形元素(Graphics Element),都实现了IGraphicsContainer接口 。ArcGIS中可以显示在视图上的图形分为两种,地理数据和元素( Element)数据。元素是一个地图中除去要素数据外的部分,即在一幅地图中,除了保存在数据库中的地理数据外,其余的对象全部是元素。存储的图形类型差别: Map只能保存图形元素(Graphic Elemen
5、t)数据;PageLayout能保存图形元素和框架元素(Frame Element)。 PageLayoutControl 上的Map对象被PageLout的MapFrame对象所管理。地图总是包含在Map对象中,而Map对象是由一个MapFrame所持有,PageLayout对象至少拥有一个MapFrame对象,而每个MapFrame中也拥有一个Map。Map 对象和PageLayout 对象显示的数据除了地理数据之外,另一种即为元素(Element)数据如图所示。IActiveView接口 定义了Map对象的数据显示功能。通过使用该接口可以在Map上绘制图形,改变视图的范围,获取Scree
6、nDisplay对象的指针,刷新视图。AE中 Map和PageLayout对象都实现这个接口,分别代表两种不同的视图:数据视图和布局视图。在任何时刻都只能有一个视图处于活动状态。IActiveView pActiveView = pMap as IActiveView;IActiveView pActiveView = pPageLayout as IActiveView;IActiveView的重要属性:Extent属性,返回Map对象当前视图的范围,是一个Envelope对象;FullExtent:返回视图的全图范围;Refresh方法:一种刷新方式PartialRefresh方法:部分刷
7、新方式。 如何刷新显示使用IActiveView的Refresh方法刷新所有的显示 (但是不刷新TOC表)使用IScreenDisplay的Invalidate的方法只刷新指定的范围 (envelope)也许你只需要刷新部分的显示区域被新图形元素覆盖的区域比直接刷新整个文档的效率高使用IActiveView的PartialRefresh方法用于 Layout 视图或者 Data view指定什么需要刷新 (e.g., graphics) 指定哪里需要刷新 (an envelope)IActiveView的PartialRefresh(esriViewGeography, pLayer, nul
8、l)用于刷新指定图层:IActiveView的PartialRefresh(esriViewGeography, null, null) 用于刷新所有地理要素:IActiveView的PartialRefresh(esriViewGeoSelection, null, null) 用于刷新所选的地理要素:IActiveView的PartialRefresh(esriViewGraphics, null, null) 用于刷新所有的图形元素:IActiveView的PartialRefresh(esriViewGraphics, pElement, null) 用于刷新指定图形元素IActive
9、View的PartialRefresh(esriViewGraphicSelection, null, null)用于刷新所选择的图元。6-11IDrive燃料加速刹车多态回顾许多不同的类可以支持相同的接口拥有相同的所有的方法和属性可以有不同的执行方式和拥有不同的属性值许多ArcGIS的类都表现出多态的特性,其特点是在几个Classes中使用同一个Interface,但每一个Class却执行不同的methods and properties。IGraphicsContainer接口IGraphicsContainer 接口管理Map 和PageLayout 对象上储存的元素,使用IGraphi
10、csContainer 接口可以添加,删除和更新位于Map 或PageLayout上的元素。 IGraphicsContainer pGraphicsContainer = pMap as IGraphicsContainer; IGraphicsContainer pGraphicsContainer = pPageLayout as IGraphicsContainer;/PageLayout对象引用赋给IGraphicsContainer接口的对象变量,得到GraphicsContainer对象。AddElement:添加元素;用法:pGraphicsContainer.AddEleme
11、nt(pElement, 0)UpdateElement:更新元素:,DeleteElement: 删除元素;LocateElement:选择元素DeleteAllElements;LocateElementsByEnvelope:Map上拖曳一个矩形区域,选择区域内的元素SpatialReference属性:设置图形元素的空间参考。空间参考是一个图形能够在一定范围内正确显示所必须设置的属性。 对象模型图ArcMap OMD5.4 Element对象Element对象是一个非常庞大复杂的对象集合如图 ,它主要分为两大部分:图形元素(GraphicElement)和框架元素(Frame Elem
12、ent)。图形元素可以被放在页面视图或地图上,但框架元素只能放在页面视图上,如地图标题是放置于页面版面设计上的一个文本元素。IElement是所有图形元素(GraphicElement)和框架元素(Frame Element)都实现的接口,通过IElement接口可以确定Element对象的Geometry属性,同时IElement接口也提供了用于查找和绘制元素的方法。Element是抽象类,开发中必须明确指定使用的Element类型。IElement和ILineElement, ITextElement等并不是父子关系, 后者没有Geometry属性,只有IElement有Geometry属
13、性。图例元素(Elements)有一些可以创建的对象图形元素的种类marker , Line, polygonText and pictures框架元素(FrameElements )在PageLayout上使用Map framesNorth arrows, legends, scale barsTable frames5.4.1 图形元素(Graphic Element)图形元素包括以下对象,做为图形的形式存在,在视图上可见 :MarkerElement LineElementTextElementFillShapeElementGroupElementPictureElementLineE
14、lement和 MarkerElement对象(组建类)MarkerElement和ILineElement是最简单的图形元素。在数据视图或布局视图上表现为线和点的形式。ILineElement接口的Symbol属性设置线的符号。 IMarkerElement接口的Symbol属性设置点的符号。以LineElement为例,把它添加到视图需要两个接口IElement和ILineElement。IElement用于确定线元素的Geometry;ILineElement用于确定Symbol。注意:Symbol与Geometry不能混用。LineElement元素只能使用Line或Polyine作为
15、Geometry,使用通过LineSymbol类型作为Symbol;MarkerElement使用的是Marker类型的Symbol和点作为它的Geometry 。要将图形元素显示在视图的一般步骤如下:产生一个新的元素对象; 确定元素显示时使用的Symbol(符号)和Geometry(几何形体对象); 使用IGraphicsContainer:AddElement方法把元素添加到视图中; 刷新视图,显示添加的元素。例子: 创建一个新的图形元素并设置它的符号IMarkerElement pMarkerElement;pMarkerElement = new MarkerElementClass(
16、); /创建一个新的元素ISimpleMarkerSymbol pMarkerSym;pMarkerSym = new SimpleMarkerSymbolClass(); /创建新符号pMarkerSym.Style = esriSimpleMarkerStyle.esriSMSCircle /指定符号的样式(风格)pMarkerSym.Color = getRGB(255,0,0); /用函数设置符号的颜色为红色 /并把颜色赋给符号pMarkerElement.Symbol = pMarkerSym 把符号赋给元素定义一个元素的位置使用IElement 的 Geometry属性被所有Ele
17、ment的子类所支持在地图(Map)或布局 (layout page)上定位Geometry可以指定为 point, line, envelope等IElement pElement;pElement = pMarkerElement as IElement QIIPoint pPoint;pPoint = new PointClass();pPoint.PutCords(65.751, -7.534);/Ipoint的PutCoords方法:指定坐标点建立PointpElement.Geometry = pPoint;把一个元素添加到 map (或者 layoutpage)使用 IGraph
18、icsContainer : AddElement指定添加的元素和它的序号0号的序号是第一个(最顶部)的元素,序号从顶到底逐渐增加IMap pMap = new axMapControl1.Map;IActiveView pArctiveView = pMap as IArctiveView;IGraphicsContainer pGraphicsContainer = pMap as IGraphicsContainer;pGContainer.AddElement(pElem,0) 0=top elementpActiveView.Refresh();通过刷新屏幕来显示新添加的元素Enve
19、lope对象Envelope也称包络线(bounding box),是一个矩形区域。定义了一个要素(feature)的空间范围,是每个几何体的最小外接矩形所有的几何对象都有Envelop属性主要接口 IEnvelope,CenterAt方法:通过改变Envelope的中心点来移动Envelope;PutCoords方法:指定坐标点建立Envelope;IEnvelope pEnvelope pEnvelope = pLine.EnvelopeIEnvelope pEnvelope = new EnvelopeClass();pEnvelope.PutCoords(1,1,2,2);IEleme
20、nt pElement.Geometry = pEnvelope;FeatureGeometryEnvelope1 Polygon Feature如何添加一个MarkerElement到Map中,它放在控件的MouseDown事件中。private void axMapControl1_OnMouseDown(object sender,ESRI.ArcGIS.MapControl.IMapControlEvents2_OnMouseDownEvent e)IMap pMap;IActiveView pActiveView;pMap = axMapControl1.Map;pActiveVie
21、w = pMap as IActiveView;IPoint pPt;pPt=new PointClass();pPt.PutCoords(e.mapX, e.mapY);IMarkerElement pMarkerElement;pMarkerElement = new MarkerElementClass();ISimpleMarkerSymbol pMarkerSymbol;pMarkerSymbol = new SimpleMarkerSymbolClass();pMarkerSymbol.Color = getRGB(11, 200, 145);pMarkerSymbol.Size
22、= 2;pMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSDiamond;IElement pElement;pElement = pMarkerElement as IElement;pElement.Geometry = pPt;pMarkerElement.Symbol = pMarkerSymbol;IGraphicsContainer pGraphicsContainer;pGraphicsContainer = pMap as IGraphicsContainer;pGraphicsContainer.AddElement(pMa
23、rkerElement as IElement, 0);pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);TextElement 对象(组建类)地图的标注有两种形式:一种是保存在地理数据库中以标注类的形式存在,另一种是使用文字元素。TextElement 对象实现了ITextElement接口,提供了3个属性;.ScaleText属性 设置TextElement的文字尺寸.Text属性 设置TextElement的字符.Symbol属性 设置TextElement的文字符号 /设置字体(font
24、) IFontDisp pFontDisp; pFontDisp= new stdole.StdFontClass(); pFontDisp.Name = Arial; pFontDisp.Bold = True; pFontDisp.Underline = True ; / Setup TextSymbol that the TextElement will draw with ITextSymbol pTextSymbol = new TextSymbolClass(); pTextSymbol.Font = pFontDisp; pTextSymbol.Color = getRGBCol
25、or(255, 0, 0); pTextSymbol.size = 25;/set the size of the text symbol here, rather than on the font /设置文本元素 ITextElement pTextElement = new TextElementClass(); pTextElement.Text = 我的地图; pTextElement.ScaleText = 30; pTextElement.Symbol = pTextSymbol;FillShapeElement对象(抽象类)FillshapeElement是抽象类,它的子类有:R
26、ectangleElement (矩形要素); CircleElement (圆形要素);EllipseElement (圆形要素);PolygonElement (多边形要素);这些对象的共同特点是它们的Geometry属性都是一个二维的封闭图形。FillShapeElement类实现了IFillShapeElement接口,通过接口提供的Symbol属性设置元素的样式,Symbol必须是IFillSymbol对象。 /产生一个线符号 ISimpleLineSymbol pSimpleLineSymbol; pSimpleLineSymbol.Color = getRGBColor(255,
27、 0, 0); pSimpleLineSymbol.Width = 2; /设置填充符号属性 ISimpleFillSymbol pSimpleFillSymbol; pSimpleFillSymbol.Color = getRGBColor(255, 100, 80); pSimpleFillSymbol.Outline = pSimpleLineSymbol; pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid; /设置填充元素符号属性 IFillShapeElement pFillShapeElement; pFillSh
28、apeElement = new PolygonElementClass(); pFillShapeElement.Symbol = pSimpleFillSymbol; IElement pElement;pElement = pFillShapeElement as IElement;IPolygon pPolygon;pPolygon = axMapControl1.TrackPolygon() as IPolygon; / Object.TrackPolygon( ) 在某个对象上画个多边形;/ Object.TrackRectangle ( ) 在某个对象上画个矩形; pElemen
29、t.Geometry = pPolygon; pGraphicsContainer.AddElement(pElement,0);pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null,null);GroupElement对象(组建类)GroupElement对象可以将多个元素编为一组作为一个实体使用。如果用户需要对多个要素进行相同的操作,如同时移动多个要素的时候,可以将它们编为一组。GroupElement类实现IGroupElement接口,它定义了操作GroupElement的方法和属性。AddElement方
30、法:把一个元素添加到GroupElements对象中,ClearElements: 清空GroupElement中的所有元素;DeleteElement;ElementCount:返回GroupElement中的元素数目。PictureElement对象(抽象类)该对象有7个子类,如BmpPictureElement, GifPictureElement JpgPictureElement TifPictureElement EmfPictureElement,它们分别用于往版式视图中插入bmp, gif,Jpg,tif和emf文件。每个子类都实现的接口IPictureElement,使用它可
31、以用于操作一个图片元素。5.4.2 框架元素(Frame Element)框架元素(Frame Element)包括:MapElement,MapSurrundFrame,OleFrame和TableFrame等,作为不可见的容器存在。所有的框架元素都实现IFrameElment接口;MapFrame对象是Map的容器,用于管理Map对象;实现IMapFrame接口,CreateSurroundFrame方法:获得一个MapSurroundFrame对象。MapSurroundFrame对象是MapSorrund的容器,是一种用于管理MapSorrund对象的框架元素,该对象包括比例尺,比例文
32、本,指北针,图例等 ; MapSorrund对象自动与某个地图对象关联,随着地图视图的变化而变化。 MapSurroundFrame对象实现IMapSurroundFrame接口。每个MapSurroundFrame对象都与一个MapFrame相联系,如果MapFrame被删除,与其相连的MapSurroundFrame对象都绘被删除。框架元素FrameElement属于 PageLayout 的附属MapSurroundFrame elementsMapSurrounds对象的容器 (e.g., Scalebars)内容动态更新MapSurroundFrameMapSurround5.5 M
33、apSurround 对象 (地图整饰对象)MapSurround指图例,北针、比例尺、比例文本等对象;MapSurround 对象并不是简单的图形,而是直接和地图动态连接。它与一个地图对象关联的用于修饰地图的辅助图形元素对象如图所示。它的形状或内容会随着Map 属性的变化而自动改变。MapSurround并不是直接被加入到页面布局中去的,而是被加入到某一特定类型的框架元素中,这一框架元素称为MapSurroundFrame。如Map 视图范围改变后比例尺(ScaleBar)也会自动调整比例,比例尺文本(ScaleBarText)也会相应改变它的比例值。MapSurround 对象由MapSu
34、rroundFrame 对象管理,所有的MapSurround 对象添加在布局视图上。所有的MapSurround 对象都实现IMapSurround 接口:IMapSurround :Name 属性: 获得MapSurround 对象的名称;IMapSurround :FitToBound 方法: 设置一个MapSurround 对象的大小。图例Ledend图例对象图例Legend是一个与Map对象中图层的渲染相关的对象,通过渲染对象在地图上产生专题地图。Legend类主要实现ILegend接口,提供获得和修改属性的属性与方法:AddItem 添加图例;ClearItems:清除图例;Aut
35、oAdd为true时,Map对象加入新图层后,与Map关联的图例对象会响应Map图层变化,增加一个条目。MakerNorthArrow指北针对象MakerNorthArrow指北针(组建类):继承NorthArrow抽象类,用于指示地图空间方位的图形,是一个MapSurround对象。该对象实现了两个接口:IMarkerNorthArrow 和INorthArrow;IMarkerNorthArrow:设置指北针对象的一般属性,如颜色,尺寸和位置等;INorthArrow:定义一个属性MarkSymbol ,用于设置指北针的符号;ScaleBar 比例尺对象地图上的图形与现实空间地物之间存在着
36、一定的比例关系,通过比例尺来说明地图上的单位长度,代表着现实世界的实际长度。ScaleBar对象是一种MapSurround对象,该类泛化出多个子类,如ScaleLine,AlternatingScaleBar(交替双刻度比例尺),DoubleAlternatingScaleBar,HollowScalbar等,这些类都实现了IScaleBar和IScaleMarks接口。IScaleBar接口的属性介绍: Division:设置比例尺的分割单位; DivisionsBeforeZero:设置比例尺原点左侧显示的段数; Divisions:设置比例尺的总段数(包括原点左侧的段数); Subdivisions:设置主比例尺分为几个子段; Units:设置比例尺的单位; UnitLabel:String型,设置单位标签上的内容; UnitLabelPosition:设置单位标签显示的位置; LabelPosition:比例尺数字标签的显示位置; LabelFrequency:比例尺数字标签的风格 ScaleText 比例尺文本比例尺文本对象,显示明确的比例数值,它是一个文本元素,显示的比例随着地图比例尺的变化而变化。该类实现了IScaleText接口,定义了文本的属性和方法,如Symbol和text等。text属性用来获取比例文本的字符;ArcEngine地图整
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 跨境电商保税仓2025年收发货协议
- 池洲初三期末考试试卷及答案
- 2025-2026人教版八年级地理上学期期末测试卷
- 2025 小学六年级科学上册科学教育中的创新意识激发策略课件
- 检查各部门卫生制度
- 水乐园卫生管理制度
- 洗浴卫生制度
- 社区卫生监督员工作制度
- T∕CAICI 126-2025 5G消息业务增强能力规范-AI智能体能力要求
- 关于卫生间管理制度
- 雷波县粮油贸易总公司 2026年面向社会公开招聘备考考试试题及答案解析
- 疗养院员工劳动保护制度
- 2026浙江温州市苍南县城市投资集团有限公司招聘19人考试参考试题及答案解析
- 2026年广州中考化学创新题型特训试卷(附答案可下载)
- 2025司法鉴定人资格考试考点试题及答案
- 保健用品生产管理制度
- 档案计件工资管理制度
- 浙江省杭州市拱墅区2024-2025学年八年级上学期语文期末试卷(含答案)
- DB11∕T 695-2025 建筑工程资料管理规程
- 产科护理中的人文关怀与沟通艺术
- 2025年广电营销考试题库
评论
0/150
提交评论