第六章 地圖表現(xiàn)2_第1頁
第六章 地圖表現(xiàn)2_第2頁
第六章 地圖表現(xiàn)2_第3頁
第六章 地圖表現(xiàn)2_第4頁
第六章 地圖表現(xiàn)2_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、地圖表現(xiàn)v一、一、 圖形元素(圖形元素(Graphics Element)模型)模型v二、二、 框架元素(框架元素(Frame Element)模型)模型v三三 、MapSurround對象模型對象模型概述概述 在ArcGIS中可以顯示在視圖上的圖形分為兩種,一種是基于Layer的要素(Feature)等儲存在數(shù)據(jù)庫中的數(shù)據(jù),另外一種就是元素(element)。元素是一個地圖中除去要素數(shù)據(jù)外的部分,即在一幅地圖中,除了保存在數(shù)據(jù)庫中的地理數(shù)據(jù)外,其余的對象全部是元素。 在MapControl控件中通過DrawShape方法繪制的圖形,在視圖進行了縮放等操作后就會消失,這是因為這些圖形本質(zhì)上都是

2、緩存,僅僅是暫時存在。如果要保存這些元素,就需要使用MXD文件。 Element是一個非常龐大復(fù)雜的對象集合,它主要分為兩大部分:圖形元素(Graphic Element)和框架元素(Frame Element)。 在Map或PageLayout對象中可以通過IGraphicsContainer接口來管理這些元素,使用這個接口定義的方法可以添加、刪除和更新單個的位于Map或PageLayout上的元素。使用GroupElement對象還可以將多個元素編組作為單個實體來給用戶使用。 IElement是所有圖形元素和框架元素類都實現(xiàn)的接口。這個接口可以讓程序員確定元素的Geometry屬性,它也定

3、義了方法讓用戶查找元素和繪制元素。Element只是一個抽象類,在實際編程中必須明確指定使用元素的類型。一、一、Graphics Element對象模型對象模型 所有的圖形元素(Graphics Element) 圖形元素還實現(xiàn)ITransform2D接口,這個接口定義的方法和屬性可以讓圖形元素移動、旋轉(zhuǎn)和縮放。 圖形元素包括GroupElement,MarkerElement, LineElement,TextElement,DataGraphElement,PictureElement和 FiIIshapeElement等對象,它們都是作為圖形的形式而存在,在視圖上是可見的。一、一、Gra

4、phics Element對象模型對象模型LineElement和和MarkerElement對象對象 LineElement和 MarkerElement是最簡單的圖形元素,它們在數(shù)據(jù)視圖(dataView)或者布局視圖(Pagelayout view)上表現(xiàn)為線和點的形式。要將圖形元素顯示在視圖上,一般的步驟是這樣的: 1.產(chǎn)生一個新的元素對象; 2.確定元素顯示時使用的Symbol(符號)和Geometry(幾何形體對象); 3.使用IGraphicsContainer.AddElement把元素添加到視圖中去; 4.刷新視圖,讓添加的元素可以顯示出來。 以LineElement為例,添

