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

本文分享了一种简单有效的鹰眼地图控件实现方法。通过在主地图更新或改变显示范围时,同步更新鹰眼视图,以及点击鹰眼视图调整主地图显示范围的功能。代码示例使用了两个MapControl控件,详细介绍了OnExtentUpdated、OnMapReplaced和OnMouseDown事件的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

下图为最终成果图,加载了一个简单的数据试验一下。

分析:主图更新地图或改变显示范围,鸟瞰图随之发生变化;点击鸟瞰图,主图移动到相应的范围进行显示,鸟瞰图上面有红色矩形框。

下面是代码部分。

首先拖入两个MapControl控件,主窗体控件是axMapControl1,鹰眼窗体控件是axMapControl2。

第一步,在axMapControl1属性事件中找到OnExtentUpdated,双击进入代码编写。

private void axMapControl1_OnExtentUpdated(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e)
        {
            IEnvelope pEnvelope = e.newEnvelope as IEnvelope ;
            IGraphicsContainer pContainer = axMapControl2.ActiveView.GraphicsContainer;
            pContainer.DeleteAllElements();

            IRectangleElement pRect = new RectangleElement() as IRectangleElement;
            IElement pElement = pRect as IElement;
            pElement.Geometry = pEnvelope;
            IFillShapeElement shapeElement = pElement as IFillShapeElement;

            //鹰眼窗体里的红色线框设置
            IFillSymbol fill = new SimpleFillSymbol();
            IRgbColor color = new RgbColor() as IRgbColor ;
            color.Transparency = 0;
            fill.Color = color ;
            ILineSymbol line=new SimpleLineSymbol() ;
            color.Red = 255;
            color.Blue = 0;
            color.Green = 0;
            color.Transparency = 255;
            line.Color = color;
            line.Width = 2;
            fill.Outline = line;
            shapeElement.Symbol = fill;

            pContainer.AddElement(pElement, 0);
            axMapControl2.ActiveView.Refresh();//刷新

        }

第二步,在axMapControl1属性事件中找到OnMapReplaced事件,双击进入代码编写。

private void axMapControl1_OnMapReplaced(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvent e)
        {
            for (int i = 0; i < axMapControl1.Map.LayerCount ; i++)
            {
                axMapControl2.AddLayer(axMapControl1.Map.get_Layer(i));
            }

            axMapControl2.Extent = axMapControl1.Extent;
            axMapControl2.ActiveView.Refresh();

        }

第三步,在axMapControl2属性事件中找到OnMouseDown事件,双击进入代码编写。

private void axMapControl2_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e)
        {
            if (e.button ==1)
            { 
                IPoint point=new ESRI .ArcGIS .Geometry .Point ();
                point.PutCoords(e.mapX, e.mapY);
                axMapControl1.CenterAt(point);
                axMapControl1.ActiveView.Refresh();
            }
        }

注:转载请注明出处

 

          

      

 

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值