地理信息系統(tǒng)開發(fā)具體教程_第1頁
地理信息系統(tǒng)開發(fā)具體教程_第2頁
地理信息系統(tǒng)開發(fā)具體教程_第3頁
地理信息系統(tǒng)開發(fā)具體教程_第4頁
地理信息系統(tǒng)開發(fā)具體教程_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 地理信息系統(tǒng)開發(fā)具體教程一、基本控件的添加1.1.新建項目 文件->新建->項目->Windows窗體應(yīng)用1.2.修改標(biāo)題右擊窗體屬性->在Text中修改標(biāo)題名稱1.3.添加菜單欄 工具箱->菜單和工具欄->MenuStrip(將MenuStrip拖入到窗體內(nèi)) 依次添加子標(biāo)題如下:1.4.添加ToolStripContainer工具箱->菜單和工具欄-> ToolStripContainer 將ToolStripContainer拖入到窗體內(nèi),右擊屬性,Spring屬性設(shè)置為True,在添加一個Statuslabel,在屬性中的text修改名

2、稱1.5.添加SplitContainer工具箱->菜單和工具欄->SplitContainer 將SplitContainer拖入到窗體中,并將右擊屬性中Dock設(shè)置為“Fill”1.6.添加控件工具箱->ArcGIS Windows Froms將TOCC Control 和 MapControl 拖入到窗口中 分別設(shè)置在左右側(cè) 設(shè)置TOCC Control屬性,使之與MapControl關(guān)聯(lián),右擊TOCC Control,點(diǎn)擊屬性,在Buddy中改為axMapControl1添加控件License Control 工具箱->ArcGIS Windows Froms-

3、> License Control 把License Control拖入到窗體中注意:要是程序能夠正常運(yùn)行,需要在Program.CS中添加一段代碼,代碼如下:ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);二、添加代碼2.1打開文件在菜單下雙擊“打開地圖文檔”屬性(1)直接打開文件書寫格式如下:this.axMapControl1.LoadMxFile("文件的具體地址文件的名稱.文件格式”);例子如下:this.axMapControl1.LoadMxFile(E:ArcGIS

4、 Engine 地理信息系統(tǒng)開發(fā)教程-基于C#.NETchp03地圖操作dataMxd文件Qingdao.mxd");(2)設(shè)置可選擇的文件打開方式OpenFileDialog pOpenFiledialog = new OpenFileDialog(); pOpenFiledialog.InitialDirectory=E:ArcGIS Engine 地理信息系統(tǒng)開發(fā)教程-基于C#.NETchp03地圖操作dataMxd文件" ; pOpenFiledialog.Filter = "文本文件(*.mxd)|*.mxd|所有文件(*.*)|*.*" pO

5、penFiledialog.Title = "打開地圖文檔" if (pOpenFiledialog.ShowDialog() = DialogResult.OK) string mxdfilpath = pOpenFiledialog.FileName; if (this.axMapControl1.CheckMxFile(mxdfilpath) this.axMapControl1.LoadMxFile(mxdfilpath); else MessageBox.Show("打開地圖文檔無效!"); (3)使用ControlsOpenDocComman

6、dClass加載添加代碼如下: ICommand command = new ControlsOpenDocCommandClass();command.OnCreate(this.axMapControl1.Object);command.OnClick();注意:如果直接運(yùn)行會出現(xiàn)錯誤,因為沒有添加引用,我們需要添加引用 ESRI.ArcGIS.SystemUI;ESRI.ArcGIS.Controls;然后在使用空間 : using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.Controls; 地圖瀏覽添加控件menuStrip 和toolStrip

7、還有statusStrip 依次添加控件 分 欄 容 器 控 件splitContainer1)、內(nèi)容表控件(axTOCControl1)、地圖視圖控件(axMapControl1)、許可控件(axLicenseControl1)。2.為工具欄控件添加 8 個按鈕(BUTTON),依次將其文本(text 屬性)改為:打開地圖、加載數(shù)據(jù)、逐級放大、逐級縮小、拉框放大、拉框縮小、漫游、全圖、前一視圖、后一視圖,并設(shè)置相應(yīng)圖標(biāo)依次將其 NAME 屬性改為 CmdOpen, CmdAdd,CmdZoomIn, CmdZoonOut, ToolZoomIn, ToolZoomOut, ToolPan,

8、CmdFullextent、CmdBack、CmdNext點(diǎn)擊button ->Displaystyle->ImageAndText 可以使修改的TEXT名稱顯示出來3. 雙擊button“打開地圖” 添加代碼如下 ICommand command = new ControlsOpenDocCommandClass(); command.OnCreate(this.axMapControl1.Object); command.OnClick(); 注意:使用代碼之前要引用命名空間using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.Control

9、s; 4. 雙擊button“加載數(shù)據(jù)” 添加代碼如下:5. 雙擊button“逐級放大”“逐級縮小”分別添加代碼如下: 注意:在添加代碼前,需要添加引用空間 代碼 using ESRI.ArcGIS.Geometry; IEnvelope pEnvelope; pEnvelope = axMapControl1.Extent; pEnvelope.Expand(0.5, 0.5, true); /這a里?設(shè)?置?縮?小?為a一?半?,?可é以?根ù據(jù)Y需è要癮具?體?設(shè)?置? axMapControl1.Extent = pEnvelope; axMapCont

10、rol1.ActiveView.Refresh(); IEnvelope pEnvelope; pEnvelope = axMapControl1.Extent; pEnvelope.Expand(2, 2, true); /這a里?設(shè)?置?縮?小?為a一?半?,?可é以?根ù據(jù)Y需è要癮具?體?設(shè)?置? axMapControl1.Extent = pEnvelope; axMapControl1.ActiveView.Refresh();6. 雙擊button“拉框放大”“拉框縮小”分別添加代碼如下: ControlsMapZoomInTool objTool

11、 = new ControlsMapZoomInToolClass(); objTool.OnCreate(axMapControl1.Object); axMapControl1.CurrentTool = (ITool)objTool; ControlsMapZoomOutTool objTool = new ControlsMapZoomOutToolClass(); objTool.OnCreate(axMapControl1.Object); axMapControl1.CurrentTool = (ITool)objTool;7. 雙擊button“拉框放大”“拉框縮小”分別添加代

12、碼如下: ControlsMapZoomInTool objTool = new ControlsMapZoomInToolClass(); objTool.OnCreate(axMapControl1.Object); axMapControl1.CurrentTool = (ITool)objTool; ControlsMapZoomOutTool objTool = new ControlsMapZoomOutToolClass(); objTool.OnCreate(axMapControl1.Object); axMapControl1.CurrentTool = (ITool)ob

13、jTool;8. 雙擊button“漫游”添加代碼如下: string pMouseOperate = null; axMapControl1.CurrentTool = null; pMouseOperate = "Pan" axMapControl1.MousePointer = esriControlsMousePointer.esriPointerPan;9.雙擊9.button“全圖”添加代碼如下: axMapControl1.Extent = axMapControl1.FullExtent; 視圖同步1. 按照如下設(shè)置界面 2. 依次添加控件ToolBarCo

14、ntrol和ToccControl和MapControl ,并將MapControl 的name改為EagleControl SpitContainer 3. 將TabControl拖入到框內(nèi),并修改名稱為數(shù)據(jù)和布局,并將屬性中alignment中設(shè)置為bottom。4. 點(diǎn)擊“數(shù)據(jù)”框,將MapControl拖入到其中,同樣方法選中“布局”框?qū)ⅰ癙ageLayoutControl拖入其中,并將MapControl改名為MainControl5. 定義幾個變量private bool bCanDrag; /鷹眼地圖上的矩形框可移動的標(biāo)志private IPoint pMoveRectPoint

