gis二次開發(fā)地圖的組成.ppt_第1頁
gis二次開發(fā)地圖的組成.ppt_第2頁
gis二次開發(fā)地圖的組成.ppt_第3頁
gis二次開發(fā)地圖的組成.ppt_第4頁
gis二次開發(fā)地圖的組成.ppt_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四講 地圖的組成,王佳 34247763,主要內(nèi)容,地圖(Map) 圖層(Layer) 元素(Element),第一節(jié) 地圖(Map),地圖是GIS中的重要概念,也是GIS的應用中的成果,GIS的很多成果都是用地圖來說話的,當我們打開ArcMap程序后,首先看到的是數(shù)據(jù)視圖(ArcMap有兩種視圖,數(shù)據(jù)視圖和布局視圖) 我們看到的這個數(shù)據(jù)視圖其實就是一個Map對象。,在ArcMap中Map是由文檔對象控制的,每一個MXD的文檔文件中至少包含一個Map對象,但是在一個時刻,僅僅只能有一個Map處于使用狀態(tài),在程序中這樣的Map為“FocusMap”,每一個對象都用機會成為FocusMap。 IActiveView pActiveView = axMapControl1.ActiveView.FocusMap as IActiveView; 可以利用IMxDocument接口的maps屬性獲得可以操作文檔中的所有地圖對象集合。利用FocusMap屬性獲得焦點地圖。,在ArcMap中,可以顯示在Map中的數(shù)據(jù)有兩大類,也就是地理數(shù)據(jù)和圖形元素,空間數(shù)據(jù)是GIS分析制圖的數(shù)據(jù)源,保存在地理數(shù)據(jù)庫庫或者Shp文件中,圖形元素也是一種可以在Map上顯示的對象。他們兩個的共同特征是擁有一個geomtry屬性。,元素,是另一種可以顯示在Map上的對象,它分為兩部分一類是圖形元素,一類是框架元素,圖形元素可以顯示出來,而框架元素充當了“容器”的角色。在ArcMap中可以使用“Draw”工具在Map上直接繪制一個矩形,圓形,文本等對象。,在布局視圖上也可以給地圖添加指北針,圖例,比例尺等圖形對象,這些都是圖形元素,用于地圖制圖輸出。,Map對象深入理解: Map對象是由MxDocument對象通過MapFrame對象管理的,MapFrame對象是一種框架元素。 Map對象具有雙重身份,一方面是數(shù)據(jù)的管理容器,可以引入地理數(shù)據(jù)和可視化元素,扮演了一個數(shù)據(jù)管理器的角色;另一方面又是它可以讓用戶看到這些數(shù)據(jù),即扮演了數(shù)據(jù)顯示器的角色。 當我們程序員把地理數(shù)據(jù)加載到Map對象時,它是數(shù)據(jù)管理者;在刷新地圖、改變顯示范圍時,它就是一個數(shù)據(jù)顯示者。 Map 雙重身份!,地圖對象是地圖數(shù)據(jù)的容器,它由圖層和圖形數(shù)據(jù)組成。Map對象實現(xiàn)了眾多的接口,我們重點研究: Imap IActiveView IGraphicsContainer,IMap接口,該接口主要用于管理Map對象中的圖層對象,要素選擇集和空間參考等對象,IMap接口也往往是我們一個任務(wù)的起點。使用IMap接口,我們可以獲取這個Map對象中的圖層的個數(shù),可以添加圖層,刪除圖層,還可以利用IMap實現(xiàn)查詢的高亮顯示。,IMap接口,添加Shp圖層功能實現(xiàn)(AddLayer方法) 步驟: 1 利用OpenFileDialog 找到Shp圖層 2 創(chuàng)建工作空間工廠 3 打開要素類 4 創(chuàng)建要素圖層 5 關(guān)聯(lián)圖層和要素類 6 添加到地圖控件中,openFileDialog1 = new OpenFileDialog(); openFileDialog1.Title = “打開圖層文件“; openFileDialog1.Filter = “map documents(*.shp)|*.shp“; openFileDialog1.ShowDialog(); FileInfo fileInfo = new FileInfo(openFileDialog1.FileName); string pPath = openFileDialog1.FileName; string pFolder = System.IO.Path.GetDirectoryName(pPath); string pFileName = System.IO.Path.GetFileName(pPath); IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory(); IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(pFolder, 0); IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; IFeatureClass pFC = pFeatureWorkspace.OpenFeatureClass(pFileName); IFeatureLayer pFLayer =new FeatureLayer(); pFLayer.FeatureClass = pFC; pFLayer.Name = pFC.AliasName; ILayer pLayer = pFLayer as ILayer; IMap pMap = axMapControl1.Map; pMap.AddLayer(pLayer); axMapControl1.ActiveView.Refresh();,Imap接口,刪除Shp圖層功能實現(xiàn)(DeleteLayer方法) 步驟: 1 獲得當前地圖控件中的地圖 2 在地圖中獲得最上面的一個數(shù)據(jù)層 3 刪除數(shù)據(jù)層,IMap pMap = axMapControl1.Map; ILayer pLayer = pMap.get_Layer(0); pMap.DeleteLayer(pLayer);,Imap接口,AddLayers方法,不同于AddLayer方法一次添加一個對象到Map中, AddLayers可以一次加入一個或多個圖層,當然多個圖層對象要放到EnumLayer對象中才能引入, EnumLayer對象是一個圖層枚舉對象,可以保存多個圖層的指針。 ClearLayers方法,不同于DeleteLayer方法一次刪除一個圖層, ClearLayers可以一次清除Map對象中的所有圖層; LayerCount 屬性,指明這個Map對象中一共有多少個圖層對象,Imap接口,在添加地圖的過程中,第一個加入Map對象圖層是0號,第二個圖層是1號,依次類推,0號是放在圖層對話框中最上面,但是在地圖中實際是放在最下面。如果在一個Map中放入兩個polygon類型的圖層,會發(fā)現(xiàn)第一次加入的圖層被后一次加入的圖層所掩蓋。(ArcMap為例) 這樣層概念是GIS數(shù)據(jù)組織的一種有效形式。,IMap接口,在ArcMap中,使用“Select Features”工具在地圖上拖拽以后,被選中的要素將會高亮顯示,即使這些要素放在不同的圖層上。這個工具沒有什么限制,不管是點、線或者多邊形,它都可以同時選,IMap接口,被高亮顯示的要素稱為“FeatureSelection”(要素選擇集),程序有多種方式可以用于選擇要素,比如SelectByShape方法就是其中之一,IMap pMap = axMapControl1.Map; pActiveView = pMap as IActiveView; objEnvelope = axMapControl1.TrackRectangle(); ISelectionEnvironment pSelectionEnvironment = new SelectionEnvironment(); pMap.SelectByShape(objEnvelope,pSelectionEnvironment,false);,SelectByShape方法實現(xiàn)了ArcMap中“Select Features”命令的角色,它選擇Map里面所有處于拖拽范圍內(nèi)的Featurelayer的要素,無論是哪個圖層,他把選擇的要素添加到Map的FeatureSelection中。,IGraphicsContainer接口,Map對象可以顯示圖形元素(Element),它使用IGraphicsContainer接口來管理這些元素對象(包括圖形元素和框架元素)。,使用這個接口可以完成元素添加、更新和刪除元素的方法 添加元素是一個往其中一個圖形圖層上添加元素的對象的過程,如下代碼所示,IGraphicsContainer graphicsContainer; IMap map = this.axMapControl1.Map; ILineElement lineElement = new LineElementClass(); IElement element; IPolyline polyline = new PolylineClass(); IPoint point = new PointClass(); point.PutCoords(1,5); polyline.FromPoint = point; point.PutCoords(80,5); polyline.ToPoint = point; IElement element = lineElement as IElement;接口查詢! 其實沒有必要用lineElement,實際上也是繼承 element.Geometry = polyline as IGeometry; graphicsContainer = map as IGraphicsContainer; graphicsContainer.AddElement(element, 0); this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);(添加元素后一定要刷新,不然無法顯示),IGraphicsContainer接口,更新元素:用戶改變了是Map中一個元素的形狀或者符號,用戶一定希望它能夠及時更新后在地圖上顯示出來,用到UpdateElement,IGraphicsContainer graphicsContainer; IPolyline polyline = new PolylineClass(); IPoint point = new PointClass(); point.PutCoords(1, 5); polyline.FromPoint = point; point.PutCoords(80,20); polyline.ToPoint = point; IElement el; graphicsContainer = this.axMapControl1.Map as IGraphicsContainer; graphicsContainer.Reset(); el = graphicsContainer.Next(); if (el != null) el.Geometry = polyline; graphicsContainer.UpdateElement(el); this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);,IGraphicsContainer接口,刪除元素:DeleteElement用于刪除Map對象中的一個給定元素,IGraphicsContainer graphicsContainer; IElement el; graphicsContainer = this.axMapControl1.Map as IGraphicsContainer; graphicsContainer.Reset(); el = graphicsContainer.Next(); while (el != null) graphicsContainer.DeleteElement(el); el = graphicsContainer.Next(); this.axMapControl1.ActiveView.Refresh ();,IGraphicsContainer接口,選擇元素:Map對象提供了SelectByShape方法用于選擇要素,當然也提供了圖形元素選擇的方法,而且元素的選擇更為簡單,因為元素不保存到MXD文件前,都是存儲到緩存,只存在內(nèi)存中的,有兩種方法可以選擇元素 一是LocateElements方法,該方法是使用一個點來選擇元素,需要傳入一個點對象和容差值,Map對象會將所用處于點容差范圍內(nèi)的元素選擇到。 二是LocateElementsByEnvelope方法,它和SelectByShape方法類似,使用鼠標在圖上拖拽出一個矩形,從而選擇這個區(qū)域內(nèi)的所有元素。 當然元素既然可以選擇,也就有相應的選擇集,但是使用很少。,IActiveView接口,前面的兩個接口都是管理圖形的 而IActiveView接口定義了Map對象的另一個功能-數(shù)據(jù)顯示功能。使用該接口可以改變視圖的范圍,刷新視圖。 在ArcMap中,有兩個對象實現(xiàn)了這個接口,PageLayout和Map。這兩個對象分別代表了ArcMap中兩種不同的視圖,數(shù)據(jù)視圖和版式視圖,在任何一個時刻僅僅只能有一個視圖處于活躍狀態(tài)。 如果ArcMap處于版式視圖狀態(tài),則ActiveView返回一個IActiveView對象指向PageLayout對象的,反之,處于視圖狀態(tài),則指向Map對象。,IActiveView接口,IActiveView接口定義了Map對象的數(shù)據(jù)顯示功能。使用該接口可以改變視圖的范圍,刷新視圖。 IActiveView的PartialRefresh(esriViewGeography, pLayer, null)用于刷新指定圖層: IActiveView的PartialRefresh(esriViewGeography, null, null) 用于刷新刷新所有圖層: IActiveView的PartialRefresh(esriViewGeoSelection, null, null) 用于刷新所選擇的對象: IActiveView的PartialRefresh(esriViewGraphics, null, null) 用于刷新圖形元素: IActiveView的PartialRefresh(esriViewGraphics, pElement, null) 用于刷新指定圖形元素 IActiveView的PartialRefresh(esriViewGraphics, null, null) 用于刷新所有圖形元素 IActiveView的PartialRefresh(esriViewGraphicSelection, null, null)用于刷新所選擇的圖元,Extent屬性返回Map對象的當前視圖的范圍,是一個Envolope對象 FullExtent屬性可以返回視圖的全圖范圍,IGraphicsContainer接口,選擇元素:Map對象提供了SelectByShape方法用于選擇要素,當然也提供了圖形元素選擇的方法,而且元素的選擇更為簡單,因為元素不保存到MXD文件前,都是存儲到緩存,只存在內(nèi)存中的,有兩種方法可以選擇元素 一是LocateElements方法,該方法是使用一個點來選擇元素,需要傳入一個點對象和容差值,Map對象會將所用處于點容差范圍內(nèi)的元素選擇到。 二是LocateElementsByEnvelope方法,它和SelectByShape方法類似,使用鼠標在圖上拖拽出一個矩形,從而選擇這個區(qū)域內(nèi)的所有元素。 當然元素既然可以選擇,也就有相應的選擇集,但是使用很少。,第二節(jié) 圖層(Layer),Map對象可以裝載地理數(shù)據(jù),這些數(shù)據(jù)是以圖層的形式加載到地圖對象上的,圖層對象Layer作為一個數(shù)據(jù)的“中介”存在,它本身沒有轉(zhuǎn)載地理數(shù)據(jù),而僅僅是獲得了數(shù)據(jù)的引用,用于管理數(shù)據(jù)源的連接。地理數(shù)據(jù)始終保存在Geodatabase或者地理數(shù)據(jù)文件中。,ILayer接口,所有圖層類都實現(xiàn)這一接口,它定義了所有圖層的公共方法和屬性,如 Name屬性可以返回圖層名稱,MaximunScale和MinimunScale兩個可寫屬性,用于顯示和設(shè)置圖層可以出現(xiàn)的最大尺寸和最小尺寸。 Showtips屬性用于指示當鼠標放在圖層某個要素上的時候,是否會出現(xiàn)提示(Tips), TipText確定圖層可提示顯示的區(qū)域。SpatialReference屬性用于設(shè)置圖層的空間參考,這個對象是從Map對象中傳入,對于地理數(shù)據(jù)及其重要,IFeatureLayer接口,IFeatureLayer接口主要用于設(shè)置要素圖層的數(shù)據(jù)源(FeatureClass),IFeatureLayer的DataSourceType獲取FeatureLayer對象的數(shù)據(jù)源類型。此外通過IFeatureLayer的Search方法可以查詢要素圖層上符號某一條件的要素集。,IGeoFeatureLayer接口繼承了ILayer和IFeatureLayer兩個接口,用于控制要素圖層的符號化和標注等。 IGeoDataset接口僅有兩個屬性,它們用于管理地理要素集。Extent可以返回當前數(shù)據(jù)集的范圍,是一個IEnvelope類型的對象;SpatialReference屬性則可以讓用戶獲得這個數(shù)據(jù)集的空間參考。 IFeatureSelection接口提供管理一個圖層中的要素的選擇集的方法和屬性。,第三節(jié) 元素(Element),在Map對象和PageLayout對象顯示的數(shù)據(jù)除了地理數(shù)據(jù)之外,另一種即為元素數(shù)據(jù)。,圖形元素(GraphicElement)包LineElement, MarkerElement, TextElement,GroupElement,FillshapElement,PictureElement,MultiPatchElement等。它們都是作為圖形的形式而存在,在地圖視圖或PageLayout視圖上時可見的??蚣茉?Frame Element)包括 MapFrameElement, MapSurroundElement等它們是作為不可見的容器而存在的。 Map對象或者PageLayout對象可以通過IGraphicsContainer接口來管理這些元素,使用IGraphicsContainer接口可以添加,刪除和更新位于Map或PageLayout上的元素。使用GroupElement對象還可以將多個元素編組為單個實體來給用戶使用。,IElement是所有圖形元素(GraphicElement)和框架元素(Frame Element)都實現(xiàn)的接口,通過IElement接口可以確定Element對象的Geometry屬性,同時IElment接口也提供了用于查找和繪制元素的方法。Element是個抽象類,在開發(fā)中必須明確指定使用的Element的類型。另外IElement和ILineElement, ITextElement等并不是父子關(guān)系,后者沒有Geometry屬性。,要將圖形元素顯示到視圖中的步驟: 1 產(chǎn)生一個新的元素對象 2 確定元素顯示時使用的Symbol(符號)和Geometry(幾何圖形) 3 使用IGraphicsContainer 的AddElement方法添加到視圖中 4 刷新視圖,讓添加元素顯示出來,如何添加一個元素到視圖中,要將圖形元素顯示到視圖中的步驟: 1 產(chǎn)生一個新的元素對象 2 確定元素顯示時使用的Symbol(符號)和Geometry(幾何圖形) 3 使用IGraphicsContainer 的AddElement方法添加到視圖中 4 刷新視圖,讓添加元素顯示出來,如何添加一個元素到視圖中,要將圖形元素顯示到視圖中的步驟: 1 產(chǎn)生一個新的元素對象 2 確定元素顯示時使用的Symbol(符號)和Geometry(幾何圖形) 3 使用IGraphicsContainer 的Ad

溫馨提示

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

評論

0/150

提交評論