||
鹰眼功能包括:
(1)当主视图中的地图发生变化时,鹰眼视图中的地图也要变化。
(2)鹰眼视图中画一个红色矩形框,红色矩形框的范围表示主视图中的地图范围。
(3)当鹰眼地图中移动红色矩形框时,主视图中的地图范围要发生相应变化;用鼠标右键在鹰眼视图中改变红色矩形框的大小时,主视图中的地图也要进行刷新显示。
首先,定义两个鼠标事件参数,ed、eu。然后预定义三个方法,分别是(1)主视图与鹰眼视图地图同步显示的TbGeoMap();(2)显示红色矩形框的DrawRec();(3)鹰眼地图中移动红色矩形框的方法,MoveEagl();
代码如下:
IMapControlEvents2_OnMouseDownEvent ed; public IMapControlEvents2_OnMouseDownEvent Ed { get { return ed; } set { ed = value; } } IMapControlEvents2_OnExtentUpdatedEvent eu; public IMapControlEvents2_OnExtentUpdatedEvent Eu { get { return eu; } set { eu = value; } } public void TbGeoMap()//主视图与鹰眼视图地图同步 { IMap pMap = axMapControl1.Map; int i; for (i = 0; i <= pMap.LayerCount - 1; i++) { axMapControl2.Map.AddLayer(pMap.get_Layer(i)); } axMapControl2.Extent = axMapControl2.FullExtent;//全图显示 axMapControl2.Refresh(); } public void DrawRec() { IGraphicsContainer pGraphicsContainer = axMapControl2.Map as IGraphicsContainer; IActiveView pAv = pGraphicsContainer as IActiveView; pGraphicsContainer.DeleteAllElements(); IRectangleElement pRecElement = new RectangleElementClass(); IElement pEle = pRecElement as IElement; IEnvelope pEnv = eu.newEnvelope as IEnvelope; pEle.Geometry = pEnv; IRgbColor pColor = new RgbColorClass(); pColor = GetRGB(200, 0, 0); pColor.Transparency = 255; ILineSymbol pLineSymbol = new SimpleLineSymbolClass(); pLineSymbol.Width = 2; pLineSymbol.Color = pColor; IFillSymbol pFillSymbol = new SimpleFillSymbolClass(); pColor.Transparency = 0; pFillSymbol.Color = pColor; pFillSymbol.Outline = pLineSymbol; IFillShapeElement pFillShapeElement = pRecElement as IFillShapeElement; pFillShapeElement.Symbol = pFillSymbol; pGraphicsContainer.AddElement(pEle, 0); axMapControl2.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); } public void MoveEagl() { if (ed.button == 1)//鼠标左键 { IPoint pPt = new PointClass(); pPt.X = ed.mapX; pPt.Y = ed.mapY; IEnvelope pEnvelope = axMapControl1.Extent as IEnvelope; pEnvelope.CenterAt(pPt); axMapControl1.Extent = pEnvelope; axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); } else if (ed.button == 2) { IEnvelope pEnvelope = axMapControl2.TrackRectangle(); axMapControl1.Extent = pEnvelope; axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); } }
最后,在地图控件的事件代码中添加对方法的调用,以及鼠标事件参数属性值的赋值。
private void axMapControl1_OnMapReplaced(object sender, IMapControlEvents2_OnMapReplacedEvent e) { TbGeoMap(); } private void axMapControl1_OnExtentUpdated(object sender, IMapControlEvents2_OnExtentUpdatedEvent e) { eu = e; TbGeoMap(); DrawRec(); } private void axMapControl2_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e) { ed = e; MoveEagl(); }
鹰眼窗口的图层顺序会和主视图中的图层顺序相反,需要改一下鹰眼窗口中添加图层的顺序。
public void TbGeoMap()//主视图与鹰眼视图地图同步 { IMap pMap = axMapControl1.Map; int i; for (i = pMap.LayerCount - 1; i >=0 ; i--) { axMapControl2.Map.AddLayer(pMap.get_Layer(i)); } axMapControl2.Extent = axMapControl2.FullExtent;//全图显示 axMapControl2.Refresh(); }
P.S.
鹰眼窗口可以设置为浮动窗口,在设置菜单中添加一个菜单,开启/关闭鹰眼窗口。
浮动鹰眼窗口可以是一个windows窗体,也可以直接放在TOC下面(靠近左右下侧)。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-4-20 00:32
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社