也谈鹰眼(AE+C#)

最近,看到打听鹰眼问题的朋友特别多。AE+C#的鹰眼在网上代码已经很多了,我今天也放一个版本上 来,主要有以下几个功能:

1.主地图窗口视图范围改变后,鹰眼窗口绘制一个红色的框显示当前区域;

2.主地图比例尺发生改变后,鹰眼地图的比例尺也发生改变,只是改变的程度将小而已;(这和网上其 它代码不同,借鉴google地图鹰眼的显示效果)

3.在鹰眼地图上,用鼠标左键可以移动红色的区域框,松开鼠标后,主窗口地图视图范围更新为移动 后的框的范围;

4.在鹰眼地图上,用鼠标右键可以拉一个框,主窗口视图范围更新为这个框的范围。

好了,话不多话,全代码放出:

1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Text;
  7 using System.Windows.Forms;
  8 using ESRI.ArcGIS.Carto;
  9 using ESRI.ArcGIS.Geometry;
  10 using ESRI.ArcGIS.Display;
  11 using ESRI.ArcGIS.esriSystem;
  12
  13 namespace WindowsFormsApplication19
  14 {
  15     public partial class Form1 : Form
  16     {
  17         public Form1()
  18         {
  19             InitializeComponent();
  20         }
  21
  22
  23         private void Form1_Load(object sender, EventArgs e)
  24         {
  25             AddLayerToOverViewMap();  //加入地图到鹰眼里
  26         }
  27
  28
  29         /// <summary>
  30         /// 主地图更换时,更新鹰眼窗口
  31         /// </summary>
  32         /// <param name="sender"></param>
  33         /// <param name="e"></param>
  34         private void MainMapControl_OnMapReplaced(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvent e)
  35         {
  36             AddLayerToOverViewMap();
  37         }
  38         /// <summary>
  39         /// 把地图加到鹰眼里
  40         /// </summary>
  41         private void AddLayerToOverViewMap()
  42         {
  43             OverViewMapControl.ClearLayers();
  44             for (int i = 0; i < MainMapControl.LayerCount; i++)
  45             {
  46                 IObjectCopy objectcopy = new ObjectCopyClass();
  47                 object toCopyLayer = MainMapControl.get_Layer (i);
  48                 object copiedLayer = objectcopy.Copy (toCopyLayer);
  49                 ILayer C = (new FeatureLayerClass()) as ILayer;
  50                 object toOverwriteLayer = C;
  51                 objectcopy.Overwrite(copiedLayer, ref toOverwriteLayer);
  52                 OverViewMapControl.AddLayer(C, i);
  53             }
  54         }
  55
  56         /// <summary>
  57         /// 主地图窗口视图范围发生改变后,更新鹰眼上的红色矩形框
  58         /// </summary>
  59         /// <param name="sender"></param>
  60         /// <param name="e"></param>
  61         private void MainMapControl_OnExtentUpdated(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e)
  62         {
  63             try
  64             {
  65                 IGraphicsContainer pGraphicsContainer = OverViewMapControl.Map as IGraphicsContainer;
  66                 IActiveView pAv = pGraphicsContainer as IActiveView;
  67                 pGraphicsContainer.DeleteAllElements();
  68                 IRectangleElement pRecElement = new RectangleElementClass();
  69                 IElement pEle = pRecElement as IElement;
  70                 pEle.Geometry = e.newEnvelope as IEnvelope;
  71
  72                 IEnvelope mm = new EnvelopeClass();
  73                 mm.XMax = pEle.Geometry.Envelope.XMax + 3;
  74                 mm.XMin = pEle.Geometry.Envelope.XMin - 3;
  75                 mm.YMax = pEle.Geometry.Envelope.YMax + 3;
  76                 mm.YMin = pEle.Geometry.Envelope.YMin - 3;
  77                 OverViewMapControl.Extent = mm;
  78
  79                 IRgbColor pColor = new RgbColorClass();
  80                 pColor.Red = 200;
  81                 pColor.Green = 0;
  82                 pColor.Blue = 0;
  83                 pColor.Transparency = 255;
  84
  85                 //产生一个线符号对象
  86                 ILineSymbol pLineSymbol = new SimpleLineSymbolClass ();
  87                 pLineSymbol.Width = 2;
  88                 pLineSymbol.Color = pColor;
  89
  90                 //设置填充符号的属性
  91                 IFillSymbol pFillSymbol = new SimpleFillSymbolClass ();
  92
  93                 // 设置透明颜色
  94                 pColor.Transparency = 0;
  95                 pFillSymbol.Color = pColor;
  96                 pFillSymbol.Outline = pLineSymbol;
  97
  98                 //
  99                 IFillShapeElement pFillShapeElement = pRecElement as IFillShapeElement;
100                 pFillShapeElement.Symbol = pFillSymbol;
101
102                 pGraphicsContainer.AddElement(pEle, 0);
103                 OverViewMapControl.ActiveView.PartialRefresh (esriViewDrawPhase.esriViewGraphics, null, null);
104
105                 //
106             }
107             catch (Exception ey)
108             {
109             }
110         }
111
112         /// <summary>
113         /// 鹰眼窗口,用鼠标右键拉框,更改主窗口当前视图范围
114         /// </summary>
115         /// <param name="sender"></param>
116         /// <param name="e"></param>
117         private void OverViewMapControl_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e)
118         {
119             #region 鹰眼
120             if (e.button == 2)
121             {
122                 try
123                 {
124                     IPoint pPt = new PointClass();
125                     pPt.X = e.mapX;
126                     pPt.Y = e.mapY;
127                     IEnvelope pEnvelope = OverViewMapControl.TrackRectangle();
128                     MainMapControl.Extent = pEnvelope;
129                 }
130                 catch
131                 { }
132             }
133             #endregion
134         }
135
136         /// <summary>
137         /// 鹰眼窗口,用鼠标左键移动视图范围
138         /// </summary>
139         /// <param name="sender"></param>
140         /// <param name="e"></param>
141         private void OverViewMapControl_OnMouseMove(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e)
142         {
143
144             if (e.button == 1)
145             {
146                 try
147                 {
148                     IPoint pPt = new PointClass();
149                     pPt.X = e.mapX;
150                     pPt.Y = e.mapY;
151                     //
152                     IEnvelope pEnvelope = MainMapControl.Extent as IEnvelope;
153                     pEnvelope.CenterAt(pPt);
154                     IActiveView pAv;
155                     IGraphicsContainer pGraphicsContainer = OverViewMapControl.Map as IGraphicsContainer;
156                     pAv = pGraphicsContainer as IActiveView;
157                     pGraphicsContainer.DeleteAllElements();
158                     IRectangleElement pRecElement = new RectangleElementClass();
159                     IElement pEle = pRecElement as IElement;
160                     pEle.Geometry = pEnvelope;
161                     //颜色
162                     IRgbColor pColor = new RgbColorClass();
163                     pColor.Red = 200;
164                     pColor.Green = 0;
165                     pColor.Blue = 0;
166                     pColor.Transparency = 255;
167
168                     //产生一个线符号对象
169                     ILineSymbol pLineSymbol = new SimpleLineSymbolClass();
170                     pLineSymbol.Width = 2;
171                     pLineSymbol.Color = pColor;
172
173                     //设置填充符号的属性
174                     IFillSymbol pFillSymbol = new SimpleFillSymbolClass();
175
176                     // 设置透明颜色
177                     pColor.Transparency = 0;
178                     pFillSymbol.Color = pColor;
179                     pFillSymbol.Outline = pLineSymbol;
180
181                     //
182                     IFillShapeElement pFillShapeElement = pRecElement as IFillShapeElement;
183                     pFillShapeElement.Symbol = pFillSymbol;
184
185                     pGraphicsContainer.AddElement(pEle, 0);
186                     OverViewMapControl.ActiveView.PartialRefresh (esriViewDrawPhase.esriViewGraphics, null, null);
187
188                 }
189                 catch
190                 {
191                 }
192             }
193
194
195         }
196
197         /// <summary>
198         /// 鹰眼窗口,左键移动视图框后,更新主窗口
199         /// </summary>
200         /// <param name="sender"></param>
201         /// <param name="e"></param>
202         private void OverViewMapControl_OnMouseUp(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseUpEvent e)
203         {
204             #region 鹰眼
205             if (e.button == 1)
206             {
207                 try
208                 {
209                     IPoint pPt = new PointClass();
210                     pPt.X = e.mapX;
211                     pPt.Y = e.mapY;
212
213                     IEnvelope pEnvelope = MainMapControl.Extent as IEnvelope;
214                     pEnvelope.CenterAt(pPt);
215                     MainMapControl.Extent = pEnvelope;
216                 }
217                 catch
218                 {
219                 }
220             }
221             #endregion
222         }
223
224     }
225 }
226

