版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、GIS 應(yīng) 用 開 發(fā)Developing GIS Applications with ArcObjects using C#.NET江西省研究生優(yōu)質(zhì)課程 主講:蘭小機(jī) GIS博士、教授 Email : landcom8835@163.com QQ :305333315
2、 課件: ftp://218.87.136.94/,蘭小機(jī)簡歷,蘭小機(jī),男,1965年12月生,博士,教授,碩士生導(dǎo)師,江西省百千萬人才工程人選,江西省高校中青年學(xué)科帶頭人,江西省優(yōu)秀研究生指導(dǎo)教師 ;地理學(xué)學(xué)科帶頭人、負(fù)責(zé)人。主要經(jīng)歷1988年7月畢業(yè)于南方冶金學(xué)院工程測量專業(yè),獲學(xué)士學(xué)位,并留校任教1994年6月畢業(yè)于武漢測繪科技大學(xué)工程測量專業(yè),獲碩士學(xué)位,回校任教2005年6月畢業(yè)于南京師范大學(xué)地圖學(xué)與地理
3、信息系統(tǒng)專業(yè),獲理學(xué)博士學(xué)位,回校任教,,主要研究方向GIS應(yīng)用開發(fā)物聯(lián)網(wǎng)、無線傳感器網(wǎng)絡(luò)與GIS分布式并行計(jì)算環(huán)境下空間數(shù)據(jù)的存儲(chǔ)管理空間數(shù)據(jù)庫理論與空間數(shù)據(jù)挖掘,在研項(xiàng)目,江西省安監(jiān)局科技項(xiàng)目--江西省重大危險(xiǎn)源在線監(jiān)控及應(yīng)急救援信息系統(tǒng),150萬元,主持國家自然科學(xué)基金項(xiàng)目--面向GML的時(shí)空關(guān)聯(lián)規(guī)則及序列模式挖掘研究(編號(hào):40971234) ,35萬元,主持國家自然科學(xué)基金項(xiàng)目--本原GML空間數(shù)據(jù)庫理論及GMLG
4、IS與傳統(tǒng)GIS集成研究(編號(hào):40761017) ,16萬元,主持江西省自然科學(xué)基金項(xiàng)目--分布式海量GML 空間數(shù)據(jù)并行存取與處理關(guān)鍵問題研究,2萬元,蘭小機(jī)主持江西省教育廳科技項(xiàng)目--云計(jì)算環(huán)境下海量GML空間數(shù)據(jù)分布式存儲(chǔ)管理關(guān)鍵問題,2萬元,蘭小機(jī)主持萍鄉(xiāng)市基礎(chǔ)地理信息系統(tǒng)研究與開發(fā),22萬元,主持城市公眾地理信息服務(wù)系統(tǒng)研究與開發(fā),10萬元,主持,Chap. 3 使用ArcObjects控件編程(6學(xué)時(shí)),為了能夠
5、快速建構(gòu)一個(gè)具有GIS功能的獨(dú)立應(yīng)用程序,ArcGIS Engine為開發(fā)者提供了多個(gè)可視化的組件即控件,如 LicenseControl 、MapControl、PageLayoutControl、TOCControl、ToolbarControl和SymbologyControl等。 在VS .NET中使用ArcObjects,需要使用ESRI interop程序集,這些程序集在托管的.NET代碼和非托管的COM代碼之間起了橋梁
6、作用。ESRI interop程序集為ArcGIS控件提供了能夠位于.NET窗體上的控件(繼承自AxHost類),這些控件名前綴為“Ax”,如AxMapControl、AxPageLayoutControl、AxTOCControl和AxToolbarControl等。,,Using ArcGIS Engine controls in Winforms Using ArcGIS Engine Controls in WPF,本章內(nèi)容
7、:,MapControl控件 PageLayoutControl控件TOCControl控件ToolbarControl及相關(guān)對象Control Commands(SymbologyControl in Chapter 6)在WPF程序中使用ArcGIS Engine控件,3.1 MapControl控件,MapControl對應(yīng)于ArcMap中的數(shù)據(jù)視圖,其主要功能為空間數(shù)據(jù)瀏覽、空間數(shù)據(jù)可視化、空間查詢、空間分析、空間數(shù)
8、據(jù)編輯等。在可視化環(huán)境中,可以通過控件的“屬性”頁設(shè)置控件的相關(guān)屬性,也可以通過編程來設(shè)置。,,MapControl是對Map對象的封裝,并提供了額外的屬性、方法、事件用于:管理控件的外觀、顯示屬性和地圖屬性;添加并管理控件中的數(shù)據(jù)層(data layers);裝載Map文檔(mxd)到控件中;從其它應(yīng)用程序拖放數(shù)據(jù)到控件中;使用鼠標(biāo)拉繪幾何形狀并繪制到屏幕顯示中。,3.1.1 MapControl的主要接口,MapCon
9、trol實(shí)現(xiàn)的主要接口有:IMapControlDefaultIMapControl2IMapControl3IMapControl4( new in 9.2 ) IMapControlEvents2事件接口ITOCBuddyIToolbarBuddy,3.1.1.1 IMapControlDefault接口,IMapControlDefault接口是地圖控件缺省接口,多數(shù)開發(fā)環(huán)境自動(dòng)使用這個(gè)接口定義的屬性、方法。由
10、于MapControl是一個(gè)自動(dòng)化控件,當(dāng)它被放到一個(gè)容器--如窗體上后,它會(huì)自動(dòng)產(chǎn)生一個(gè)被稱為axMapControl1的對象,這個(gè)對象可以直接使用缺省接口定義的屬性和方法。這個(gè)接口也代表了控件最新版本的接口,MapControl當(dāng)前最新版本接口為IMapControl4.當(dāng)需要使用這個(gè)接口的時(shí)候,可以使用下面的代碼:IMapControlDefault pMapControl = axMapControl1.Object as
11、 IMapControlDefault;,IMapControl2.Extent:地圖的可視范圍;IMapControl2.FullExtent: 地圖中所有圖層的覆蓋范圍.,,3.1.1.2 IMapControl4接口,IMapControl4是任何一個(gè)與MapControl相關(guān)的任務(wù)的出發(fā)點(diǎn),如設(shè)置控件外觀,設(shè)置Map對象或控件的顯示屬性,添加或者管理圖層、地圖文檔,在控件上繪制圖形和返回Geometry等。目前,與IMap
12、ControlDefault一致。,IMapControl2,,IMapControl3接口繼承IMapControl2,并增加了以下8個(gè)屬性和一個(gè)方法:CustomProperty --object:使用該屬性關(guān)聯(lián)有用信息DocumentFilename --string):返回MapControl裝入的地圖文檔的文件名DocumentMap --string :返回MapControl最后裝入的地圖(Map)名稱KeyInt
13、ercept --int :返回或設(shè)置MapControl截取鍵盤按鍵信息,Object --object:返回潛在的MapControl控件,當(dāng)在VB.NET或C#.NET中使用IMapControl2時(shí),一定要使用Object屬性或者使用指定容器的代碼。因?yàn)閷τ?NET,真正的控件是被包裝于宿主對象里面的。ShowMapTips --bool:確定是否顯示地圖的Map TipsTipDelay --int :設(shè)置Map Tips
14、的延遲時(shí)間TipStyle --esriTipStyle :設(shè)置Map Tips的顯示樣式SuppressResizeDrawing ():在控件尺寸發(fā)生變化過程中,阻止數(shù)據(jù)實(shí)時(shí)重繪,與IMapControl3相比,IMapControl4多了以下兩個(gè)可讀寫屬性:public bool AutoKeyboardScrolling {get; set;}:確定是否使用鍵盤上的‘Home’ (keyCode 36)鍵、‘End’ (
15、keyCode 35) 鍵、‘Page Down’ (keyCode 34) 鍵、‘PageUp’ (keyCode 33) 鍵和箭頭鍵 (keyCode 37-40) 來平移控件中的地圖,缺省情況下該屬性為true. 絕大多數(shù)開發(fā)環(huán)境使用箭頭鍵來切換窗體或容器中的焦點(diǎn)控件;在這些開發(fā)環(huán)境中,缺省情況下MapControl 不會(huì)接收箭頭鍵來平移地圖的顯示。為確保箭頭鍵能夠被MapControl接收并平移地圖的顯示,KeyInterce
16、pt屬性應(yīng)設(shè)置為攔截箭頭鍵(esriKeyInterceptArrowKeys),且AutoKeyboardScrolling設(shè)置為true。,,public bool AutoMouseWheel {get; set;}:確定鼠標(biāo)滾輪是否用于縮放地圖的顯示;缺省情況下該屬性為true。,引用控件本身,當(dāng)使用IMapControl2接口時(shí):IMapControl2 pMapControl = axMapControl1.Object
17、as IMapControl2;或IMapControl2 pMapControl = axMapControl1. GetOcx() as IMapControl2;當(dāng)使用IMapControl3接口時(shí):IMapControl3 pMapControl = axMapControl1.Object as IMapControl3;或IMapControl3 pMapControl = axMapControl1. GetOc
18、x() as IMapControl3;,當(dāng)使用IMapControl4接口時(shí):IMapControl4 pMapControl;pMapControl = axMapControl1.Object as IMapControl4;或pMapControl = axMapControl1. GetOcx() as IMapControl4;,使用箭頭鍵、鼠標(biāo)滾輪實(shí)現(xiàn)地圖導(dǎo)航,使用箭頭鍵平移(Panning)地圖axMapCon
19、trol1.KeyIntercept = (int) esriKeyIntercept.esriKeyInterceptArrowKeys;axMapControl1.AutoKeyboardScrolling=true;使用鼠標(biāo)滾輪縮放地圖axMapControl1.AutoMouseWheel = true;,axMapControl1.KeyIntercept = (int) esriKeyIntercept.esriKey
20、InterceptArrowKeys;AutoKeyboardScrolling=true;,3.1.1.3 IMapControlEvents2接口,IMapControlEvents2是一個(gè)事件接口,它定義了 MapControl能夠處理的全部事件,如 OnExtentUpdated是地圖的 Extent(可視范圍)屬性發(fā)生變化時(shí)觸發(fā)的事件, OnAfterscreenDraw是繪屏結(jié)束后觸發(fā)的事件等。 當(dāng)?shù)貓D的覆蓋范圍變化時(shí),
21、觸發(fā)OnFullExtentUpdated 事件,例如,往地圖中新增加一個(gè)圖層,其覆蓋范圍大于原圖的范圍。???,,在絕大多數(shù)開發(fā)環(huán)境中,沒有必要手工編寫代碼進(jìn)行事件的注冊,而只需在控件的屬性窗口中雙擊某事件自動(dòng)進(jìn)行事件與其處理方法的關(guān)聯(lián)。,3.1.1.5 ITOCBuddy,該接口定義了以下2個(gè)方法:GetActiveView Returns the underlying object implementing basic map
22、 and ActiveView. This is used to populate the TOC. GetScale Returns the scale of the supplied BasicMap, this allows for objects that do not support IMap.,3.1.1.6 IToolbarBuddy,Objects that implement the IToolbarBuddy i
23、nterface can be passed to the IToolbarControl.SetBuddyControl method. The CurrentTool is the tool used to interact with the display area of the IToolbarControl.Buddy.,Samples:MapAndPageLayoutSynchAppMapControlMa
24、pTipsMapControlGeoEventsMapControlDrawTextMapControlCADViewerMapControlSaveLayerFile,Guid.ToString (string format )命名空間:System;程序集:mscorlibformat 一個(gè)單格式說明符,它指示如何格式化此 Guid 的值。format 參數(shù)可以是“N”、“D”、“B”或“P”。,3.1.2 MapCo
25、ntrol控件與MXD文件,MapControl控件可以“鏈接”或“包含”地圖文檔。對于文檔文件,MapControl控件可以直接使用LoadMxFile方法來載入,這是最簡單的方法。除此之外,可以使用IMapDocument接口定義的屬性和方法來加載一個(gè)MXD文件。,下面是一個(gè)載入文檔的例子--axMapControl1.LoadMxFile,private void LoadMapDocument(){System.Windo
26、ws.Forms.OpenFileDialog openFileDialog2;openFileDialog2 = new OpenFileDialog();openFileDialog2.Title = "Open Map Document";openFileDialog2.Filter = "Map Documents (*.mxd)|*.mxd";openFileDialog
27、2.ShowDialog();string sFilePath = openFileDialog2.FileName; if (axMapControl1.CheckMxFile(sFilePath)) {axMapControl1.LoadMxFile(sFilePath, 0,Type.Missing);} else {MessageBox.Show(sFilePath + &quo
28、t; is not a valid ArcMap document"); return;} },,在ArcMap中使用的地圖文檔對象為MxDocument,其主要接口是IMxDocument;在使用控件開發(fā)的獨(dú)立應(yīng)用程序中,使用的地圖文檔對象為MapDocument ,其主要接口是IMapDocument。IMapDocument接口定義了操作和管理文檔對象的方法和屬性。MapDocument類
29、能夠封裝地圖文檔文件,如mxd、mxt和pmf等,它也可以封裝 一個(gè)圖層文件(*.lyr)。使用這個(gè)對象可以獲取和更新一個(gè)文檔的內(nèi)容,設(shè)置文檔文件的讀、寫屬性,保存一個(gè)文檔文件(*.mxd)。,IMxDocument 與IMapDocument,,IApplication的屬性、方法,IMxDocument. ActivatedView與 ActiveView 屬性在ArcMap的布局視圖(layout view)狀態(tài)下,圖形元素可以
30、添加到頁面布局(PageLayout)或焦點(diǎn)地圖(focus Map)的圖形元素容器(graphics container )中;這時(shí), IMxDocument.ActiveView 屬性與IMxDocument.ActivatedView 屬性不同, ActiveView 屬性引用PageLayout 對象, ActivatedView屬性引用焦點(diǎn)地圖對象(如果該地圖對象處于活動(dòng)狀態(tài)) 。在ArcMap的數(shù)據(jù)視圖(data view
31、)狀態(tài)下, ActiveView 與ActivatedView屬性都引用焦點(diǎn)地圖對象。,IMapDocument m_MapDocument = new MapDocumentClass();private void LoadMapDoc(){ OpenFileDialog openFileDialog2 = new OpenFileDialog();openFileDialog2.Title = &quo
32、t;Open Map Document";openFileDialog2.Filter = "Map Documents (*.mxd)|*.mxd";openFileDialog2.ShowDialog();string sFilePath = openFileDialog2.FileName; If(m_MapDocument.get_IsMapDocument(sFilePath)){
33、 m_MapDocument.Open(sFilePath, ""); axMapControl1.Map = m_MapDocument.get_Map(0); axMapControl1.Refresh(); }},public void Open ( string sDocument, string bsPassword);,public bool get_IsMapDocum
34、ent (string sDocument);,private void SaveDocument(){ if (m_MapDocument.get_IsReadOnly(m_MapDocument.DocumentFilename) == true) { MessageBox.Show("This map document is read only!");return;}m_MapDocu
35、ment.Save(m_MapDocument.UsesRelativePaths,true);MessageBox.Show("Changes saved successfully!");},public void Save ( bool bUseRelativePaths, bool bCreateThumnbail);,,3.1.3 鼠標(biāo)與控件的交互,用鼠標(biāo)和地圖控件進(jìn)行交互是最常用的操作,例如改變
36、地圖顯示范圍、移動(dòng)地圖,在控件上繪制幾何圖形等。,使用鼠標(biāo)拖曳確定地圖顯示的范圍(拉框放大),private void axMapControl1_OnMouseDown (object sender, ESRI.ArcGIS.MapControl.IMapControlEvents2_OnMouseDownEvent e){ //改變地圖控件顯示范圍為當(dāng)前拖曳的區(qū)域 axMapControl1.Extent = a
37、xMapControl1.TrackRectangle(); //刷新地圖axMapControl1.Refresh(esriViewDrawPhase.esriViewGeography, null, null);},public void Refresh ( esriViewDrawPhase phase, object layerOrElement, &
38、#160; object envelope );,移動(dòng)、旋轉(zhuǎn)地圖,在 MapControl中有一種更簡單便利的方法pan()來移動(dòng)其中的地圖。下面的方法使用在MapControl控件的OnMoseDown事件中: axMapControl1.pan(); axMapControl1.Rotation = 45;,在 MapControl控件中繪制圖形,MapControl控件提供了直接在控件上
39、繪制圖形和文字的方法DrawShape與DrawText,這兩種繪制方法繪制的圖形都是緩存(cache),而不能真正保存,一旦窗口重繪,這些圖形就將消失。,private void axMapControl1_OnMouseDown (object sender, ESRI.ArcGIS.MapControl.IMapControlEvents2_OnMouseDownEvent e){//產(chǎn)生拖曳多邊形,并繪制
40、IGeometry pGeom = axMapControl1.TrackPolygon();DrawMapShape(pGeom); //刷新地圖//axMapControl1.Refresh(esriViewDrawPhase.esriViewGeography, null, null);},private void DrawMapShape (IGeometry pGeom) {IRgbColor
41、 pColor;pColor = new RgbColorClass();pColor.Red = 220;pColor.Green = 112;pColor.Blue = 60;//新建一個(gè)繪制圖形的填充符號(hào)ISimpleFillSymbol pFillsyl;pFillsyl = new SimpleFillSymbolClass();pFillsyl.Color = pColor;object
42、oFillsyl = pFillsyl;axMapControl1.DrawShape(pGeom, ref oFillsyl); },public void DrawShape ( IGeometry Shape, ref object symbol );,3.1.4 數(shù)據(jù)選擇,在MapControl控件中用戶可以很方便地使用SelectByShape方法來構(gòu)造一個(gè)基于Map的選
43、擇集。SelectByShape()方法選擇控件中所有圖層上處于選擇范圍內(nèi)的要素,并將其設(shè)置為一個(gè)選擇集。,private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e){//產(chǎn)生拖曳多邊形IGeometry pGeom = axMapControl1.TrackPolygon(); axMapCo
44、ntrol1.Map.SelectByShape(pGeom, null, false); axMapControl1. Refresh(esriViewDrawPhase.esriViewGeoSelection,null,null); },,清除選擇集的方法 axMapControl1.Map.Clearselection(); axMapControl1.
45、ActiveView.Refresh();,3.1.5 實(shí)現(xiàn)鷹眼功能,,這個(gè)例子中有兩個(gè)AxMapControl控件:主控件axMapControl1和鷹眼控件axMapControl2. 要實(shí)現(xiàn)鷹眼功能,關(guān)鍵有兩點(diǎn):一是如何讓兩個(gè)控件顯示的數(shù)據(jù)保持一致,另一點(diǎn)是如何繪制鷹眼控件中的顯示方框。,兩個(gè)控件的數(shù)據(jù)共享,private void axMapControl1_OnMapReplaced (object sender, IMap
46、ControlEvents2_OnMapReplacedEvent e){ IMap pMap;pMap = axMapControl1.Map; int i ;for( i = 0; i<= pMap.LayerCount - 1;i++) { axMapControl2.Map.AddLayer(pMap.get_Layer(i)); } },繪制鷹眼控件中的顯示
47、方框,主窗體視圖的范圍發(fā)生變化后,會(huì)觸發(fā)控件的OnExtentUpdated事件,繪制方框的方法就在這個(gè)事件中進(jìn)行:private void axMapControl1_OnExtentUpdated(object sender, IMapControlEvents2_OnExtentUpdatedEvent e) { ……. },3.2 PageLayoutControl控件,PageLayo
48、utControl對應(yīng)于ArcMap中的布局視圖(Layout View),它封裝了PageLayout對象,提供了在布局視圖中控制地圖元素的屬性和方法。 PageLayoutControl控件用于制圖,它可以方便地操作各種元素對象,以產(chǎn)生一幅制作精美的地圖對象。與MapControl控件相似,PageLayoutControl控件并不僅僅只是包含了一個(gè)PageLayout對象,它也擁有許多附加的事件、屬性和方法。,頁面布局(通常簡稱
49、為布局)是在頁面上編排和組織的地圖元素的集合,旨在用于地圖的排版設(shè)計(jì)、打印等。布局中排布的常見地圖元素包括一個(gè)或多個(gè)數(shù)據(jù)框(每個(gè)數(shù)據(jù)框都含有一組有序的地圖圖層)、比例尺、指北針、地圖標(biāo)題、描述性文本和符號(hào)圖例。打印機(jī)、頁面布局、大小、單位,,,數(shù)據(jù)驅(qū)動(dòng)頁面根據(jù)地圖文檔的某個(gè)要素圖層或規(guī)則格網(wǎng)將地圖分割為多個(gè)部分,然后為每個(gè)部分生成一個(gè)相應(yīng)的頁面。,創(chuàng)建數(shù)據(jù)驅(qū)動(dòng)頁面,,,PageLayoutControl控件同樣實(shí)現(xiàn)了多個(gè)接口IPa
50、geLayoutControlDefaultIPageLayoutControlIPageLayoutControl2IPageLayoutControl3 (New in 9.2)IPageLayoutControlEvents,,,IPageLayoutControl3,,Samples:PageLayoutControlLoadMapDocumentPageLayoutControlCopyFocusMapPageL
51、ayoutControlOverviewPageLayoutControlPageAppearancePageLayoutControlPrintPreviewPageLayoutControlPrinting,3.2.1 PageLayoutControl操作 MXD文件,在AxPageLayoutControl控件對MXD文件的操作,與MapControl類似。public void LoadMxFile ( string
52、 fileName, object password );,下面是在PageLayout控件中打開一個(gè)MXD文件的方法:,private void OpenMapDocument(){IMapDocument m_MapDocument = new MapDocumentClass();OpenFileDialog openFileDialog1;openFileDialog1 = new OpenFileDi
53、alog();openFileDialog1.Title = "Open Map Document";openFileDialog1.Filter = "Map Documents (*.mxd)|*.mxd";openFileDialog1.ShowDialog();string sFilePath = openFileDialog1.FileName; m_Ma
54、pDocument.Open(sFilePath, "");axPageLayoutControl1.PageLayout = m_MapDocument.PageLayout;axPageLayoutControl1.Refresh();},private void SaveDocument() { //Check that the document is not read only. if
55、 (m_MapDocument.get_IsReadOnly(m_MapDocument.DocumentFilename) == true) { MessageBox.Show("This map document is read only!"); return; } //Save with the current relative path setting. m_M
56、apDocument.Save(m_MapDocument.UsesRelativePaths, true); MessageBox.Show("Changes saved successfully!"); },private void cmdSaveAs_Click(object sender, System.EventArgs e){ //Open a file dialog for saving ma
57、p documents. saveFileDialog1.Title = "Save Map Document As"; saveFileDialog1.Filter = "Map Documents (*.mxd)|*.mxd"; saveFileDialog1.ShowDialog(); string sFilePath = saveFileDialog1.FileName;
58、 if (sFilePath == “”) return; if (sFilePath == m_MapDocument.DocumentFilename) { //Save changes to the current document. SaveDocument(); } else { //SaveAs a new document with relative pat
59、hs. m_MapDocument.SaveAs (sFilePath, true, true); //Open the document. OpenDocument((sFilePath)); MessageBox.Show("Document saved successfully!"); } },3.2.2
60、PageLayout與MapControl聯(lián)動(dòng),在ArcMap程序中,數(shù)據(jù)視圖和布局視圖中的數(shù)據(jù)改變是實(shí)時(shí)互動(dòng)的。在使用ArcObjects控件開發(fā)的獨(dú)立程序中實(shí)現(xiàn)這個(gè)功能,由于MapControl、 PageLayoutControl兩個(gè)控件本身并不能自動(dòng)實(shí)時(shí)互動(dòng),用戶只能夠通過拷貝的方法來實(shí)時(shí)傳遞兩個(gè)控件的內(nèi)容。Sample: MapAndPageLayoutSynchApp,3.3 TOCControl控件,TOCContr
61、ol控件概述ITOCControl與ITOCControl2ITOCControlEvents應(yīng)用開發(fā)實(shí)例,3.3.1 TOCControl控件概述,TOCControl要與一個(gè)“伙伴控件” 協(xié)同工作。“伙伴控件”可以是MapControl、PageLayoutControl、SceneControl或GlobeControl。TOCControl用“伙伴控件”來顯示其地圖、圖層和符號(hào)體系內(nèi)容的一個(gè)交互式樹視圖,并保持其內(nèi)容
62、與“伙伴控件”同步。例如,如果 “伙伴控件”是一個(gè)MapControl,而且從該MapControl中刪除了一個(gè)圖層,則該圖層也會(huì)從TOCControl中刪除。同樣地,如果終端用戶與TOCControl交互并取消了某個(gè)圖層的Visibility復(fù)選框,則該圖層在MapControl中不再可見。,TOCControl的“伙伴控件”可以在設(shè)計(jì)時(shí)通過TOCControl屬性頁設(shè)置或用SetBuddyControl方法通過編程設(shè)置。TOCCo
63、ntrol的主要接口有:ITOCControl 、 ITOCControl 2、ITOCControlEvents,3.3.1.1 ITOCControl與ITOCControl2,ITOCControl接口是任何與TOCControl有關(guān)的任務(wù)的出發(fā)點(diǎn),如設(shè)置控件的外觀,設(shè)置伙伴控件,管理圖層的可見性和標(biāo)簽的編輯。,ITOCControl,LabelEdit 、 LayerVisibilityEdit :Label 、Visibil
64、ity editing state. esriTOCControlAutomaticesriTOCControlManual,在C#.NET環(huán)境中,當(dāng)查詢接口到ITOCControl 或ITOCControl2時(shí),必須使用Object屬性或者容器指定代碼。 ITOCControl pTOCControl;pTOCControl = axTOCControl1.Object as ITOCControl; 或pTOCC
65、ontrol = axTOCControl1. GetOcx() as ITOCControl;,public void HitTest (int X, int Y, ref esriTOCControlItem ItemType, ref IBasicMap BasicMap, ref ILayer Layer, ref object Unk, ref object Data );用于獲取用戶在TOCControl中點(diǎn)擊的信相關(guān)息。
66、ItemType:TOCControl中項(xiàng)的類型,如none、map、layer、heading 或legend class.BasicMap:指定地圖 對象。Layer:ILayer 對象。Unk :ILegendGroup(圖例組,一個(gè)圖層可以有多種符號(hào)化方案)對象。Data:用戶點(diǎn)擊的圖例組中某個(gè)圖例的索引號(hào)(長整型);聯(lián)合使用圖例組Unk和這個(gè)索引號(hào),可以獲得用戶點(diǎn)擊的圖例(legend class);如果這個(gè)索引號(hào)為-
67、1,表明用戶點(diǎn)擊的是圖例中的標(biāo)題頭。,IBasicMap map = new MapClass();ILayer layer = new FeatureLayerClass();object other = new object();object index = new object();esriTOCControlItem item = new esriTOCControlItem();axTOCControl1.HitTe
68、st(e.x, e.y, ref item, ref map, ref layer, ref other, ref index);if (e.button == 1) //判斷用戶是否按了鼠標(biāo)左鍵 { if (layer == null) return; IFeatureLayer featureLayer = layer as IFeatureLayer; if (featureLayer =
69、= null) return; IGeoFeatureLayer geoFeatureLayer = (IGeoFeatureLayer) featureLayer;,ILegendClass legendClass = new LegendClassClass();ISymbol symbol = null;if (other is ILegendGroup && (int)index != -1)
70、 { legendClass = ((ILegendGroup)other).get_Class((int)index); symbol = legendClass.Symbol; }if (symbol == null) return; symbol = GetSymbolByControl(symbol);//彈出符號(hào)選擇對話框讓用戶選擇新的符號(hào)if (symbol == null) ret
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東理工大學(xué)-山東理工大學(xué)-研究生院
- 山東理工大學(xué)-研究生院
- - 長春理工大學(xué)研究生院
- 南京理工大學(xué)研究生院
- 華東理工大學(xué)研究生院
- 第2章-蘭州理工大學(xué)研究生院蘭州理工大學(xué)研究生部,蘭州
- 多核處理器-蘭州理工大學(xué)研究生院蘭州理工大學(xué)研
- 東華理工大學(xué)研究生院課程重修單
- 昆明理工大學(xué)研究生院黨委編
- 北京理工大學(xué)-成都體育學(xué)院研究生院
- 據(jù)浙江理工大學(xué)研究生院消息,2016年度浙江理工大學(xué)考研專業(yè)
- 孟德爾與現(xiàn)代遺傳學(xué)-蘭州理工大學(xué)研究生院蘭州理工大學(xué)
- 五、教學(xué)大綱 - 北京理工大學(xué)研究生院
- 推薦免試碩士研究生復(fù)試政審表 - 東華理工大學(xué)研究生院
- 第一章熱力學(xué)基礎(chǔ)-蘭州理工大學(xué)研究生院蘭州理工大學(xué)研究
- 附件2導(dǎo)師簡介.doc-北京理工大學(xué)研究生院
- 碩士學(xué)位論文寫作及答辯指南 - 山東理工大學(xué)-研究生院
- 江西理工大學(xué)研究生復(fù)試錄取政審表
- 北京理工大學(xué)研究生院關(guān)于全面修訂研究生培養(yǎng)方案的指導(dǎo)意見
- 專業(yè)課上課記錄表-安徽理工大學(xué)研究生院網(wǎng)站
評(píng)論
0/150
提交評(píng)論