Chinaunix首页 | 论坛 | 博客
  • 博客访问: 251637
  • 博文数量: 45
  • 博客积分: 170
  • 博客等级: 入伍新兵
  • 技术积分: 488
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-13 14:43
文章分类

全部博文(45)

文章存档

2014年(2)

2013年(35)

2012年(8)

我的朋友

分类: IT业界

2013-04-23 20:46:10

    利用工具方式进行地图操作,包括两个事件,第一个事件是工具栏上按钮点击事件;第二个事件是MapObjects控件上的操作事件(MouseDown事件)。
    对第一个事件的响应通常是改变鼠标指针的形状,同时记录按钮的功能。
    

点击(此处)折叠或打开

  1. private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
  2.         {
  3.             switch (e.ClickedItem.Name)
  4.             {
  5.                 case "Zoomin":
  6.                     map_mouse_symbol = "zoomin";
  7.                     axMap1.MousePointer = MapObjects2.MousePointerConstants.moZoomIn;
  8.                     break;
  9.                 case "Zoomout":
  10.                     map_mouse_symbol = "zoomout";
  11.                     axMap1.MousePointer = MapObjects2.MousePointerConstants.moZoomOut;
  12.                     break;
  13.                 case "Pan":
  14.                     map_mouse_symbol = "pan";
  15.                     axMap1.MousePointer = MapObjects2.MousePointerConstants.moPan;
  16.                     break;
  17.                 case "FullView":
  18.                     map_mouse_symbol = "fullview";
  19.                     axMap1.MousePointer = MapObjects2.MousePointerConstants.moArrow;
  20.                     axMap1.Extent = axMap1.FullExtent;
  21.                     axMap1.Refresh();
  22.                     break;
  23.             }
  24.         }
    对于第二个事件的响应是根据点击按钮的功能,从而执行相应的代码。如果是放大事件,则利用MapObjects控件的TrackRectangle返回用户在地图上定义的Rectangle,并返回放大后地图的范围;如果是缩小事件,则根据定义的Rectangle大小确定比例,即地图控件高度(或宽度)与用户定义的Rectangle高度(或宽度)之比,Rectangle越小,缩小的比例越大;如果是漫游功能,则利用MapObjects控件的Pan方法。
    

点击(此处)折叠或打开

  1. MapObjects2.Rectangle rect; //范围
  2. switch (axMap1.MousePointer)
  3. {
  4.     //放大
  5.     case MapObjects2.MousePointerConstants.moZoomIn:
  6.     {
  7.          rect = axMap1.TrackRectangle(); //得到鼠标拖动范围
  8.          if (rect == null || rect.Width < 0.00005 || rect.Height < 0.00005) //如果选择区域很小,可以认为是 单击、点选
  9.          {
  10.              rect = axMap1.Extent;
  11.              rect.ScaleRectangle(0.5); //设置放大比例
  12.           }
  13.           axMap1.Extent = rect;
  14.           break;
  15.      }

  16.      //缩小 ,当点击图层缩小时,由于宽度和高度为0,将会发生分母为0错误,用户可自行解决
  17.      case MapObjects2.MousePointerConstants.moZoomOut:
  18.      {
  19.          MapObjects2.Rectangle Tempr;
  20.          Tempr = axMap1.Extent;
  21.          rect = axMap1.TrackRectangle();
  22.          double NewSR;
  23.          if (rect == null || rect.Width < 0.00005 || rect.Height < 0.00005)
  24.          {
  25.              if (axMap1.Extent.Width / rect.Width > axMap1.Extent.Height / rect.Height)
  26.              {
  27.                 NewSR = axMap1.Extent.Height / rect.Height;
  28.              }
  29.              else
  30.              {
  31.                  NewSR = axMap1.Extent.Width / rect.Width;
  32.              }
  33.              Tempr.ScaleRectangle(NewSR);
  34.           }
  35.           else
  36.           {
  37.              Tempr.ScaleRectangle(2.0); //设置缩小比率
  38.           }
  39.           axMap1.Extent = Tempr;
  40.           break;
  41.       }
  42.       //漫游
  43.       case MapObjects2.MousePointerConstants.moPan:
  44.       {
  45.            axMap1.Pan();
  46.            break;
  47.       }


阅读(2318) | 评论(0) | 转发(0) |
0

上一篇:地图与图层

下一篇:查询

给主人留下些什么吧!~~