注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

程序员驿站

淘宝店:http://shop106888457.taobao.com

 
 
 

日志

 
 

ArcEngine开发——地图浏览  

2013-06-27 17:36:13|  分类: ArcEngine |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

ArcEngine开发——地图浏览

作者: 韩锁  时间: 2010-11-28

出处:http://www.cnblogs.com/hans_gis/archive/2010/11/28/1890235.html

      先上效果图,如下:

      

ArcEngine开发——地图浏览 - dingtao-wgs - 程序员驿站

 

      用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();
            }
 
    其它功能代码都是与上述代码类似。不再详细给出实现代码了。
  评论这张
 
阅读(589)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018