文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>ArcEngine开发——地图浏览

ArcEngine开发——地图浏览

时间:2010-11-28  来源:韩锁

      先上效果图,如下:

     

      用ArcEngine内置的Command控件来实现上图所示功能简直易如反掌,实例化对应的Command对象并显式的运行它,即可。比如中心放大和前一视图功能的实现代码如下:

        //中心放大
        ESRI.ArcGIS.SystemUI.ICommand pCmd = new ControlsMapZoomInFixedCommandClass();
           pCmd.OnCreate(pMapControl.Object);
           pCmd.OnClick();
 
            //前一视图
         ESRI.ArcGIS.SystemUI.ICommand pCmd = new ControlsMapZoomToLastExtentBackCommandClass();
            pCmd.OnCreate(pMapControl.Object);
            pCmd.OnClick();
 
    其它几个浏览功能如中心缩小、拉框缩小、漫游、后一视图、全幅显示等都可以按同样的方式来实现,就不一一列举了。下面讲解一下实现地图浏览功能的其它方式。
    中心放大功能。放大功能实际上是缩小了显式窗口中的显示范围。可利用IEnvelope接口的Expand方法,功能实现代码如下:
         //中心放大
         pIClone = (IClone)axMapControl1.Extent;
            pIEnvelope = (IEnvelope)pIClone.Clone();
            pIEnvelope.Expand(0.5, 0.5, true);
            axMapControl1.Extent = pIEnvelope;
    除此之外,还可以利用IEnvelope接口的PutCoords方法,功能实现代码如下:
         dWidth = axMapControl1.Extent.Width;
            dHeight = axMapControl1.Extent.Height;
            pIEnvelope = new EnvelopeClass();
            pIEnvelope.PutCoords(axMapControl1.Extent.XMin + dWidth / 4, axMapControl1.Extent.YMin + dHeight / 4, axMapControl1.Extent.XMax - dWidth / 4, axMapControl1.Extent.YMax - dHeight / 4);
            axMapControl1.Extent = pIEnvelope;
    
    拉框放大功能。该功能的实现很简单,单单这一句axMapControl1.Extent = axMapControl1.TrackRectangle()就可以了。
   拉框缩小功能。该功能的实现稍微麻烦一些。也是利用IEnvelope接口的PutCoords方法,重新确定地图显示范围。代码如下:
         pRectangle = axMapControl1.TrackRectangle();
            dWidth=axMapControl1.Extent.Width*(axMapControl1.Extent.Width/pRectangle.Width);
            dHeight = axMapControl1.Extent.Height * (axMapControl1.Extent.Height / pRectangle.Height);
            pIEnvelope = new EnvelopeClass();
            @pIEnvelope.PutCoords(axMapControl1.Extent.XMin-(pRectangle.XMin - axMapControl1.Extent.XMin) * (axMapControl1.Extent.Width / pRectangle.Width),
            axMapControl1.Extent.YMin-(pRectangle.YMin - axMapControl1.Extent.YMin) * (axMapControl1.Extent.Height / pRectangle.Height),
            axMapControl1.Extent.XMin - (pRectangle.XMin - axMapControl1.Extent.XMin) * (axMapControl1.Extent.Width / pRectangle.Width) + dWidth,
            axMapControl1.Extent.YMin - (pRectangle.YMin - axMapControl1.Extent.YMin) * (axMapControl1.Extent.Height / pRectangle.Height) + dHeight);
            axMapControl1.Extent = pIEnvelope;
    历史视图功能。可利用IExtentStack接口的Undo和Redo方法来实现。只需要在地图视图发生变化时,将视图范围存储于一个相应的堆栈里面,然后利用Undo和Redo方法切换到对应的历史视图。
   在地图窗口的OnExtentUpdated事件里添加该代码:pExtentStack = axMapControl1.ActiveView.ExtentStack;前一视图的实现代码如下:
            if (pExtentStack.CanUndo())
            {
                pExtentStack.Undo();
                axMapControl1.ActiveView.Refresh();
            }
 
    其它功能代码都是与上述代码类似。不再详细给出实现代码了。
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载