ArcGIS Engine 10 开发手册(3-6)鹰眼图的实现

本文目录
  • 正文

鹰眼图的实现用到控件如下::

控件名称

控件类型

备注

axMapControl1

主图

axMapControl2

鸟瞰图

axToolbarControl1

axTOCControl1

实现分析

鹰眼图的操作主要由以下几个动作,当在一个控件中移动一幅图的时候另一控件中的图也发生 变化,当在主控件中重新加载一幅图的时候,另外一个控件的图也发生相应的变化,同时我们在鸟瞰的控 件中加入一红色边框,注意这个其实是一个面,只是填充的颜色是透明的而已。通过分析我们知道,我们 要添加两个 MapControl 控件,名字分别是 axMapControl1 和 axMapControl2,其中 axMapControl1 为主图, 而 axMapControl2 为鸟瞰图。

代码实现

对于名称为 axMapControl1 的 MapControl 控件,只需要在 axMapControl1 的 OnExtentUpdated 和 OnMapReplaced 中分别添加以下代码:

private void axMapControl1_OnExtentUpdated (object sender,IMapControlEvents2_OnExtentUpdatedEvent e)
{
  // 得到新范围
  IEnvelope pEnvelope = (IEnvelope) e.newEnvelope;

  IGraphicsContainer pGraphicsContainer = axMapControl2.Map as IGraphicsContainer;

  IActiveView pActiveView = pGraphicsContainer as IActiveView;

  //在绘制前,清除axMapControl2中的任何图形元素 
  pGraphicsContainer.DeleteAllElements();

  IRectangleElement pRectangleEle = new RectangleElementClass ();
  IElement pElement = pRectangleEle as IElement;
  pElement.Geometry = pEnvelope;

  //设置鹰眼图中的红线框

  IRgbColor pColor = new RgbColorClass ();
  pColor.Red = 255;
  pColor.Green = 0;
  pColor.Blue = 0;
  pColor.Transparency = 255;

  //产生一个线符号对象

  ILineSymbol pOutline = new SimpleLineSymbolClass ();
  pOutline.Width = 3;
  pOutline.Color = pColor;

  //设置颜色属性

  pColor = new RgbColorClass ();
  pColor.Red = 255;
  pColor.Green = 0;
  pColor.Blue = 0;
  pColor.Transparency = 0;

  //设置填充符号的属性

  IFillSymbol pFillSymbol = new SimpleFillSymbolClass ();
  pFillSymbol.Color = pColor;
  pFillSymbol.Outline = pOutline;
  IFillShapeElement pFillShapeEle = pElement as IFillShapeElement;
  pFillShapeEle.Symbol = pFillSymbol;
  pGraphicsContainer.AddElement ((IElement) pFillShapeEle, 0);

  pActiveView.PartialRefresh (esriViewDrawPhase.esriViewGraphics, null,null);

}

private void axMapControl1_OnMapReplaced (object sender,IMapControlEvents2_OnMapReplacedEvent e)
{
  if (axMapControl1.LayerCount > 0)
  {
    axMapControl2.Map = new MapClass ();
    for (int i = 0; i <= axMapControl1.Map.LayerCount - 1; i++)
    {
      axMapControl2.AddLayer (axMapControl1.get\ _Layer (i));
    }
    axMapControl2.Extent = axMapControl1.Extent;
    axMapControl2.Refresh ();
  }
}

对于名称为 axMapControl2 的 MapControl 控件,只需要在 axMapControl2 的 OnMouseMove 和OnMouseDown 中分别添加以下代码:

private void axMapControl2_OnMouseMove (object sender,IMapControlEvents2_OnMouseMoveEvent e)
{
  if (e.button == 1)
  {
    IPoint pPoint = new PointClass ();
    pPoint.PutCoords (e.mapX, e.mapY);
    axMapControl1.CenterAt (pPoint);
    axMapControl1.ActiveView.PartialRefresh (esriViewDrawPhase.esriViewGeography, null, null);
  }
}

private void axMapControl2_OnMouseDown (object sender,IMapControlEvents2_OnMouseDownEvent e)
{
  if (axMapControl2.Map.LayerCount > 0)
  {
    if (e.button == 1)
    {
      IPoint pPoint = new PointClass ();
      pPoint.PutCoords (e.mapX, e.mapY);
      axMapControl1.CenterAt (pPoint);
      axMapControl1.ActiveView.PartialRefresh (esriViewDrawPhase.esriViewGeography, null, null);
    } 
    else if (e.button == 2)
    {
      IEnvelope pEnv = axMapControl2.TrackRectangle ();
      axMapControl1.Extent = pEnv;
      axMapControl1.ActiveView.PartialRefresh (esriViewDrawPhase.esriViewGeography, null, null);
    }
  }
}

运行结果

运行后的效果如下:

ArcGIS Engine 10 开发手册全集

ArcGIS Engine 10 开发手册全集: ArcGIS Engine 10 开发手册

如您有疑问,可在文末留言,或到QQ群提问。

本站QQ群:291616564 麻辣GIS

微信公众号:malagis,扫描右边二维码直接关注。

微信捐助麻辣GIS 支付宝捐助麻辣GIS

如果本文对您有所帮助,欢迎对我们团队进行打赏捐助,让我们在传播3S的路上可以走得更远。


作者:,GIS爱好者。
分享本文,请您带上本文链接

发表评论