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

在开发的系统上有一个小需求,关联两个地图,以分析不同时期相同地点的地物变化,也就是两个axMapControl之间的联动,针对这个需求简单的设计了如下的界面:ArcEngine实现两个地图控件(axMapControl)之间的联动(20190710)_第1张图片
当然,这个界面比较原始,仅仅作为一个原型来说明这一功能,在用图形化界面设置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 。

你可能感兴趣的:(ArcEngine,ArcEngine,地图联动)