二、Arcgis engine-MapControl控件(下)

数据选择

按形状选择

SelectByShape是IMap定义的一个方法,它可以选择控件中所有图层上处于选择范围内的要素,并将其设置为一个选择集。代码同样写在axMapControl的OnMouseDown事件下。

  	        axMapControl1.MousePointer = esriControlsMousePointer.esriPointerCrosshair;
                IGeometry pGemo = axMapControl1.TrackPolygon();
                axMapControl1.Map.SelectByShape(pGemo, null, false);
                axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);

清除选择集

	    axMapControl1.Map.ClearSelection();
            axMapControl1.ActiveView.Refresh();

鹰眼功能

主要控件:主控件axMapControl1和鹰眼控件axMapControl2。
技术难点:一是如何使两个控件的数据保持一致,二是如何在鹰眼控件中绘制方框。
实现两个控件的数据共享:
思路是当主控件加载地图或者是地图发生改变时,通过循环逐图册添加到鹰眼控件中。

 private void axMapControl1_OnMapReplaced(object sender, IMapControlEvents2_OnMapReplacedEvent e)
        {
            IMap pMap = axMapControl1.Map;//获取主控件当前的地图
            for(int i=0;i<=pMap.LayerCount-1;i++)
            {
                axMapControl2.Map.AddLayer(pMap.get_Layer(i));
            }
        }

主窗体视图发生变化后,触发控件的OnExtentUndated事件,绘制方框:

 private void axMapControl1_OnExtentUpdated(object sender, IMapControlEvents2_OnExtentUpdatedEvent e)
        {
            IEnvelope pEnv = e.newEnvelope as IEnvelope;//获取主控件的显示范围
            IGraphicsContainer pGraphicsContainer = axMapControl2.Map as IGraphicsContainer;
             IActiveView pActiveView = pGraphicsContainer as IActiveView;
             pGraphicsContainer.DeleteAllElements();//绘制新的矩形框前,清除Map对象中的任何图形要素
            IRectangleElement pRectangleElement = new RectangleElementClass();//实例化一个矩形要素
            IElement pElement = pRectangleElement as IElement;
            pElement.Geometry = pEnv;
            IRgbColor pColor = new RgbColorClass();//设置边框颜色
            pColor.RGB=255;pColor.Transparency = 255;
            ILineSymbol pOutLine = new SimpleLineSymbolClass();//产生线符号对象
            pOutLine.Width = 2;pOutLine.Color = pColor;//设置线符号的属性
            pColor.RGB = 255; pColor.Transparency =0;//设置填充框的颜色
            IFillSymbol pFillSymbol = new SimpleFillSymbolClass();
            pFillSymbol.Color = pColor;
            pFillSymbol.Outline = pOutLine;
            IFillShapeElement pFillShapeElement = pElement as IFillShapeElement;
            pFillShapeElement.Symbol = pFillSymbol;
            pElement = pFillShapeElement as IElement;
            pGraphicsContainer.AddElement(pElement, 0);
            pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
            }

运行结果见下图:
在这里插入图片描述
至此仅实现了鹰眼控件中显示主控件中的范围,还未实现拖动鹰眼控件中的方框来改变主控件的显示范围,先留个坑,后面再补。
要素选择部分ArcMap中提供了按属性选择等其它方法,后面会单独写一篇博来总结。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值