『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯

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

ArcGIS Engine 10 开发手册(3-6)鹰眼图的实现
鹰眼图的实现用到控件如下:

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

    实现分析

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

    }

  }

}

 

 

     运行结果

     运行后的效果如下:

 

      京ICP备08100627号-22 京公网安备 11010802030428号