




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 地理信息系统开发具体教程 一、基本控件的添加 1.1.新建项目 文件->新建->项目->Windows窗体应用 1.2.修改标题 右击窗体属性->在Text中修改标题名称 1.3.添加菜单栏 工具箱->菜单和工具栏->MenuStrip(将MenuStrip拖入到窗体内) 依次添加子标题如下: 1.4.添加ToolStripContainer 工具箱->菜单和工具栏-> ToolStripContainer 将ToolStripContainer拖入到窗体内,右击属性,Spring属性设置为True,在添加一个Statuslabel,在属性中的
2、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 W
3、indows Froms-> License Control 把License Control拖入到窗体中 注意:要是程序能够正常运行,需要在Program.CS中添加一段代码,代码如下: ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop); 二、添加代码 2.1打开文件 在菜单下双击“打开地图文档”属性 (1)直接打开文件 书写格式如下: this.axMapControl1.LoadMxFile(文件的具体地址文件的名称.文件格式”); 例子如下: this.axMapControl1.Lo
4、adMxFile(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|所有文件(*.*)|*.*; pOpen
5、Filedialog.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
6、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 依次添加
7、控件 分 栏 容 器 控 件 splitContainer1)、内容表控件(axTOCControl1)、地图视图控件(axMapControl1)、许可控件(axLicenseControl1)。 2.为工具栏控件添加 8 个按钮(BUTTON),依次将其文本(text 属 性)改为:打开地图、加载数据、逐级放大、逐级缩小、拉框放大、 拉框缩小、漫游、全图、前一视图、后一视图,并设置相应图标依次将其 NAME 属性改为 CmdOpen, CmdAdd, CmdZoomIn, CmdZoonOut, ToolZoomIn, ToolZoomOut, ToolPan, CmdFullextent
8、、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.双击but
9、ton“加载数据” 添加代码如下: 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.Active
10、View.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 Cont
11、rolsMapZoomInToolClass(); objTool.OnCreate(axMapControl1.Object); axMapControl1.CurrentTool = (ITool)objTool; ControlsMapZoomOutTool objTool = new ControlsMapZoomOutToolClass(); objTool.OnCreate(axMapControl1.Object); axMapControl1.CurrentTool = (ITool)objTool; 7.双击button“拉框放大”“拉框缩小”分别添加代码如下: Contro
12、lsMapZoomInTool objTool = new ControlsMapZoomInToolClass(); objTool.OnCreate(axMapControl1.Object); axMapControl1.CurrentTool = (ITool)objTool; ControlsMapZoomOutTool objTool = new ControlsMapZoomOutToolClass(); objTool.OnCreate(axMapControl1.Object); axMapControl1.CurrentTool = (ITool)objTool; 8.双击
13、button“漫游”添加代码如下: string pMouseOperate = null; axMapControl1.CurrentTool = null; pMouseOperate = Pan; axMapControl1.MousePointer = esriControlsMousePointer.esriPointerPan;9.双击9.button“全图”添加代码如下: axMapControl1.Extent = axMapControl1.FullExtent; 视图同步 1.按照如下设置界面 2.依次添加控件ToolBarControl和ToccControl和MapCo
14、ntrol ,并将MapControl 的name改为EagleControl SpitContainer 3.将TabControl拖入到框内,并修改名称为数据和布局,并将属性中alignment中设置为bottom。 4.点击“数据”框,将MapControl拖入到其中,同样方法选中“布局”框将“PageLayoutControl拖入其中,并将MapControl改名为MainControl 5. 定义几个变量 private bool bCanDrag; /鹰眼地图上的矩形框可移动的标志 private IPoint pMoveRectPoint; /记录在移动鹰眼地图上的矩形框时鼠标的
15、位置 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 控件的 OnMapRe
16、laced 事件中写入以下代码: 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.AddLayer(
17、mainMapControl.get_Layer(i); EagleMapControl.Extent = mainMapControl.Extent; EagleMapControl.Refresh(); 7)添加矩形框 当 数 据 视 图 的 显 示 范 围 发 生 变 化 时 , 会 触 发 触 发 数 据 视 图 ( MapControl1)中 OnExtentUpdata 事件,在该事件中绘制鹰眼视图 中的方框。获取数据视图中的地图显示范围作为矩形框范围,添加到 鹰眼视图中。 代码如下 private void mainMapControl_OnExtentUpdated(objec
18、t sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e) /添加矩形框之前,需要清除鹰眼视图( MapControl2)中任何图形元素。 IGraphicsContainer pGraphicsContainer = EagleMapControl.Map as /安徽理工大学测绘学院 GIS 开发实验课讲义 IGraphicsContainer; IActiveView pActiveView = pGraphicsContainer as IActiveView; pGraphicsContainer
19、.DeleteAllElements(); /得到当前视图范围 pEnv = (IEnvelope)e.newEnvelope; IRectangleElement pRectangleEle = new RectangleElementClass(); IElement pElement = pRectangleEle as IElement; pElement.Geometry = pEnv; /设置鹰眼图中的红线框 IRgbColor pColor = new RgbColorClass(); pColor.Red = 255; pColor.Green = 0; pColor.Blue
20、 = 0; pColor.Transparency = 255; /产生一个线符号对象 ILineSymbol pOutline = new SimpleLineSymbolClass(); pOutline.Width = 3; pOutline.Color = pColor; /设置颜色属性 pColor = new RgbColorClass(); pColor.Transparency = 0; /设置填充符号的属性 IFillSymbol pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = pColor; pF
21、illSymbol.Outline = pOutline; /向鹰眼中添加矩形框 IFillShapeElement pFillShapeEle = pElement as IFillShapeElement; pFillShapeEle.Symbol = pFillSymbol; pGraphicsContainer.AddElement(IElement)pFillShapeEle,0); pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null,null); 8) 矩形框的拖动与绘制 private void E
22、agleMapControl_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e) if (EagleMapControl.Map.LayerCount > 0) /按下鼠标左键移动矩形框 if (e.button = 1) /安徽理工大学测绘学院 GIS 开发实验课讲义 /如果指针落在鹰眼的矩形框中,标记可移动 if (e.mapX > pEnv.XMin && e.mapY > pEnv.YMin && e.mapX &l
23、t; pEnv.XMax && e.mapY < pEnv.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.Put
24、Coords(pEnvelope.XMin + pEnvelope.Width / 2, pEnvelope.YMin + pEnvelope.Height / 2); mainMapControl.Extent = pEnvelope; /矩形框的高宽和数据试图的高宽不一定成正比,这里做一个中心 调整 mainMapControl.CenterAt(pTempPoint); /移动矩形框 private void EagleMapControl_OnMouseMove(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouse
25、MoveEvent e) if (e.mapX > pEnv.XMin && e.mapY > pEnv.YMin && e.mapX < pEnv.XMax && e.mapY < pEnv.YMax) /如果鼠标移动到矩形框中,鼠标换成小手,表示可以拖动 EagleMapControl.MousePointer = esriControlsMousePointer.esriPointerHand; if (e.button = 2) /如果在内部按下鼠标右键,将鼠标样式设置为 默认样式 EagleMapControl.
26、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
27、, Dy); /根据偏移量更改 pEnv 位置 pMoveRectPoint.PutCoords(e.mapX, e.mapY); /在绘制前,清除鹰眼中之前绘制的矩形框 IGraphicsContainer pGraphicsContainer = EagleMapControl.Map as IGraphicsContainer; IActiveView pActiveView = pGraphicsContainer as IActiveView; pGraphicsContainer.DeleteAllElements(); /得到当前视图范围 IRectangleElement pR
28、ectangleElement = new RectangleElementClass(); 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 SimpleLineS
29、ymbolClass(); 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 as IFillShape
30、Element; 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 && pMov
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 加强早晚读管理办法
- 旧物资定价管理办法
- 散装水泥车管理办法
- 取水证转让管理办法
- 哈尔滨皮肤管理办法
- 工艺改良将管理办法
- 英语介绍人物的课件
- 城区化粪池管理办法
- 医院充电桩管理办法
- 南阳市垃圾管理办法
- 电力设备安装人员安全教育培训手册
- 怀特海《教育的目的》读书分享
- 教育金保险理念
- 普通货物道路运输安全生产管理制度
- 2025年校长职级考试题及答案
- 2025年广西继续教育公需科目考试试题和答案
- 健康体检服务投标方案投标文件(技术方案)
- DZ∕T 0289-2015 区域生态地球化学评价规范(正式版)
- DB65T 2887-2008林业用保水剂应用通用技术条件
- GB/T 41813.1-2022信息技术智能语音交互测试方法第1部分:语音识别
- SB/T 10569-2010冷藏库门
评论
0/150
提交评论