C# AE开发 (二):实现地图的放大缩小漫游

C# AE开发 (二):实现地图的放大缩小漫游

使用C#编程实现AE开发的一系列地图视图操作。
包括:地图的放大缩小、按照矩形框放大缩小、移动、全局显示

一、地图的放大缩小

  • 放大(Zoom In)
 private void zoomInToolStripMenuItem_Click(object sender, EventArgs e)
        {
            IEnvelope pEnvelop = axMapControl1.Extent;//Extent当前窗口的地图范围 返回envelope对象
            //调用接口 几何对象类库
            pEnvelop.Expand(0.5, 0.5, true);//X、Y方向按比例被放大成原来的0.5倍
            axMapControl1.Extent = pEnvelop;
            axMapControl1.Refresh();
        }
  • 缩小(Zoom Out)
 IEnvelope pEnvelop = axMapControl1.Extent;
            pEnvelop.Expand(1.5, 1.5, true);
            axMapControl1.Extent = pEnvelop;//当前窗口的范围变成缩小后的范围
            axMapControl1.Refresh();

二、按照矩形框放大缩小、平移及全局显示

在画矩形框时会激发axmapcontrol的mousedown事件,激发了控件的mousedown事件后才后续实现具体的放大、缩小、平移等操作。故点击不同的菜单按钮都会进入axMapControl1_OnMouseDown函数,只不过执行的具体函数内容有所差异。代码通过两部分函数来实现:

2.1 菜单按钮对应的函数:

点击不同的菜单按钮都会激发控件的mousedown事件,所以定义一个toolAction字段,以区分不同功能。

  • 按矩形框放大(Drag Zoom In)
 private void dragZoomInToolStripMenuItem_Click(object sender, EventArgs e)
        {
            toolAction = "Drag Zoom In";//在控件中拉框  激发mousedown事件
        }
  • 按矩形框缩小(Drag Zoom Out)
private void dragZoomOutToolStripMenuItem_Click(object sender, EventArgs e)
        {
            toolAction = "Drag Zoom Out";
        }
  • 平移(Pan)
private void panToolStripMenuItem_Click(object sender, EventArgs e)
     {
         toolAction = "Pan";
     }
  • 全局显示(Full Map)
private void fullMapToolStripMenuItem_Click(object sender, EventArgs e)
       {
           toolAction = "Full Map";
       }

2.2 mousedown事件函数

通过对toolAction进行不同的赋值,实现在mousedown事件区分不同的操作。

private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
       {
           switch (toolAction)
           {
               case "Drag Zoom In":
                   IEnvelope pEnvelop = axMapControl1.TrackRectangle();//返回Ienvelope接口

                   if (pEnvelop == null | pEnvelop.IsEmpty || pEnvelop.Height == 0 || pEnvelop.Width == 0)//若没拉框、返回空  拉框没内容、拉了一个直线
                   {
                       return;
                   }
                   axMapControl1.Extent = pEnvelop;//Extent等于当前框的范围
                   break;
               case "Drag Zoom Out":
                   IEnvelope pEnvelop2 = axMapControl1.TrackRectangle();//返回Ienvelope接口
                   if (pEnvelop2 == null || pEnvelop2.IsEmpty || pEnvelop2.Height == 0 || pEnvelop2.Width == 0)
                   {
                       return;
                   }
                   double x_scale = axMapControl1.Extent.Width / pEnvelop2.Width;//XY尺寸
                   double y_scale = axMapControl1.Extent.Height / pEnvelop2.Width;
                   //新窗口的高度宽度=原地图窗口*比例
                   double width = axMapControl1.Extent.Width * x_scale;
                   double height = axMapControl1.Extent.Width * y_scale;
                   //找到窗口的最小值 即XY的最小值
                   double x_min = pEnvelop2.XMin - (pEnvelop2.XMin - axMapControl1.Extent.XMin) * x_scale;
                   double y_min = pEnvelop2.YMin - (pEnvelop2.YMin - axMapControl1.Extent.YMin) * y_scale;

                   //取矩形框的取最大值
                   double x_max = x_min + width;
                   double y_max = y_min + height;

                   //新的envelop
                   pEnvelop2.PutCoords(x_min, y_min, x_max, y_max);
                   axMapControl1.Extent = pEnvelop2;
                   axMapControl1.Refresh();
                   break;
               case "Pan": //实现平移
                   axMapControl1.Pan();
                   axMapControl1.Refresh();
                   break;
               case "Full Map":
                   axMapControl1.Extent = axMapControl1.FullExtent;//FullExtent存放当前地图文档的整个范围
                   axMapControl1.Refresh();
                   break;
           }
       }
  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值