15、; /記錄在移動鷹眼地圖上的矩形框時鼠標(biāo)的位置private IEnvelope pEnv; /記錄數(shù)據(jù)視圖的Extent然后在初始化中寫入以下代碼:private void Form1_Load(object sender, EventArgs e)this.axTOCControl1.SetBuddyControl(this.mainMapControl);EagleMapControl.Extent = mainMapControl.FullExtent;pEnv = EagleMapControl.Extent;6)首先實現(xiàn)主視圖與鷹眼視圖的數(shù)據(jù)保持一致, 在 mainMapContr

16、ol控件的 OnMapRelaced 事件中寫入以下代碼:private void mainMapControl_OnMapReplaced(object sender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvent e)if (mainMapControl.LayerCount > 0)EagleMapControl.Map = new MapClass();for (int i = 0; i <= mainMapControl.Map.LayerCount - 1; i+)EagleMapControl.Ad

17、dLayer(mainMapControl.get_Layer(i);EagleMapControl.Extent = mainMapControl.Extent;EagleMapControl.Refresh();7)添加矩形框當(dāng) 數(shù) 據(jù) 視 圖 的 顯 示 范 圍 發(fā) 生 變 化 時 , 會 觸 發(fā) 觸 發(fā) 數(shù) 據(jù) 視 圖( MapControl1)中 OnExtentUpdata 事件,在該事件中繪制鷹眼視圖中的方框。獲取數(shù)據(jù)視圖中的地圖顯示范圍作為矩形框范圍,添加到鷹眼視圖中。 代碼如下private void mainMapControl_OnExtentUpdated(object

18、 sender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e)/添加矩形框之前,需要清除鷹眼視圖( MapControl2)中任何圖形元素。IGraphicsContainer pGraphicsContainer = EagleMapControl.Map as/安徽理工大學(xué)測繪學(xué)院 GIS 開發(fā)實驗課講義IGraphicsContainer;IActiveView pActiveView = pGraphicsContainer as IActiveView;pGraphicsContainer.DeleteA

19、llElements();/得到當(dāng)前視圖范圍pEnv = (IEnvelope)e.newEnvelope;IRectangleElement pRectangleEle = new RectangleElementClass();IElement pElement = pRectangleEle as IElement;pElement.Geometry = pEnv;/設(shè)置鷹眼圖中的紅線框IRgbColor pColor = new RgbColorClass();pColor.Red = 255;pColor.Green = 0;pColor.Blue = 0;pColor.Transp

