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#实现相关推荐

  1. GIS二次开发实习——鹰眼功能模块的实现(鹰眼锁定不能动,红框与主地图联动)

    GIS二次开发实习(一)--鹰眼功能实现 学期末为期2周的实习结束了,对实习要求所做 太湖水资源管理系统 的功能的实现一一做一个记录,今天先来鹰眼部分(细节部分这里就不说了看前面的文章(一)). 实现 ...

  2. Cesium(九)鹰眼功能

    Cesium鹰眼实现的功能,有两种方式:一种声明两个viewer,另一种就是通过Leaflet.这里我们采用第二种方式,用到一位道友自定义鹰眼插件,这里我们稍微改进一下(ES6方式),下面我们来介绍一 ...

  3. AE地图基础操作实验(放大、缩小、全图、坐标、鹰眼功能)

    本文章实验的开发环境为visiostudio2010,arcgis-engine10.2.在实验中,通过实现c#中窗体程序中AE地图界面的基础操作对AE的基本功能进行学习.本文实验的代码链接置于文末, ...

  4. ArcEngine编辑功能的实现(二)

    这里给出采用混合模式开发编辑工具条的完整代码,但是没有给出界面,相信熟悉ArcGIS操作的朋友一定可以设计出类似的界面.功能还有不少不完善的地方,希望感兴趣的朋友可以帮忙改进! View Code 1 ...

  5. cesium 入门开发系列地图鹰眼功能(附源码下载)

    前言 cesium 入门开发系列环境知识点了解: cesium api文档介绍,详细介绍 cesium 每个类的函数以及属性等等 cesium 在线例子 内容概览 cesium 结合 leaflet ...

  6. C#+ArcGIS Engine二次开发之鹰眼功能实现的代码

    开发系统的时候,一定也会考虑鹰眼的实现,鹰眼对整个研究区域有一个整体的轮廓.所以,鹰眼对一个系统来说还是很有必要的.但是找过网上很多代码,大同小异,可最后出现的成果并不是我想要的,终于,get到了心仪 ...

  7. Cesium 之实现鹰眼功能(可拖拽矩形框定位范围)

    本文实现的一种思路如下: 1.通过Cesium.Viewer创建鹰眼地图,获取主地图的当前范围和中心点位置,在鹰眼地图中创建矩形用于定位参考. 2.主地图联动鹰眼图 注册主地图相机的移动前(moveS ...

  8. ArcEngine C# GIS开发入门作业 (三)Ex04——实现地图的简单渲染和唯一值渲染

    文章评论 写评论 sinat_37432938: 可以说非常有参考的意义,谢谢分享 4周前 #2楼 举报回复查看回复(1) domen_dragon 回复 sinat_37432938: 哈哈,谢谢夸 ...

  9. 基于ArcEngine与C#的鹰眼地图实现

    鹰眼图是对全局地图的一种概略表达,具有与全局地图的空间参考和空间范围.为了更好起到空间提示和导航作用,有些还具备全局地图中重要地理要素,如主要河流.道路等的概略表达.通过两个axMapControl控 ...

最新文章

  1. 《麻省理工科技评论》:2018年18大科技趋势,2017年7大失败技术
  2. Windbg学习 (0x0013) 扩展命令-SOS
  3. vc++ 将可执行文件链接到 DLL
  4. linux用户ftp失败,vsftpd本地用户登录密码错误的解决方法
  5. ​KDD 2020 开源论文 | 图神经网络多变量时序预测
  6. python的threading库_python标准库介绍——31 threading 模块详解
  7. 2020年十月下旬,再次更新了自己的linkedin工作经历
  8. 万字图解Java多线程,不信你学不会!
  9. python语法学习_python语法学习笔记
  10. leetcode刷题:删除链表中的节点
  11. 1.3 谈谈你对MVC的理解
  12. 打开SVN server图形化管理界面
  13. 操作系统的基本类型、工作流程及其优缺点
  14. 【每日一题】一起冲击蓝桥杯吧——Day1【蓝桥真题】
  15. isalpha、isalnum、islower、isupper等字符函数
  16. Deep Learning论文翻译(Nature Deep Review)
  17. win7计算机资源管理器卡住,如何解决win7系统资源管理器已停止工作的问题
  18. ICP域名备案查询 分享一个可以快速批量查询域名备案信息的平台
  19. 将NV21图像某一区域变黑色
  20. SwiftUI 问答之更改 TabView 选项卡时如何运行函数

热门文章

  1. 微信小程序---家庭记账本开发(一)
  2. google skia
  3. R语言绘制等值线和等高线
  4. 常见机器学习模型适用场景及优缺点
  5. html:select 标签的基本用法
  6. 【Redis实战】认识Redis中的全局哈希表
  7. 麦克风离计算机主机多远,唱歌的时候,嘴离麦克风多远最好听?
  8. SaaS企业如何降低客户流失率?
  9. Uinux/linux vi保存退出命令 (如何退出vi)
  10. 都0202年了,还在用Office2010/2016吗?手把手教你使用Office Tool Plus部署Microsoft Office 365,简单快速!