1、添加控件License Control 工具箱-ArcGIS Windows Froms- License Control 把License Control拖入到窗体中注意:要是程序能够正常运行,需要在Program.CS中添加一段代码,代码如下:ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);二、添加代码2.1打开文件在菜单下双击“打开地图文档”属性(1)直接打开文件书写格式如下:this.axMapControl1.LoadMxFile(文件的具体地址文件的名称.文件格式”);例子如下:thi
2、s.axMapControl1.LoadMxFile(E:ArcGIS Engine 地理信息系统开发教程-基于C#.NETchp03地图操作dataMxd文件Qingdao.mxd);(2)设置可选择的文件打开方式OpenFileDialog pOpenFiledialog = new OpenFileDialog(); pOpenFiledialog.InitialDirectory=E:ArcGIS Engine 地理信息系统开发教程-基于C#.NETchp03地图操作dataMxd文件 ; pOpenFiledialog.Filter = 文本文件(*.mxd)|*.mxd|所有文件(
3、*.*)|*.*; pOpenFiledialog.Title = 打开地图文档 if (pOpenFiledialog.ShowDialog() = DialogResult.OK) string mxdfilpath = pOpenFiledialog.FileName; if (this.axMapControl1.CheckMxFile(mxdfilpath) this.axMapControl1.LoadMxFile(mxdfilpath); else MessageBox.Show(打开地图文档无效!(3)使用ControlsOpenDocCommandClass加载添加代码如下:
4、 ICommand command = new ControlsOpenDocCommandClass();command.OnCreate(this.axMapControl1.Object);command.OnClick();如果直接运行会出现错误,因为没有添加引用,我们需要添加引用 ESRI.ArcGIS.SystemUI;ESRI.ArcGIS.Controls;然后在使用空间 : using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.Controls; 地图浏览添加控件menuStrip 和toolStrip 还有statusStrip依次添加控
5、件 分 栏 容 器 控 件splitContainer1)、容表控件(axTOCControl1)、地图视图控件(axMapControl1)、许可控件(axLicenseControl1)。2.为工具栏控件添加 8 个按钮(BUTTON),依次将其文本(text 属性)改为:打开地图、加载数据、逐级放大、逐级缩小、拉框放大、拉框缩小、漫游、全图、前一视图、后一视图,并设置相应图标依次将其 NAME 属性改为 CmdOpen, CmdAdd,CmdZoomIn, CmdZoonOut, ToolZoomIn, ToolZoomOut, ToolPan, CmdFullextent、CmdBac
6、k、CmdNext点击button -Displaystyle-ImageAndText 可以使修改的TEXT名称显示出来3.双击button“打开地图” 添加代码如下 ICommand command = new ControlsOpenDocCommandClass(); command.OnCreate(this.axMapControl1.Object); command.OnClick(); 注意:使用代码之前要引用命名空间using ESRI.ArcGIS.SystemUI;4.双击button“加载数据” 添加代码如下:5.双击button“逐级放大”“逐级缩小”分别添加代码如下
7、:在添加代码前,需要添加引用空间 代码 using ESRI.ArcGIS.Geometry; IEnvelope pEnvelope; pEnvelope = axMapControl1.Extent; pEnvelope.Expand(0.5, 0.5, true); /这a里?设?置?缩?小?为a一?半?,?可以?根据Y需要癮具?体? axMapControl1.Extent = pEnvelope; axMapControl1.ActiveView.Refresh(); IEnvelope pEnvelope; pEnvelope.Expand(2, 2, true);6.双击butt
8、on“拉框放大”“拉框缩小”分别添加代码如下: ControlsMapZoomInTool objTool = new ControlsMapZoomInToolClass(); objTool.OnCreate(axMapControl1.Object); axMapControl1.CurrentTool = (ITool)objTool; ControlsMapZoomOutTool objTool = new ControlsMapZoomOutToolClass();7.双击button“拉框放大”“拉框缩小”分别添加代码如下:8.双击button“漫游”添加代码如下: string
9、 pMouseOperate = null; axMapControl1.CurrentTool = null; pMouseOperate = Pan axMapControl1.MousePointer = esriControlsMousePointer.esriPointerPan;9.双击9.button“全图”添加代码如下: axMapControl1.Extent = axMapControl1.FullExtent; 视图同步1.按照如下设置界面2.依次添加控件ToolBarControl和ToccControl和MapControl ,并将MapControl 的name改为
10、EagleControl SpitContainer3.将TabControl拖入到框,并修改名称为数据和布局,并将属性中alignment中设置为bottom。4.点击“数据”框,将MapControl拖入到其中,同样方法选中“布局”框将“PageLayoutControl拖入其中,并将MapControl改名为MainControl5. 定义几个变量private bool bCanDrag; /鹰眼地图上的矩形框可移动的标志private IPoint pMoveRectPoint; /记录在移动鹰眼地图上的矩形框时鼠标的位置private IEnvelope pEnv; /记录数据视图
11、的Extent然后在初始化中写入以下代码:private void Form1_Load(object sender, EventArgs e)this.axTOCControl1.SetBuddyControl(this.mainMapControl);EagleMapControl.Extent = mainMapControl.FullExtent;pEnv = EagleMapControl.Extent;6)首先实现主视图与鹰眼视图的数据保持一致, 在 mainMapControl控件的 OnMapRelaced 事件中写入以下代码:private void mainMapContr
12、ol_OnMapReplaced(object sender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvent e)if (mainMapControl.LayerCount 0)EagleMapControl.Map = new MapClass();for (int i = 0; i /按下鼠标左键移动矩形框if (e.button = 1)/如果指针落在鹰眼的矩形框中,标记可移动if (e.mapX pEnv.XMin & e.mapY pEnv.YMin & e.mapX pEnv.XMax & e.mapY pEnv
13、.YMax)bCanDrag = true;pMoveRectPoint = new PointClass();pMoveRectPoint.PutCoords(e.mapX, e.mapY); /记录点击的第一个点的坐标/按下鼠标右键绘制矩形框else if (e.button = 2)IEnvelope pEnvelope = EagleMapControl.TrackRectangle();IPoint pTempPoint = new PointClass();pTempPoint.PutCoords(pEnvelope.XMin + pEnvelope.Width / 2,pEnve
14、lope.YMin + pEnvelope.Height / 2);mainMapControl.Extent = pEnvelope;/矩形框的高宽和数据试图的高宽不一定成正比,这里做一个中心调整mainMapControl.CenterAt(pTempPoint);/移动矩形框private void EagleMapControl_OnMouseMove(object sender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e) pEnv.XMax/如果鼠标移动到矩形框中,鼠标换成小手,表示可以拖动EagleMapC
15、ontrol.MousePointer =esriControlsMousePointer.esriPointerHand;if (e.button = 2) /如果在部按下鼠标右键,将鼠标样式设置为默认样式esriControlsMousePointer.esriPointerDefault;else/在其他位置将鼠标设为默认的样式if (bCanDrag)double Dx, Dy; /记录鼠标移动的距离Dx = e.mapX - pMoveRectPoint.X;Dy = e.mapY - pMoveRectPoint.Y;pEnv.Offset(Dx, Dy); /根据偏移量更改 pE
16、nv 位置/在绘制前,清除鹰眼中之前绘制的矩形框IRectangleElement pRectangleElement = newRectangleElementClass();IElement pElement = pRectangleElement as IElement;/设置矩形框(实质为中间透明度面)ILineSymbol pOutLine = new SimpleLineSymbolClass();pOutLine.Width = 2;pOutLine.Color = pColor;pFillSymbol.Outline = pOutLine;IFillShapeElement p
17、FillShapeElement = pElement asIFillShapeElement;pFillShapeElement.Symbol = pFillSymbol;pGraphicsContainer.AddElement(IElement)pFillShapeElement, 0);/刷新理工大学测绘学院 GIS 开发实验课讲义pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null, null);mainMapControl.Extent = pEnv;private void EagleMapContr
18、ol_OnMouseUp(object sender,IMapControlEvents2_OnMouseUpEvent e)if (e.button = 1 & pMoveRectPoint != null)if (e.mapX = pMoveRectPoint.X & e.mapY = pMoveRectPoint.Y)mainMapControl.CenterAt(pMoveRectPoint);bCanDrag = false;9)请同学们根据课上的讲解试图理解上面的代码。以上代码绘制矩形框的代码出现了两次,可以定义一个函数以减少代码冗余。鹰眼功能实现代码大致就是这些, 同学们自己完成,以加深理解10) 数据视图与布局视图的联动, 大致代码如下:private void mainMapControl_OnAfterScreenDraw(object sender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnAfterScreenDrawEvent e)IActiveView pActiveView =(IActiveView)axPageLayoutControl1.ActiveView.FocusMap;IDisplayTransf
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1