ArcEngine实现两个地图控件(axMapControl)之间的联动(20190710)

在开发的系统上有一个小需求,关联两个地图,以分析不同时期相同地点的地物变化,也就是两个axMapControl之间的联动,针对这个需求简单的设计了如下的界面:实现地图联动的界面设计
当然,这个界面比较原始,仅仅作为一个原型来说明这一功能,在用图形化界面设置ArcToolbar的Item属性的时候,一定不要把某些item选择错了,比如FullExtent和Pan,千万不要选成Scene或Global中的FullExtent和Pan,而应该选择Map Nevigation中的相应控件。左边的AxTOCControl和Toolbar绑定左边的MapControl,右边亦是如此。
设计思路分三步,首先就是在左边的leftMapControl的OnViewRefreshed()方法下绑定右侧的rightMapControl,这个很简单:

rightMapControl.Extent = leftMapControl.Extent;
rightMapControl.Refresh();

这样就实现了leftMapControl的范围改变时右边也改变,那么当rightMapControl的范围改变时leftMapControl怎样改变呢,第二步,这就需要一个指示的变量来判定鼠标是在leftMapControl还是在rightMapControl:

private string mapName = "";

//当鼠标在leftMapControl上移动时,将leftMapControl的Name属性值赋给mapName变量
private void leftMapControl_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e)
        {
            mapName = (sender as AxMapControl).Name;
        }

//当鼠标在rightMapControl上移动时,将rightMapControl的Name属性值赋给mapName变量
 private void rightMapControl_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e)
        {
            mapName = (sender as AxMapControl).Name;
        }

最后一步,在leftMapControl和rightMapControl的OnViewRefreshed()方法下根据mapName变量的值执行各自的操作:

 private void leftMapControl_OnViewRefreshed(object sender, IMapControlEvents2_OnViewRefreshedEvent e)
        {
            if (mapName == "leftMapControl")
            {
                rightMapControl.Extent = leftMapControl.Extent;
                rightMapControl.Refresh();
            }
        }
        
        private void rightMapControl_OnViewRefreshed(object sender, IMapControlEvents2_OnViewRefreshedEvent e)
        {
            if (mapName == "rightMapControl")
            {
                leftMapControl.Extent = rightMapControl.Extent;
                leftMapControl.Refresh();
            }
        }

步骤比较简单,很好理解,代码已上传至github: https://github.com/ranhongwu/190710MapControlLink

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值