版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、GIS開發(fā)與應(yīng)用 基于ArcEngine方法花利忠2011-11-15第五章 地圖整飾與輸出5.1 MapControl 地圖控件Map對象(CoClass,組建類) (ESRI.ArcGIS.Carto)5.2 PageLayoutControl 頁面布局控件PageLayout對象(CoClass,組建類) (ESRI.ArcGIS.Carto)5.3 Map與PageLayout對象共同點(diǎn)5.4 Element對象(ESRI.ArcGIS.Carto)圖形元素框架元素MapFrame對象MapSurroundFrame對象5.5 MapSurround對象(ESRI.ArcGIS.Car
2、to)5.6 地圖輸出5.1 MapControl地圖控件MapControl控件對應(yīng)ArcMap中的數(shù)據(jù)視圖(Data View),它封裝了Map對象(CoClass,組建類),并提供了額外的屬性、方法、事件用于: 管理控件的外觀、顯示屬性和地圖屬性;添加并管理控件中的數(shù)據(jù)層;裝載Map地圖文檔(mxd) ;動態(tài)添加和顯示幾何對象等;Map組件類主要接口IMap:IMap pMap = axMapControl1.Map;5.2 PageLayoutControl頁面布局(版式)控件PageLayoutControl對應(yīng)ArcMap中的布局視圖(Layout View),它封裝了PageLa
3、yout對象,并提供了額外的屬性、方法、事件用于:加載地圖文檔(mxd) ;繪制地圖元素;創(chuàng)建布局視圖(圖例、指北針和比例尺等)地圖的打印輸出;PageLayout組件類主要實現(xiàn)了IPageLayout 接口,它定義了用于修改頁面布局的方法和屬性。 IPageLayout pPageLayout = axPageLayoutControl1. PageLayout;IPageLayout :ZoomToWhole 方法:讓PageLayout 以最大尺寸顯示;IPageLayout : ZoomToPercent方法:讓PageLayout 以按照輸入的比例顯示;IPageLayout : Z
4、oomToWidth 方法:讓視圖顯示的范圍匹配對象的寬度。5.3 Map與PageLayout對象共同點(diǎn)PageLayout與Map都是視圖對象,能夠顯示地圖,都實現(xiàn)了IActiveView接口; 同時它們都是圖形元素的容器,能存儲圖形元素(Graphics Element),都實現(xiàn)了IGraphicsContainer接口 。ArcGIS中可以顯示在視圖上的圖形分為兩種,地理數(shù)據(jù)和元素( Element)數(shù)據(jù)。元素是一個地圖中除去要素數(shù)據(jù)外的部分,即在一幅地圖中,除了保存在數(shù)據(jù)庫中的地理數(shù)據(jù)外,其余的對象全部是元素。存儲的圖形類型差別: Map只能保存圖形元素(Graphic Elemen
5、t)數(shù)據(jù);PageLayout能保存圖形元素和框架元素(Frame Element)。 PageLayoutControl 上的Map對象被PageLout的MapFrame對象所管理。地圖總是包含在Map對象中,而Map對象是由一個MapFrame所持有,PageLayout對象至少擁有一個MapFrame對象,而每個MapFrame中也擁有一個Map。Map 對象和PageLayout 對象顯示的數(shù)據(jù)除了地理數(shù)據(jù)之外,另一種即為元素(Element)數(shù)據(jù)如圖所示。IActiveView接口 定義了Map對象的數(shù)據(jù)顯示功能。通過使用該接口可以在Map上繪制圖形,改變視圖的范圍,獲取Scree
6、nDisplay對象的指針,刷新視圖。AE中 Map和PageLayout對象都實現(xiàn)這個接口,分別代表兩種不同的視圖:數(shù)據(jù)視圖和布局視圖。在任何時刻都只能有一個視圖處于活動狀態(tài)。IActiveView pActiveView = pMap as IActiveView;IActiveView pActiveView = pPageLayout as IActiveView;IActiveView的重要屬性:Extent屬性,返回Map對象當(dāng)前視圖的范圍,是一個Envelope對象;FullExtent:返回視圖的全圖范圍;Refresh方法:一種刷新方式PartialRefresh方法:部分刷
7、新方式。 如何刷新顯示使用IActiveView的Refresh方法刷新所有的顯示 (但是不刷新TOC表)使用IScreenDisplay的Invalidate的方法只刷新指定的范圍 (envelope)也許你只需要刷新部分的顯示區(qū)域被新圖形元素覆蓋的區(qū)域比直接刷新整個文檔的效率高使用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燃料加速剎車多態(tài)回顧許多不同的類可以支持相同的接口擁有相同的所有的方法和屬性可以有不同的執(zhí)行方式和擁有不同的屬性值許多ArcGIS的類都表現(xiàn)出多態(tài)的特性,其特點(diǎn)是在幾個Classes中使用同一個Interface,但每一個Class卻執(zhí)行不同的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上拖曳一個矩形區(qū)域,選擇區(qū)域內(nèi)的元素SpatialReference屬性:設(shè)置圖形元素的空間參考??臻g參考是一個圖形能夠在一定范圍內(nèi)正確顯示所必須設(shè)置的屬性。 對象模型圖ArcMap OMD5.4 Element對象Element對象是一個非常龐大復(fù)雜的對象集合如圖 ,它主要分為兩大部分:圖形元素(GraphicElement)和框架元素(Frame Elem
12、ent)。圖形元素可以被放在頁面視圖或地圖上,但框架元素只能放在頁面視圖上,如地圖標(biāo)題是放置于頁面版面設(shè)計上的一個文本元素。IElement是所有圖形元素(GraphicElement)和框架元素(Frame Element)都實現(xiàn)的接口,通過IElement接口可以確定Element對象的Geometry屬性,同時IElement接口也提供了用于查找和繪制元素的方法。Element是抽象類,開發(fā)中必須明確指定使用的Element類型。IElement和ILineElement, ITextElement等并不是父子關(guān)系, 后者沒有Geometry屬性,只有IElement有Geometry屬
13、性。圖例元素(Elements)有一些可以創(chuàng)建的對象圖形元素的種類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是最簡單的圖形元素。在數(shù)據(jù)視圖或布局視圖上表現(xiàn)為線和點(diǎn)的形式。ILineElement接口的Symbol屬性設(shè)置線的符號。 IMarkerElement接口的Symbol屬性設(shè)置點(diǎn)的符號。以LineElement為例,把它添加到視圖需要兩個接口IElement和ILineElement。IElement用于確定線元素的Geometry;ILineElement用于確定Symbol。注意:Symbol與Geometry不能混用。LineElement元素只能使用Line或Polyine作為
15、Geometry,使用通過LineSymbol類型作為Symbol;MarkerElement使用的是Marker類型的Symbol和點(diǎn)作為它的Geometry 。要將圖形元素顯示在視圖的一般步驟如下:產(chǎn)生一個新的元素對象; 確定元素顯示時使用的Symbol(符號)和Geometry(幾何形體對象); 使用IGraphicsContainer:AddElement方法把元素添加到視圖中; 刷新視圖,顯示添加的元素。例子: 創(chuàng)建一個新的圖形元素并設(shè)置它的符號IMarkerElement pMarkerElement;pMarkerElement = new MarkerElementClass(
16、); /創(chuàng)建一個新的元素ISimpleMarkerSymbol pMarkerSym;pMarkerSym = new SimpleMarkerSymbolClass(); /創(chuàng)建新符號pMarkerSym.Style = esriSimpleMarkerStyle.esriSMSCircle /指定符號的樣式(風(fēng)格)pMarkerSym.Color = getRGB(255,0,0); /用函數(shù)設(shè)置符號的顏色為紅色 /并把顏色賦給符號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方法:指定坐標(biāo)點(diǎn)建立PointpElement.Geometry = pPoint;把一個元素添加到 map (或者 layoutpage)使用 IGraph
18、icsContainer : AddElement指定添加的元素和它的序號0號的序號是第一個(最頂部)的元素,序號從頂?shù)降字饾u增加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也稱包絡(luò)線(bounding box),是一個矩形區(qū)域。定義了一個要素(feature)的空間范圍,是每個幾何體的最小外接矩形所有的幾何對象都有Envelop屬性主要接口 IEnvelope,CenterAt方法:通過改變Envelope的中心點(diǎn)來移動Envelope;PutCoords方法:指定坐標(biāo)點(diǎn)建立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 對象(組建類)地圖的標(biāo)注有兩種形式:一種是保存在地理數(shù)據(jù)庫中以標(biāo)注類的形式存在,另一種是使用文字元素。TextElement 對象實現(xiàn)了ITextElement接口,提供了3個屬性;.ScaleText屬性 設(shè)置TextElement的文字尺寸.Text屬性 設(shè)置TextElement的字符.Symbol屬性 設(shè)置TextElement的文字符號 /設(shè)置字體(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 /設(shè)置文本元素 ITextElement pTextElement = new TextElementClass(); pTextElement.Text = 我的地圖; pTextElement.ScaleText = 30; pTextElement.Symbol = pTextSymbol;FillShapeElement對象(抽象類)FillshapeElement是抽象類,它的子類有:R
26、ectangleElement (矩形要素); CircleElement (圓形要素);EllipseElement (圓形要素);PolygonElement (多邊形要素);這些對象的共同特點(diǎn)是它們的Geometry屬性都是一個二維的封閉圖形。FillShapeElement類實現(xiàn)了IFillShapeElement接口,通過接口提供的Symbol屬性設(shè)置元素的樣式,Symbol必須是IFillSymbol對象。 /產(chǎn)生一個線符號 ISimpleLineSymbol pSimpleLineSymbol; pSimpleLineSymbol.Color = getRGBColor(255,
27、 0, 0); pSimpleLineSymbol.Width = 2; /設(shè)置填充符號屬性 ISimpleFillSymbol pSimpleFillSymbol; pSimpleFillSymbol.Color = getRGBColor(255, 100, 80); pSimpleFillSymbol.Outline = pSimpleLineSymbol; pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid; /設(shè)置填充元素符號屬性 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對象可以將多個元素編為一組作為一個實體使用。如果用戶需要對多個要素進(jìn)行相同的操作,如同時移動多個要素的時候,可以將它們編為一組。GroupElement類實現(xiàn)IGroupElement接口,它定義了操作GroupElement的方法和屬性。AddElement方
30、法:把一個元素添加到GroupElements對象中,ClearElements: 清空GroupElement中的所有元素;DeleteElement;ElementCount:返回GroupElement中的元素數(shù)目。PictureElement對象(抽象類)該對象有7個子類,如BmpPictureElement, GifPictureElement JpgPictureElement TifPictureElement EmfPictureElement,它們分別用于往版式視圖中插入bmp, gif,Jpg,tif和emf文件。每個子類都實現(xiàn)的接口IPictureElement,使用它可
31、以用于操作一個圖片元素。5.4.2 框架元素(Frame Element)框架元素(Frame Element)包括:MapElement,MapSurrundFrame,OleFrame和TableFrame等,作為不可見的容器存在。所有的框架元素都實現(xiàn)IFrameElment接口;MapFrame對象是Map的容器,用于管理Map對象;實現(xiàn)IMapFrame接口,CreateSurroundFrame方法:獲得一個MapSurroundFrame對象。MapSurroundFrame對象是MapSorrund的容器,是一種用于管理MapSorrund對象的框架元素,該對象包括比例尺,比例文
32、本,指北針,圖例等 ; MapSorrund對象自動與某個地圖對象關(guān)聯(lián),隨著地圖視圖的變化而變化。 MapSurroundFrame對象實現(xiàn)IMapSurroundFrame接口。每個MapSurroundFrame對象都與一個MapFrame相聯(lián)系,如果MapFrame被刪除,與其相連的MapSurroundFrame對象都繪被刪除??蚣茉谾rameElement屬于 PageLayout 的附屬M(fèi)apSurroundFrame elementsMapSurrounds對象的容器 (e.g., Scalebars)內(nèi)容動態(tài)更新MapSurroundFrameMapSurround5.5 M
33、apSurround 對象 (地圖整飾對象)MapSurround指圖例,北針、比例尺、比例文本等對象;MapSurround 對象并不是簡單的圖形,而是直接和地圖動態(tài)連接。它與一個地圖對象關(guān)聯(lián)的用于修飾地圖的輔助圖形元素對象如圖所示。它的形狀或內(nèi)容會隨著Map 屬性的變化而自動改變。MapSurround并不是直接被加入到頁面布局中去的,而是被加入到某一特定類型的框架元素中,這一框架元素稱為MapSurroundFrame。如Map 視圖范圍改變后比例尺(ScaleBar)也會自動調(diào)整比例,比例尺文本(ScaleBarText)也會相應(yīng)改變它的比例值。MapSurround 對象由MapSu
34、rroundFrame 對象管理,所有的MapSurround 對象添加在布局視圖上。所有的MapSurround 對象都實現(xiàn)IMapSurround 接口:IMapSurround :Name 屬性: 獲得MapSurround 對象的名稱;IMapSurround :FitToBound 方法: 設(shè)置一個MapSurround 對象的大小。圖例Ledend圖例對象圖例Legend是一個與Map對象中圖層的渲染相關(guān)的對象,通過渲染對象在地圖上產(chǎn)生專題地圖。Legend類主要實現(xiàn)ILegend接口,提供獲得和修改屬性的屬性與方法:AddItem 添加圖例;ClearItems:清除圖例;Aut
35、oAdd為true時,Map對象加入新圖層后,與Map關(guān)聯(lián)的圖例對象會響應(yīng)Map圖層變化,增加一個條目。MakerNorthArrow指北針對象MakerNorthArrow指北針(組建類):繼承NorthArrow抽象類,用于指示地圖空間方位的圖形,是一個MapSurround對象。該對象實現(xiàn)了兩個接口:IMarkerNorthArrow 和INorthArrow;IMarkerNorthArrow:設(shè)置指北針對象的一般屬性,如顏色,尺寸和位置等;INorthArrow:定義一個屬性MarkSymbol ,用于設(shè)置指北針的符號;ScaleBar 比例尺對象地圖上的圖形與現(xiàn)實空間地物之間存在著
36、一定的比例關(guān)系,通過比例尺來說明地圖上的單位長度,代表著現(xiàn)實世界的實際長度。ScaleBar對象是一種MapSurround對象,該類泛化出多個子類,如ScaleLine,AlternatingScaleBar(交替雙刻度比例尺),DoubleAlternatingScaleBar,HollowScalbar等,這些類都實現(xiàn)了IScaleBar和IScaleMarks接口。IScaleBar接口的屬性介紹: Division:設(shè)置比例尺的分割單位; DivisionsBeforeZero:設(shè)置比例尺原點(diǎn)左側(cè)顯示的段數(shù); Divisions:設(shè)置比例尺的總段數(shù)(包括原點(diǎn)左側(cè)的段數(shù)); Subdivisions:設(shè)置主比例尺分為幾個子段; Units:設(shè)置比例尺的單位; UnitLabel:String型,設(shè)置單位標(biāo)簽上的內(nèi)容; UnitLabelPosition:設(shè)置單位標(biāo)簽顯示的位置; LabelPosition:比例尺數(shù)字標(biāo)簽的顯示位置; LabelFrequency:比例尺數(shù)字標(biāo)簽的風(fēng)格 ScaleText 比例尺文本比例尺文本對象,顯示明確的比例數(shù)值,它是一個文本元素,顯示的比例隨著地圖比例尺的變化而變化。該類實現(xiàn)了IScaleText接口,定義了文本的屬性和方法,如Symbol和text等。text屬性用來獲取比例文本的字符;ArcEngine地圖整
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 提高品牌關(guān)注度擴(kuò)大市場影響力計劃
- 如何引導(dǎo)品牌發(fā)展的未來方向計劃
- 行業(yè)動態(tài)分析與趨勢預(yù)測計劃
- 疫情期間的應(yīng)對措施與總結(jié)計劃
- 行為規(guī)范與獎懲機(jī)制建立計劃
- 與書友共成長拓展幼兒園小班的閱讀興趣計劃
- 促進(jìn)師生互動的班級活動設(shè)計計劃
- 火災(zāi)煙霧中的自救技能培訓(xùn)
- 搪陶之美:科技與藝術(shù)的交融-瓷藝制品工藝詳解與應(yīng)用領(lǐng)域探索
- 2022年高考語文作文的題目預(yù)測及相應(yīng)范文
- 部編版全國小學(xué)語文優(yōu)質(zhì)課一等獎《秋天》完美版課件
- 兒童脛腓骨骨折課件
- 數(shù)學(xué)與應(yīng)用數(shù)學(xué)中英文外文翻譯文獻(xiàn)
- 第二單元復(fù)習(xí)(教案)部編版語文二年級上冊
- 2018年全國統(tǒng)一施工機(jī)械臺班費(fèi)用定額
- 2023纖維復(fù)合材料修復(fù)加固邊坡支擋結(jié)構(gòu)技術(shù)規(guī)程
- 幼兒園消防演練活動總結(jié)講話(5篇)
- 智慧農(nóng)業(yè)智慧水稻項目規(guī)劃設(shè)計方案
- 攝影攝像構(gòu)圖技法課件
- 胃潰瘍健康宣教
- 黑龍江龍煤雙鴨山礦業(yè)有限責(zé)任公司雙陽煤礦重大瓦斯爆炸事故專項風(fēng)險辨識評估報告
評論
0/150
提交評論