GIS二次开发实习(一)——鹰眼功能实现
学期末为期2周的实习结束了,对实习要求所做 太湖水资源管理系统 的功能的实现一一做一个记录,今天先来鹰眼部分(细节部分这里就不说了看前面的文章(一))。
实现效果
实现步骤
(一)技术路线
(二)实现步骤
1功能分析
鹰眼,其功能是使用者在大比例尺进行浏览地图时全局显示地图的一个小地图窗口,为使用者提供一个当前浏览地图在全局地图上的相对位置,所以我们分析得以下几个功能。
- 1.1鹰眼窗口全局显示关键图层且不可缩放
加载地图后鹰眼部分全局锁定显示地图,并为防止地图信息过多,只显示关键信息方便浏览。
axMapControl2.AutoMouseWheel = false;//使鼠标中键滚轮无效
- 1.2主图平移缩放时与鹰眼图中范围框(红框)的联动
- a.主图进行平移缩放时,在平移完成后将主图所全局显示的地图地理坐标范围传出。
- b.鹰眼图监听到该平移缩放事件,获取到地图主图传出的地图地理坐标范围后,在对应鹰眼地图上对应地图地理坐标显示范围框(红框),实现鹰眼地图的联动。
- 1.3鹰眼范围框(红框)拖动使主题联动
- a.在鹰眼部分点击鼠标右键,范围框(红框)中心移至鼠标点击中心,传出范围框(红框)相对地图地理坐标范围。
- b.主图监听到范围框(红框)的地图地理坐标范围,将地图全局缩放至改地理坐标范围,实现联动。
- 1.4鹰眼中右键绘制范围框(红框)使主图缩放到所框范围
- a.鹰眼中左键拖动绘制范围框(红框),传出范围框所包含的地理坐标范围
- b.主图中监听到鹰眼中范围框(红框)传来的地理坐标范围,在控件中全局显示。
2添加鹰眼控件
-
(1)在设计视图中,选择splitcontainer控件,即有2个panl的那个容器,将其Dock属性设为Fill。再第二个SplitContainer控件拖到窗体的左窗格,并将其Orientation属性设置为Horizontal,将其Dock属性也设为Fill,如图1。
图1 -
(2)将TOCControl控件, 到splitcontainer2的panl1中,再将2个MapControl控件分别拖入SplitContainer1的Panel2中和SplitContainer2的Panel2中,操作完成后效果如图2所示。
图2
-
(3)在TOCControl1中右键选择属性,将buddy control设置为axMapControl1,如图3.
图3 -
(4)从工具箱中选择MapControl控件并拖到SplitContainer2的Panel2,作为鹰眼控件。最终效果如图4所示。
此外在有两层splitcontainer中的axTOCControl1不能正常显示图层,所以在主窗体的Form1_Load_1事件中加入下如下代码,保证axTOCControl1控件与axMapControl1控件连接并可显示。
private void Form1_Load_1(object sender, EventArgs e) //绑定鹰眼窗体
{
MessageBox.Show("欢迎使用太湖流域水资源信息管理系统!请您先加载地图");
try
{
axTOCControl1.SetBuddyControl(axMapControl1);
CreateOverviewSymbol(); //矩形框创建函数调用
}
catch {
MessageBox.Show("请先加载地图文件");}
}
3代码的实现
- 3.1申明一个画矩形框的函数,以便鹰眼中的范围框(红框)调用。代码及详细说明如下
private void CreateOverviewSymbol()