




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
地理信息系统开发具体教程一、基本控件的添加1.1.新建项目 文件-新建-项目-Windows窗体应用1.2.修改标题右击窗体属性-在Text中修改标题名称1.3.添加菜单栏 工具箱-菜单和工具栏-MenuStrip(将MenuStrip拖入到窗体内) 依次添加子标题如下:1.4.添加ToolStripContainer工具箱-菜单和工具栏- ToolStripContainer 将ToolStripContainer拖入到窗体内,右击属性,Spring属性设置为True,在添加一个Statuslabel,在属性中的text修改名称1.5.添加SplitContainer工具箱-菜单和工具栏-SplitContainer 将SplitContainer拖入到窗体中,并将右击属性中Dock设置为“Fill”1.6.添加控件工具箱-ArcGIS Windows Froms将TOCC Control 和 MapControl 拖入到窗口中 分别设置在左右侧 设置TOCC Control属性,使之与MapControl关联,右击TOCC Control,点击属性,在Buddy中改为axMapControl1添加控件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(文件的具体地址文件的名称.文件格式”);例子如下:this.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|所有文件(*.*)|*.*; 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加载添加代码如下: 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 依次添加控件 分 栏 容 器 控 件splitContainer1)、内容表控件(axTOCControl1)、地图视图控件(axMapControl1)、许可控件(axLicenseControl1)。2.为工具栏控件添加 8 个按钮(BUTTON),依次将其文本(text 属性)改为:打开地图、加载数据、逐级放大、逐级缩小、拉框放大、拉框缩小、漫游、全图、前一视图、后一视图,并设置相应图标依次将其 NAME 属性改为 CmdOpen, CmdAdd,CmdZoomIn, CmdZoonOut, ToolZoomIn, ToolZoomOut, ToolPan, CmdFullextent、CmdBack、CmdNext点击button -Displaystyle-ImageAndText 可以使修改的TEXT名称显示出来3. 双击button“打开地图” 添加代码如下 ICommand command = new ControlsOpenDocCommandClass(); command.OnCreate(this.axMapControl1.Object); command.OnClick(); 注意:使用代码之前要引用命名空间using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.Controls; 4. 双击button“加载数据” 添加代码如下:5. 双击button“逐级放大”“逐级缩小”分别添加代码如下: 注意:在添加代码前,需要添加引用空间 代码 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 = axMapControl1.Extent; pEnvelope.Expand(2, 2, true); /这a里?设?置?缩?小?为a一?半?,?可以?根据Y需要癮具?体?设?置? axMapControl1.Extent = pEnvelope; axMapControl1.ActiveView.Refresh();6. 双击button“拉框放大”“拉框缩小”分别添加代码如下: ControlsMapZoomInTool objTool = new ControlsMapZoomInToolClass(); objTool.OnCreate(axMapControl1.Object); axMapControl1.CurrentTool = (ITool)objTool; ControlsMapZoomOutTool objTool = new ControlsMapZoomOutToolClass(); objTool.OnCreate(axMapControl1.Object); axMapControl1.CurrentTool = (ITool)objTool;7. 双击button“拉框放大”“拉框缩小”分别添加代码如下: ControlsMapZoomInTool objTool = new ControlsMapZoomInToolClass(); objTool.OnCreate(axMapControl1.Object); axMapControl1.CurrentTool = (ITool)objTool; ControlsMapZoomOutTool objTool = new ControlsMapZoomOutToolClass(); objTool.OnCreate(axMapControl1.Object); axMapControl1.CurrentTool = (ITool)objTool;8. 双击button“漫游”添加代码如下: string 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改为EagleControl SpitContainer 3. 将TabControl拖入到框内,并修改名称为数据和布局,并将属性中alignment中设置为bottom。4. 点击“数据”框,将MapControl拖入到其中,同样方法选中“布局”框将“PageLayoutControl拖入其中,并将MapControl改名为MainControl5. 定义几个变量private bool bCanDrag; /鹰眼地图上的矩形框可移动的标志private IPoint pMoveRectPoint; /记录在移动鹰眼地图上的矩形框时鼠标的位置private IEnvelope pEnv; /记录数据视图的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 mainMapControl_OnMapReplaced(object sender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvent e)if (mainMapControl.LayerCount 0)EagleMapControl.Map = new MapClass();for (int i = 0; i 0)/按下鼠标左键移动矩形框if (e.button = 1)/安徽理工大学测绘学院 GIS 开发实验课讲义/如果指针落在鹰眼的矩形框中,标记可移动if (e.mapX pEnv.XMin & e.mapY pEnv.YMin & e.mapX pEnv.XMax & e.mapY pEnv.XMin & e.mapY pEnv.YMin & e.mapX pEnv.XMax& e.mapY pEnv.YMax)/如果鼠标移动到矩形框中,鼠标换成小手,表示可以拖动EagleMapControl.MousePointer =esriControlsMousePointer.esriPointerHand;if (e.button = 2) /如果在内部按下鼠标右键,将鼠标样式设置为默认样式EagleMapControl.MousePointer =esriControlsMousePointer.esriPointerDefault;else/安徽理工大学测绘学院 GIS 开发实验课讲义/在其他位置将鼠标设为默认的样式EagleMapControl.MousePointer =esriControlsMousePointer.esriPointerDefault;if (bCanDrag)double Dx, Dy; /记录鼠标移动的距离Dx = e.mapX - pMoveRectPoint.X;Dy = e.mapY - pMoveRectPoint.Y;pEnv.Offset(Dx, Dy); /根据偏移量更改 pEnv 位置pMoveRectPoint.PutCoords(e.mapX, e.mapY);/在绘制前,清除鹰眼中之前绘制的矩形框IGraphicsContainer pGraphicsContainer = EagleMapControl.Map asIGraphicsContainer;IActiveView pActiveView = pGraphicsContainer as IActiveView;pGraphicsContainer.DeleteAllElements();/得到当前视图范围IRectangleElement pRectangleElement = newRectangleElementClass();IElement pElement = pRectangleElement as IElement;pElement.Geometry = pEnv;/设置矩形框(实质为中间透明度面)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 SimpleFillSymbolClass();pColor = new RgbColorClass();pColor.Transparency = 0;pFillSymbol.Color = pColor;pFillSymbol.Outline = pOutLine;/向鹰眼中添加矩形框IFillShapeElement pFillShapeElement = pElement asIFillShapeElement;pFillShapeElement.Symbol = pFillSymbol;pGraphicsContainer.AddElement(IElement)pFillShapeElement, 0);/刷新安徽理工大学测绘学院 GIS 开发实验课讲义pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null, null);mainMapControl.Extent = pEnv;private void EagleMapControl_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) 数据视图与布局视
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年宠物针灸安全操作面试题及答案
- 草坪园艺技术使用中常见问题解决大全
- 2025年护卫犬训练理论模拟题库
- 2025年安全员考试备考冲刺题解
- 2025年智能制造工程师面试技巧与答案
- 2025年安全员安全生产法规试题
- 2025年事务局培训管理岗位面试题库答案
- 2025年农村经济管理实务技能考核试卷及答案解析
- 2025年金融业务拓展经理综合能力测验试卷及答案解析
- 2025年地震观测员技能鉴定初级模拟题
- 节假日值班人员安排管理制度
- 2024年化工行业典型生产安全事故警示
- (正式版)DB44∕T 2683-2025 《老年肌少症中西医结合健康管理规范》
- 2025年农电招聘面试题目及答案
- 领导小组管理办法
- 01 华为采购管理架构(20P)
- 基孔肯雅热的个案护理
- GA/T 2167-2024移民管理机构对外窗口设置规范
- 拥抱大赛活动方案
- DeepSeek在教育和学术领域的应用场景与案例(上中下合集)
- 深圳市生产安全事故调查处理工作规范
评论
0/150
提交评论