5、加它到視圖需要使用兩個接口:(Element和ILineElement,前者用于確定線元素的Geometry ,后者用于確定Symbol 需要注意的是能夠使用的Symbol和 Geometry不是混用的,LineElement元素只能使用用于修飾LineElement對象的符號,也只能使用Line或者Polyline作為Geometry。MarkerElement也是一樣,使用的是Marker類型的Symbol和點作為它的Geometry。一、一、Graphics Element對象模型對象模型LineElement和和MarkerElement對象對象一、一、Graphics Element

6、對象模型對象模型FiIIShapeElement對象對象 FiIIshapeElement是一個抽象類,它的子類有CircIeElement, EIIipseElement,PolygonElement和 RectangleElement。這些對象的共同特點是它們的Geometry屬性都是一個一維的封閉圖形,在視圖上分別表現(xiàn)為圓形元素、橢圓形元素、多邊形元素和矩形元素。 IFiIIshapeElement是所有FiIIshapeElement類都實現(xiàn)的接口,它定義了用于顯示圖形元素的Symbol屬性,這個Symbol屬性必須設(shè)置為IFillsymbol對象。 這些類型的圖形元素的新建和加入到M

7、ap或PageLayout視圖的方法與點、線元素沒有區(qū)別。下面的代碼是添加一個PolygonElement元素到Map對象中,一、一、Graphics Element對象模型對象模型FiIIShapeElement對象對象 IMap pMap; IActiveView pActiveView; /獲得控件的Map對象 pM ap=axMapControll .Map; pActiveView=pMap as IActiveView; IPolygon pPolygon=axMapControll.TrackPolygon() as IPolygon; /產(chǎn)生一個ISimpIeFillsymbo

8、l對象 舊impIeFiIISymbol pSimpIeFillsym; pSimpIeFillsym=new SimpIeFiIISymboIClass(); pSimpIeFiIIsym.Style=esriSimpIeFiIIStyle.esriSFSDiagonalCross; pSimpIeFiIIsym.Color=getRGB(102, 200, 103); /產(chǎn)生一個PolygonElement對象 IFiIIShapeElement pPolygonEle; pPolygonEle=new PolygonElementClass(); pPolygonEle.Symbol=p

9、SimpIeFillsym; (Element 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對象模型對象模型TextElement對象對象 地圖為了顯示圖形的附加信息,一般都是需要采用文字標(biāo)注來完成。地圖的標(biāo)注有兩種形式:一種是保存在地理數(shù)據(jù)庫中以標(biāo)注類的形式存在,另一種是使用文字元素。 TextElement對象實現(xiàn)了ITextElement接口,這個接口定義了設(shè)置文字元素特征的屬性,如ScaleText(文字尺寸)、Text(字符)和Symbol(文字的修飾符號)。需要注意的是TextElement的Geometry是一個點,即Point對象。一、一、Graphics Element對象模型對象模型TextElement對象對象IMap pMa

11、p;IActiveView pActiveView;/獲得控件的Map對象pM ap=axMapControll.Map;pActiveView=pMap as IActiveView;ITextElement pTextEle;IElement pEles;/新建文本對象并設(shè)置它的屬性pTextEle=new TextElementClass();pTextEle.Text=ArcObjects;pEles=pTextEle as IElement;/設(shè)置文本對象的幾何屬性IPoint pPoint;pPoint=new PointClass();pPoint.PutCoords(e.map

12、X, e.mapY);pEles.Geometry=pPoint;/添加到Map對象并刷新IGraphicsContainer pGraphicsContainer;pGraphicsContainer=pMap as IGraphicsContainer;pGraphicsContainer.AddElement(pEles, 0);pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null)一、一、Graphics Element對象模型對象模型GroupElement對象對象 GroupElement

13、對象可以將多個元素編為一組當(dāng)一個實體來使用。如果用戶需要對多個要素進行相同的操作,如同時移動多個要素的時候,可以將它們編為一個組。GroupElement類默認實現(xiàn)IGroupElement接口,它定義了操作GroupElement的方法和屬性。 IGroupElement.AddElement方法可以將一個元素添加到GroupElement對象;而IGroupElement.CIearElements可以清除GroupElement中所有的元素;DeleteElement方法可以根據(jù)GroupElement中的某個元素的索引值刪除這個元素。 GroupElement是一個組件類,即用戶可以新

14、建一個單獨的GroupElement對象用于處理元素。一、一、Graphics Element對象模型對象模型PictureElement對象對象private void GroupElement(IGraphicsContainer pGraphicsContainer) /產(chǎn)生一個新的GroupElement對象 IGroupElement pGroupEle; pGroupEle=new GroupElementClass(); IElement pEle; pGraphicsContainer.Reset(); /獲得pGraphicsContainer中的第一個元素 pEle=pGr

15、aphicsContainer.Next(); /遍歷元素 while (pEle!=null) /將它添加進pGroupEle對象 pGroupEle.AddElement(pEle); pEle=pGraphicsContainer.Next(); /最后使用lElementCount來測試是否成功 MessageBox.Show(pGroupEle.EIementCount.ToStringQ);二、二、框架元素模型框架元素模型 框架元素(Frame Element)是另一大類的元素對象??蚣茉赜袃蓚€主要對象:一個是MapFrame(地圖框架),另一個是MapSurroundFrame

16、(地圖修飾框架)。 框架元素是一種包含著其他的地圖元素的容器。所有的框架元素類(如FrameElement, OIeFrame, MapFrame和 MapsurroundFrame)都實現(xiàn)了IFrameElement接口,這個接口定義了操作框架元素最一般的屬性和方法,如BackGround、Border屬性可以用于設(shè)置框架元素的背景和邊框。 框架元素盡管不能被可視化看到,但它們在ArcMap程序中扮演了極為重要的角色。二、二、框架元素模型框架元素模型 從圖可以看到,PageLayout可以直接得到它管理的MapFrame和MapSurroundFrame對象的指針,在一個PageLayout

17、對象中,可以存在多個框架元素對象。MapFrame對象是Map的容器,它用于管理Map對象;而MapSurroundFrame對象則用于管理MapSurround對象,MapSurround就是為了修飾地圖而使用的比例尺、比例文本和指北針等對象。 每個MapSurroundFrame都是與一個MapFrame相聯(lián)系的。如果一個MapFrame被刪除了那么它其中所有的MapSurroundFrame對象也將被刪除。二、框架元素模型二、框架元素模型MapFrame MapFrame對象是由PageLayout對象來控制的,它用于管理Map對象。MapFrame對象支持IMapFrame接口,使用I

18、MapFrame定義的屬性和方法可以控制其中的Map對象。 IMapFrame.Map屬性可以獲得這個地圖框架內(nèi)的地圖對象,它是一個只讀屬性;MapBounds屬性則可以返回地圖對象的范圍,它一個Envelope對象;MapFrame使用MapScale屬性來確定地圖顯小的比例,它們都是用于更新這個框架元素內(nèi)的地圖對象的。 IMapFrame.CreateSurroundFrame方法用于返回一個MapSurroundFrame對象。 MapFrame對象還實現(xiàn)了IMapGrids接口,它可以用于竹理地圖框架中的MapGrid(地圖格網(wǎng))。AddMapGrid用于添加MapGrid對象,CIe

19、arMapGrids可以清除所有的MapGrid對象, DeleteMapGrid使用索引值刪除地圖框架對象中的某個MapGrid。二、框架元素模型二、框架元素模型TableFrame TabIeFrame是一種可以容納Table對象的框架元素。當(dāng)用戶在ArcMap打開一個要素圖層的屬性表,點擊“Options”按鈕,選擇“Add Table to Layout”后,會在布局視圖中發(fā)現(xiàn)一份數(shù)據(jù)表。 這個Table對象就是由TabIeFrame對象來進行管理的,后者只能放置在布局視圖中,而不能添加到Map對象中去。ITabIeFrame接口是TabIeFrame類實現(xiàn)的唯一接口,它提供了操作框架

20、元素中表的屬性和方法。 ITabIeFrame.StartCol和 StartRow可以設(shè)置顯示表時的列數(shù)和行數(shù);而使用ITabIeFrame.TabIeView屬性可以讓程序員得到一個ITabeIView對象去改變表視圖的屬性,諸如選擇顯示等。 ITabIeFrame.Table屬性將會返回給用戶一個與框架相關(guān)的ITable對象,它實際上是普通屬性表或是要素類,也就是這個數(shù)據(jù)表的數(shù)據(jù)源對象。當(dāng)然用戶也可以使用ITabIeFrame.TabIeProperty屬性得到的ITabIeProperty對象來獲得它的指針。二、框架元素模型二、框架元素模型MapGrid 一幅成品地圖中總是會看到地圖格

21、網(wǎng)。在小比例尺地圖中,經(jīng)緯網(wǎng)可以讓指明某個區(qū)域在地球上的確切位置;在大比例地圖見,也可以使用方見網(wǎng)將一塊區(qū)域進行規(guī)律劃分,它們是修飾一幅地圖不可缺少的部分。 ArcObjects中也提供了用于輔助顯示地圖的地圖格網(wǎng)MapGrids對象,它出現(xiàn)了地圖邊緣上,用于顯示經(jīng)緯度或者方格網(wǎng)。在本質(zhì)上它就是MapFrame對象,必須出現(xiàn)在PageLayout視圖而不是Map視圖。一幅地理網(wǎng)格主要由GridLine(格網(wǎng)線)、GridLabel(格網(wǎng)標(biāo)注)和 GridBorder(格網(wǎng)邊框)三部分組成。二、框架元素模型二、框架元素模型MapGrid MapGrid對象是布局視圖中的一種參考線或點,它可以幫助

22、用戶快速地確定地圖中要素的位置。MapGrid對象由MapGrids,一個MapGrids中可以存在多個MapGrid對象。 在布局視圖中獲得一個MapGrid的指針非常容易,使用IGraphicsContainer.FindFrame可以得到PageLayout對象的MapFrame對象,然后通過QI方法可以得到,如下面的代碼段: private IMapGrid GetMapGrid() IActiveView pActiveView; IGraphicsContainer pGraphicsContainer; IMapFrame pMapFrame; IMap pMap; pActiv

23、eView=axPageLayoutControll .PageLayout as IActiveView; pMap=pActiveView.FocusMap; pGraphicsContainer=axPageLayoutControll .PageLayout as IGraphicsContainer; pMapFrame=pGraphicsContainer.FindFrame(pMap) as IMapFrame; IMapGrids pMapGrids; pMapGrids=pMapFrame as IMapGrids; IMapGrid pMapGrid; pMapGrid=p

24、MapGrids.get_MapGrid(0); return pMapGrid; 二、框架元素模型二、框架元素模型MapGridBorder 地圖格網(wǎng)是有邊框,這些邊框?qū)ο箢愋秃芏啵鼈兌紝崿F(xiàn)了IMapGridBorder接口。邊框有兩種類型:SimpIeMapGridBorder和 CalibratedMapGridBorder。IMapGridBorder.DispIayName屬性可以得到邊框的顯示名稱。 當(dāng)用戶新建一個MapGridBorder對象時,不必使用IMapGridBorder接口,這是因為這個接口的屬性都是只讀的。 SimpIeMapGridBorder對象只是使用簡單的

