ArcEngine 鹰眼功能C#实现
ArcEngine开发之鹰眼功能C#实现
鹰眼作为AE系统一项基本功能,经常见于AE开发中。网上鹰眼功能实现大同小异,本文所写示例仅作参考及记录。
一、效果图
二、控件说明
基本AE框架,包括菜单(MenuStrip)、工具栏(AxToolbarControl)、图层目录(AxTOCControl)、数据视图(axMapControl1)、鹰眼视图(axMapControl2)。
布局上述框架的小细节:
1、在空白窗体中先添加MenuStrip;
2、添加AxToolbarControl,Dock属性设为Top;
3、添加SplitContainer1,Dock自动为Fill;
4、在SplitContainer1.Panel1(左面板)添加SplitContainer2容器,并修改其Orientation属性为“水平”;
5、在SplitContainer1.Panel2(右面板)添加AxMapControl1控件,Dock属性设为Fill,用做数据视图;
6、在SplitContainer2.Panel1添加AxTOCControl控件,在SplitContainer2.Panel2添加AxMapControl2控件,Dock属性设为Fill,用做鹰眼视图;
三、关键步骤
鹰眼功能实现主要在axMapControl1(主视图)和axMapControl2(鹰眼视图)的相应响应事件中操作,主要是axMapControl1的OnExtentUpdated、OnMapReplaced事件,axMapControl2的OnMouseDown、OnMouseMove事件。其关键代码如下:
private void axMapControl1_OnExtentUpdated(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e){IEnvelope pEnvelope = (IEnvelope)e.newEnvelope;IGraphicsContainer pGraphicsContainer = axMapControl2.Map as IGraphicsContainer;IActiveView pActiveView = pGraphicsContainer as IActiveView;pGraphicsContainer.DeleteAllElements();IRectangleElement pRectangleEle = new RectangleElementClass();IElement pElement = pRectangleEle as IElement;pElement.Geometry = pEnvelope;IRgbColor pColor = new RgbColorClass();pColor.Red = 255;pColor.Green = 0;pColor.Blue = 0;pColor.Transparency = 255; ILineSymbol pOutline = new SimpleLineSymbolClass();pOutline.Width = 3;pOutline.Color = pColor;pColor = new RgbColorClass();pColor.Red = 255;pColor.Green = 0;pColor.Blue = 0;pColor.Transparency = 0;IFillSymbol pFillSymbol = new SimpleFillSymbolClass();pFillSymbol.Color = pColor;pFillSymbol.Outline = pOutline;IFillShapeElement pFillShapeEle = pElement as IFillShapeElement;pFillShapeEle.Symbol = pFillSymbol;pGraphicsContainer.AddElement((IElement)pFillShapeEle, 0);pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);}private void axMapControl1_OnMapReplaced(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvent e){axMapControl2.Map = new MapClass();if (axMapControl1.LayerCount > 0){for(int i=0;i<=axMapControl1.Map.LayerCount-1;++i){axMapControl2.AddLayer(axMapControl1.get_Layer(i));}axMapControl2.Extent = axMapControl1.Extent;}}private void axMapControl2_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e){if (axMapControl2.Map.LayerCount > 0){if (e.button == 1){IPoint pPoint = new PointClass();pPoint.PutCoords(e.mapX, e.mapY);axMapControl1.CenterAt(pPoint);axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);}else if (e.button == 2){IEnvelope pEnv = axMapControl2.TrackRectangle();axMapControl1.Extent = pEnv;axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);}}}private void axMapControl2_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e){if (e.button == 1){IPoint pPoint = new PointClass();pPoint.PutCoords(e.mapX, e.mapY);axMapControl1.CenterAt(pPoint);axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);}}
四、其他说明
1、鹰眼按需显示及隐藏
现在希望鹰眼控件默认隐藏,只有在点击鹰眼功能时才予以显示。实现思路:设置splitContainer2.Panel2Collapsed默认属性为true,在响应鹰眼点击事件时更改该属性。(提示:由于鹰眼功能实现需要axMapControl2的部分响应事件,建议在先生成相应响应事件之后再修改该属性)
2、axTOCControl控件图层不显示问题
即使axTOCControl在控件中绑定了axMapControl控件,但实际运行时图层目录并不显示,解决方法是需要在程序中手动添加绑定。
axTOCControl1.SetBuddyControl(axMapControl1);
完整示例源码,感兴趣的可以参考。 示例源码:http://download.csdn.net/detail/sean4m/9513918
ArcEngine 鹰眼功能C#实现相关推荐
- GIS二次开发实习——鹰眼功能模块的实现(鹰眼锁定不能动,红框与主地图联动)
GIS二次开发实习(一)--鹰眼功能实现 学期末为期2周的实习结束了,对实习要求所做 太湖水资源管理系统 的功能的实现一一做一个记录,今天先来鹰眼部分(细节部分这里就不说了看前面的文章(一)). 实现 ...
- Cesium(九)鹰眼功能
Cesium鹰眼实现的功能,有两种方式:一种声明两个viewer,另一种就是通过Leaflet.这里我们采用第二种方式,用到一位道友自定义鹰眼插件,这里我们稍微改进一下(ES6方式),下面我们来介绍一 ...
- AE地图基础操作实验(放大、缩小、全图、坐标、鹰眼功能)
本文章实验的开发环境为visiostudio2010,arcgis-engine10.2.在实验中,通过实现c#中窗体程序中AE地图界面的基础操作对AE的基本功能进行学习.本文实验的代码链接置于文末, ...
- ArcEngine编辑功能的实现(二)
这里给出采用混合模式开发编辑工具条的完整代码,但是没有给出界面,相信熟悉ArcGIS操作的朋友一定可以设计出类似的界面.功能还有不少不完善的地方,希望感兴趣的朋友可以帮忙改进! View Code 1 ...
- cesium 入门开发系列地图鹰眼功能(附源码下载)
前言 cesium 入门开发系列环境知识点了解: cesium api文档介绍,详细介绍 cesium 每个类的函数以及属性等等 cesium 在线例子 内容概览 cesium 结合 leaflet ...
- C#+ArcGIS Engine二次开发之鹰眼功能实现的代码
开发系统的时候,一定也会考虑鹰眼的实现,鹰眼对整个研究区域有一个整体的轮廓.所以,鹰眼对一个系统来说还是很有必要的.但是找过网上很多代码,大同小异,可最后出现的成果并不是我想要的,终于,get到了心仪 ...
- Cesium 之实现鹰眼功能(可拖拽矩形框定位范围)
本文实现的一种思路如下: 1.通过Cesium.Viewer创建鹰眼地图,获取主地图的当前范围和中心点位置,在鹰眼地图中创建矩形用于定位参考. 2.主地图联动鹰眼图 注册主地图相机的移动前(moveS ...
- ArcEngine C# GIS开发入门作业 (三)Ex04——实现地图的简单渲染和唯一值渲染
文章评论 写评论 sinat_37432938: 可以说非常有参考的意义,谢谢分享 4周前 #2楼 举报回复查看回复(1) domen_dragon 回复 sinat_37432938: 哈哈,谢谢夸 ...
- 基于ArcEngine与C#的鹰眼地图实现
鹰眼图是对全局地图的一种概略表达,具有与全局地图的空间参考和空间范围.为了更好起到空间提示和导航作用,有些还具备全局地图中重要地理要素,如主要河流.道路等的概略表达.通过两个axMapControl控 ...
最新文章
- 《麻省理工科技评论》:2018年18大科技趋势,2017年7大失败技术
- Windbg学习 (0x0013) 扩展命令-SOS
- vc++ 将可执行文件链接到 DLL
- linux用户ftp失败,vsftpd本地用户登录密码错误的解决方法
- ​KDD 2020 开源论文 | 图神经网络多变量时序预测
- python的threading库_python标准库介绍——31 threading 模块详解
- 2020年十月下旬,再次更新了自己的linkedin工作经历
- 万字图解Java多线程,不信你学不会!
- python语法学习_python语法学习笔记
- leetcode刷题:删除链表中的节点
- 1.3 谈谈你对MVC的理解
- 打开SVN server图形化管理界面
- 操作系统的基本类型、工作流程及其优缺点
- 【每日一题】一起冲击蓝桥杯吧——Day1【蓝桥真题】
- isalpha、isalnum、islower、isupper等字符函数
- Deep Learning论文翻译(Nature Deep Review)
- win7计算机资源管理器卡住,如何解决win7系统资源管理器已停止工作的问题
- ICP域名备案查询 分享一个可以快速批量查询域名备案信息的平台
- 将NV21图像某一区域变黑色
- SwiftUI 问答之更改 TabView 选项卡时如何运行函数