时间: 2024-12-12 09:17:33

也谈鹰眼(AE+C#)的相关文章

AE开发,鹰眼,提示报错

问题描述 IGraphicsContainerpGraphicsContainer=axMapControl2.MapasIGraphicsContainer;处提示报错引发类型为"System.Windows.Forms.AxHost+InvalidActiveXStateException"的异常.将axMapControl2换成axMapControl1可以运行,代码应该没什么问题privatevoidaxMapControl1_OnExtentUpdated(objectsen

从贝叶斯方法谈到贝叶斯网络

从贝叶斯方法谈到贝叶斯网络 0 引言     事实上,介绍贝叶斯定理.贝叶斯方法.贝叶斯推断的资料.书籍不少,比如<数理统计学简史>,以及<统计决策论及贝叶斯分析 James O.Berger著>等等,然介绍贝叶斯网络的中文资料则非常少,中文书籍总共也没几本,有的多是英文资料,但初学者一上来就扔给他一堆英文论文,因无基础和语言的障碍而读得异常吃力导致无法继续读下去则是非常可惜的(当然,有了一定的基础后,便可阅读更多的英文资料).     11月9日上午,机器学习班第9次课,邹博讲贝

百度鹰眼日前与MTK合作

摘要: 百度鹰眼日前与MTK合作,针对LBS的应用推出更新的室内外导航方案,用于可穿戴智能硬件产品. 据称,在应用了新的方案之后,可从两个方面改善用户的使用体验: 1.待机时间延长至 百度鹰眼日前与MTK合作,针对LBS的应用推出更新的室内外导航方案,用于可穿戴智能硬件产品. 据称,在应用了新的方案之后,可从两个方面改善用户的使用体验: 1.待机时间延长至原来的2-3倍.新的方案通过对节电算法优化及 GPS .WIFI.蓝牙等设备的控制,使得设备在工作时耗电量成倍减少.据称,电池使用时间可从原来

鹰眼跟踪、EDAS燎原, 看高性能服务框架EDAS的架构实践

本文主要从高速增长的阿里业务开始谈起,讲述当年面对的业务场景和背景,碰到了什么样的技术挑战,且用什么样的思路去解决它,最后和大家分享了解决后产生的产品Aliware中非常重要的EDAS. 直播视频:点此进入 PDF下载:点此进入 以下是演讲内容整理:   高速业务增长带来的挑战 大型电子商务平台吸引了大量卖家和买家,图为2014年IPO时候截得的图,可以看到在阿里上有10亿多件商品等,现在仍然以非常高的速度在增长. 图为2003年到2010年淘宝网注册用户数,用户数从非常低的值逐渐涨到近4000

扯谈web安全之JSON

前言 JSON(JavaScript Object Notation),可以说是事实的浏览器,服务器交换数据的标准了.目测其它的格式如XML,或者其它自定义的格式会越来越少. 为什么JSON这么流行? 和JavaScript无缝对接是一个原因. 还有一个重要原因是可以比较轻松的实现跨域.如果是XML,或者其它专有格式,则很难实现跨域,要通过flash之类来实现. 任何一种数据格式,如何解析处理不当,都会存在安全漏洞.下面扯谈下JSON相关的一些安全东东. 在介绍之前,先来提几个问题: 为什么XM

商汤研发总监林倞:20张PPT谈四大领域产业布局|2016 CAIIC

编者按:12月17日,中国人工智能产业大会在深圳召开,商汤科技首席研发总监林倞出席大会并发表演讲.他主要讲述了商汤科技在原创性技术上的深厚积累及在四大领域的产业布局. 林倞,商汤科技首席研发总监,中山大学教授,国家优秀青年基金获得者.2008年博士毕业于北京理工大学,分别于2006-2007.2008-2010年在美国加州大学洛杉矶分校学习和工作(合作导师为朱松纯教授),2014-2015年在香港理工大学.香港中文大学访问.长期从事视觉感知计算与智能学习相关领域的研究,在物体/场景结构化解析.深

鹰眼:从电信诈骗入手,解决用户关乎“身家性命”的大事

首先,来看看2015年有关我国电信诈骗案件的一些消息: 2015年3月28日下午5点多,女教师方某怀揣一张自证清白的字条,在普兰店市普湾新区九七立交桥附近一小区楼上跳下,结束了自己的生命,原因竟是涉嫌短信诈骗. 5月3日,有网友发帖称:美国芭比娃娃总部派人来温州,向温州鹿城警方报案,称有320万美元被骗,钱被汇到温州银行. 8月10日,85岁的张爷爷没有想到,接听了一个诈骗电话后,他被人忽悠着将房子以低价卖给了一家公司.现在,自称是买主的人拿着房本,闯入老人家里,催他赶紧搬走. 2016年伊始,

怎么让地图加载的时候可以直接显示全局范围,怎么让鹰眼窗口自动同步主窗口的地图

问题描述 RT,新手求教,第一:怎么让地图加载的时候可以直接显示全局范围,也就是在窗口显示整个地图.第二:怎么让鹰眼窗口自动同步主窗口的地图,也就是手动加载主窗口地图的时候,鹰眼窗口自动加载相同的地图,并显示全局范围?关于第二个问题我尝试了用以下代码,是根据ARCGIS改的,但是还不通privatevoidmapControl1_PaddingChanged(objectsender,EventArgse){//当主地图显示控件的地图更换时,鹰眼中的地图也跟随更换//加载同样的文档到MapCon

(二十一)WebGIS中鹰眼的实现思路

 文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 鹰眼功能是WebGIS中的一种常见功能,利用一些开源的框架实现起来非常方便.当然,按照博主从底层谈WebGIS这套系列的风格,在这里还是跟大家一起探讨探讨不借助第三方框架开发鹰眼的简单实现思路. 2.鹰眼功能分析                         3.实现思路设计 3.1主图平移时与鹰眼图的联动 a.主图进行平移时,在平移完成后抛出地图平移事件