25、直線來作為地圖的邊框,因而在ISimpIeMapGridBorder接口中必須設(shè)置的是LineSymbol屬性,它用于確定邊框線的樣式、寬度和顏色。private ISimpIeMapGridBorder CreateSimpIeMapGridBorder()/新建個簡中邊框?qū)ο驣SimpleMapGridBorder pSimpIeMapGridBorder;pSimpIeMapGridBorder=new SimpIeMapGridBorderClass();/設(shè)置簡單邊框的屬性ISimpleLineSymbol pLineSymbol;pLineSymbol=new SimpIeLine

26、SymboIClass();pLineSymbol.Style=esriSimpIeLineStyle.esriSLSSoIid;pLineSymbol.Color=getRGB(0, 0, 0);pLineSymbol.Width=2;pSimpIeMapGridBorder.LineSymbol=pLineSymbol;return pSimpIeMapGridBorder;三、三、MapSurround對象模型對象模型 MapSurround是與一個地圖對象關(guān)聯(lián)的一種用于修飾地圖的輔助圖形元素對象。它們的形狀或數(shù)值會隨著地圖屬性的變化而自動改變。如地圖視圖范圍改變后,ScaleBar(比

27、例尺)對象將會自動調(diào)整比例,ScaleBarText(比例尺文本)也會相應(yīng)改變它的比例值,即 MapSurround類型對象會監(jiān)聽Map對象的行為而做出相應(yīng)反應(yīng)。 在ArcMap中Mapsurround是由MapSurroundFrame對象管理的。所有的MapSurround被放置在布局視圖上,而它也只能在這個視圖上擺放。由于MapSurround與一個Map對象有直接關(guān)聯(lián),因此可以使用IMap.Mapsurrounds來得到它,用戶也可以通過Imap.MapSurroundCount來遍歷一個給定的Map對象所有可以使用的MapSurround對象。 所有的MapSurround對象都支持