20、arency = 255;/產(chǎn)生一個線符號對象ILineSymbol pOutline = new SimpleLineSymbolClass();pOutline.Width = 3;pOutline.Color = pColor;/設(shè)置顏色屬性pColor = new RgbColorClass();pColor.Transparency = 0;/設(shè)置填充符號的屬性IFillSymbol pFillSymbol = new SimpleFillSymbolClass();pFillSymbol.Color = pColor;pFillSymbol.Outline = pOutline;/

21、向鷹眼中添加矩形框IFillShapeElement pFillShapeEle = pElement as IFillShapeElement;pFillShapeEle.Symbol = pFillSymbol;pGraphicsContainer.AddElement(IElement)pFillShapeEle,0);pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null,null);8) 矩形框的拖動與繪制private void EagleMapControl_OnMouseDown(object sen

22、der,ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e)if (EagleMapControl.Map.LayerCount > 0)/按下鼠標(biāo)左鍵移動矩形框if (e.button = 1)/安徽理工大學(xué)測繪學(xué)院 GIS 開發(fā)實驗課講義/如果指針落在鷹眼的矩形框中,標(biāo)記可移動if (e.mapX > pEnv.XMin && e.mapY > pEnv.YMin && e.mapX <pEnv.XMax && e.mapY < pEnv.YMax

23、)bCanDrag = true;pMoveRectPoint = new PointClass();pMoveRectPoint.PutCoords(e.mapX, e.mapY); /記錄點(diǎn)擊的第一個點(diǎn)的坐標(biāo)/按下鼠標(biāo)右鍵繪制矩形框else if (e.button = 2)IEnvelope pEnvelope = EagleMapControl.TrackRectangle();IPoint pTempPoint = new PointClass();pTempPoint.PutCoords(pEnvelope.XMin + pEnvelope.Width / 2,pEnvelope.

24、YMin + pEnvelope.Height / 2);mainMapControl.Extent = pEnvelope;/矩形框的高寬和數(shù)據(jù)試圖的高寬不一定成正比,這里做一個中心調(diào)整mainMapControl.CenterAt(pTempPoint);/移動矩形框private void EagleMapControl_OnMouseMove(object sender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e)if (e.mapX > pEnv.XMin && e.mapY > p

25、Env.YMin && e.mapX < pEnv.XMax&& e.mapY < pEnv.YMax)/如果鼠標(biāo)移動到矩形框中,鼠標(biāo)換成小手,表示可以拖動EagleMapControl.MousePointer =esriControlsMousePointer.esriPointerHand;if (e.button = 2) /如果在內(nèi)部按下鼠標(biāo)右鍵,將鼠標(biāo)樣式設(shè)置為默認(rèn)樣式EagleMapControl.MousePointer =esriControlsMousePointer.esriPointerDefault;else/安徽理工大學(xué)測

26、繪學(xué)院 GIS 開發(fā)實驗課講義/在其他位置將鼠標(biāo)設(shè)為默認(rèn)的樣式EagleMapControl.MousePointer =esriControlsMousePointer.esriPointerDefault;if (bCanDrag)double Dx, Dy; /記錄鼠標(biāo)移動的距離Dx = e.mapX - pMoveRectPoint.X;Dy = e.mapY - pMoveRectPoint.Y;pEnv.Offset(Dx, Dy); /根據(jù)偏移量更改 pEnv 位置pMoveRectPoint.PutCoords(e.mapX, e.mapY);/在繪制前,清除鷹眼中之前繪制的矩

27、形框IGraphicsContainer pGraphicsContainer = EagleMapControl.Map asIGraphicsContainer;IActiveView pActiveView = pGraphicsContainer as IActiveView;pGraphicsContainer.DeleteAllElements();/得到當(dāng)前視圖范圍IRectangleElement pRectangleElement = newRectangleElementClass();IElement pElement = pRectangleElement as IEl

28、ement;pElement.Geometry = pEnv;/設(shè)置矩形框(實質(zhì)為中間透明度面)IRgbColor pColor = new RgbColorClass();pColor.Red = 255;pColor.Green = 0;pColor.Blue = 0;pColor.Transparency = 255;ILineSymbol pOutLine = new SimpleLineSymbolClass();pOutLine.Width = 2;pOutLine.Color = pColor;IFillSymbol pFillSymbol = new SimpleFillSym

29、bolClass();pColor = new RgbColorClass();pColor.Transparency = 0;pFillSymbol.Color = pColor;pFillSymbol.Outline = pOutLine;/向鷹眼中添加矩形框IFillShapeElement pFillShapeElement = pElement asIFillShapeElement;pFillShapeElement.Symbol = pFillSymbol;pGraphicsContainer.AddElement(IElement)pFillShapeElement, 0);/刷新安徽理工大學(xué)測繪學(xué)院 GIS 開發(fā)實驗課講義pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null, null);mainMapControl.Extent = pEnv;private void EagleMapControl_OnMouseUp(object sender,IMapControlEvents2_OnMouseUpEvent e)if (e.button = 1 &

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論