1. 功能简介
地图范围设置的监听就是通过IMapControlEvents接口对地图的视图范围更新或者地图的分辨率发生变化进行监听,然后做出相应的操作。
图层事件的监听就是通过IActiveViewEvents接口对地图的添加,删除和移动图层操作进行监听,然后做出相应操作,例如鹰眼图,当监听主地图添加一个新图层数据时,鹰眼图就可以通过将新图层显示在鹰眼图中。
2. 功能实现说明
2.1. 实现思路及原理说明
第一步 |
绑定地图视图事件,添加地图控制的监听事件 |
第二步 |
根据不同的事件进行不同的功能操作 |
2.2. 核心接口与方法
接口/类 |
方法/属性 |
说明 |
PIE.Carto.IActiveViewEvents |
OnLayerAdded |
图层添加事件 |
OnLayerDeleted |
图层删除事件 |
|
OnLayerReordered |
图层排序事件 |
|
PIE.AxControls.IMapControlEvents |
OnExtentUpdated |
视图更新事件 |
OnResolutionUpdated |
视图分辨率更新事件 |
2.3. 示例代码
项目路径 |
百度云盘地址下/PIE示例程序/02.地图操作/02.地图图层控制/PIEMapLayerControlDemo |
数据路径 |
百度云盘地址下/PIE示例数据/栅格数据/04.World/World.tif |
视频路径 |
百度云盘地址下/PIE视频教程/02.地图操作/03.地图范围设置和图层事件监听.avi |
示例代码 |
|
1 /// <summary> 2 /// 构造函数 3 /// </summary> 4 public FormMain() 5 { 6 InitializeComponent(); 7 tocControlMain.SetBuddyControl(mapControlMain as PIE.Carto.IPmdContents); 8 //图层控制监听事件 9 IActiveViewEvents activeViewEvents = mapControlMain.FocusMap as PIE.Carto.IActiveViewEvents; 10 activeViewEvents.OnLayerAdded += MapControl_OnLayerAdded;//图层添加事件 11 activeViewEvents.OnLayerDeleted += MapControl_OnLayerDeleted;//图层删除事件 12 activeViewEvents.OnLayerReordered+=MapControl_OnLayerReordered; //图层排序事件 13 //地图范围变化监听事件 14 PIE.AxControls.IMapControlEvents mapControlEvent= mapControlMain as PIE.AxControls.IMapControlEvents; mapControlEvent.OnExtentUpdated+=mapControlEvent_OnExtentUpdated;//地图范围变化事件 15 mapControlEvent.OnResolutionUpdated+=mapControlEvent_OnResolutionUpdated;//地图分辨率更新事件 16 } 17 18 /// <summary> 19 /// 图层添加事件(图层添加后会触发该事件) 20 /// </summary> 21 /// <param name="layer"></param> 22 private void MapControl_OnLayerAdded(ILayer layer) 23 { 24 string str = string.Format("添加{0}图层", layer.Name); 25 MessageBox.Show(str,"提示"); 26 } 27 /// <summary> 28 /// 图层移除事件 (地图删除后会触发该事件) 29 /// </summary> 30 /// <param name="layer"></param> 31 private void MapControl_OnLayerDeleted(ILayer layer) 32 { 33 string str = string.Format("删除{0}图层", layer.Name); 34 MessageBox.Show(str, "提示"); 35 } 36 /// <summary> 37 /// 图层排序事件(当图层移动后会触发该事件) 38 /// </summary> 39 /// <param name="layer"></param> 40 private void MapControl_OnLayerReordered(ILayer layer, int index) 41 { 42 string str = string.Format("移动{0}图层,到索引为{1}的位置", layer.Name,index); 43 MessageBox.Show(str, "提示"); 44 } 45 /// <summary> 46 /// 地图范围发生变化事件 47 /// </summary> 48 /// <param name="sender"></param> 49 /// <param name="sizeChanged"></param> 50 /// <param name="newEnvelope"></param> 51 private void mapControlEvent_OnExtentUpdated(object sender, bool sizeChanged, IEnvelope newEnvelope) 52 { 53 MessageBox.Show("地图范围发生变化"); 54 } 55 /// <summary> 56 /// 地图分辨率发生变化事件 57 /// </summary> 58 /// <param name="displayTransformation"></param> 59 private void mapControlEvent_OnResolutionUpdated(IDisplayTransformation displayTransformation) 60 { 61 MessageBox.Show("地图分辨率发生变化"); 62 } |
2.4. 示例截图