28、IMapSurround接口,它定義了MapSurround對象一般的屬性和方法,如使用Name屬性可以得到某個MapSurround的名稱。三、三、MapSurround對象模型對象模型圖例對象圖例對象 圖例(Legend)是MapSurround對象群中最復(fù)雜的一個,這是因為它涉及到太多其它的對象以生成一個美觀合理的圖例。圖例是與一個Map對象中圖層的著色操作(renderer)相關(guān)的對象,著色對象可以在地圖上產(chǎn)生專題圖。每個著色對象都有一個或者多個LegendGroup(圖例組),而這個數(shù)目則取決于地圖有多少種著色方案。 每個LegendGroup都有一個或者多個LegendClass(

29、著色類)對象,而每個LegendClass代表了一個使用自身的符號和標(biāo)簽制作的圖例分類。在ArcMap中將一個要素圖層進行基于多屬性的著色操作后,用戶會在TOC窗體內(nèi)發(fā)現(xiàn)如圖的圖形。三、三、MapSurround對象模型對象模型指北針對象指北針對象 MarkerNorthArrow是一種用于指示地圖空間方位的圖形,它其實是ESRI North字庫中的字符符號,字庫中的任何一種字體的符號都可以當(dāng)作指北針使用。 MarkerNorthArrow從抽象類NorthArrow繼承而來,它是一個MapSurround對象。MarkerNorthArrow對象的兩個主要接口是INorthArrow和IMarkerNorthA

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論