数据选择
按形状选择
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中提供了按属性选择等其它方法,后面会单独写一篇博来总结。