基于sharpdevelop核心和ArcEngine打造插件式桌面GIS应用之三——核心控件DefaultMapControl
2012-02-20 11:26
274 查看
系统演示请看《我的插件GIS系统演示》
GIS应用系统最基础的功能就是要实现空间数据的可视化展示,能够进行缩放、漫游、测距等操作。不管是CS还是BS架构的系统,所有的功能离不开地图展示控件。在本节中,将对地图控件进行一个简单的介绍。
DefaultMapControl(DM控件)是一个自定义控件,该控件是在Esri的MapControl的基础上进行了一些扩展,增加了几个简单的功能。
该节叙述的只是一些较为重要的扩展,详细的代码,我会在重构之后放出。
DM控件有这么几个特点:
1、全局访问
2、全局唯一
3、是数据显示、数据选择、数据编辑的UI接口
基于DM的特点与功能要求,进行了如下扩展:
1、 DefaultMapControl的单件实例
由于在整个系统中有很多地方需要访问DM控件,且DM控件在整个应用里具有惟一性,因此封装了一个DM控件的静态单件实例,方便对DM控件的访问。
2、视图刷新提示
当数据量较大,或者图层数过多时,在DM中绘制图形会耗时较多,因此,需要在状态栏中显示绘制进度。
主要是对Esri的AxMapControl的如下事件进行捕获,并操作:
1)OnBeforeScreenDraw
在状态栏中显示视图绘制的提示信息。视图绘制信息可以以文本的方式显示,我在系统中,使用了一个图标来标识当前地图视图是否在绘制过程中。如下图所示:
大家可以根据自己的需求来定义显示格式。
2)OnAfterScreenDraw
在状态栏中显示绘制结束信息。
3)OnViewRefreshed
在状态栏中显示具体绘制图层的信息。
3、数据编辑
数据编辑也是GIS系统不可或缺的功能,在DM控件中定义了一个 IEngineEditor类型的编辑器属性,同时将当前编辑图层CurrentEditLayer也以属性的方式定义。
1)编辑器
2)当前编辑图层
4、工作区域管理
在大多数GIS应用系统中,在进行某些作业时,会针对指定的区域进行操作(如导出数据、数据分析),为此我在系统中引入了工作区域(WorkArea)的概念,建立了工作区域、工作区域管理器等类,便于管理。
有关工作区域的详细内容,将在后续章节中叙述。
GIS应用系统最基础的功能就是要实现空间数据的可视化展示,能够进行缩放、漫游、测距等操作。不管是CS还是BS架构的系统,所有的功能离不开地图展示控件。在本节中,将对地图控件进行一个简单的介绍。
DefaultMapControl(DM控件)是一个自定义控件,该控件是在Esri的MapControl的基础上进行了一些扩展,增加了几个简单的功能。
该节叙述的只是一些较为重要的扩展,详细的代码,我会在重构之后放出。
DM控件有这么几个特点:
1、全局访问
2、全局唯一
3、是数据显示、数据选择、数据编辑的UI接口
基于DM的特点与功能要求,进行了如下扩展:
1、 DefaultMapControl的单件实例
由于在整个系统中有很多地方需要访问DM控件,且DM控件在整个应用里具有惟一性,因此封装了一个DM控件的静态单件实例,方便对DM控件的访问。
2、视图刷新提示
当数据量较大,或者图层数过多时,在DM中绘制图形会耗时较多,因此,需要在状态栏中显示绘制进度。
主要是对Esri的AxMapControl的如下事件进行捕获,并操作:
1)OnBeforeScreenDraw
在状态栏中显示视图绘制的提示信息。视图绘制信息可以以文本的方式显示,我在系统中,使用了一个图标来标识当前地图视图是否在绘制过程中。如下图所示:
大家可以根据自己的需求来定义显示格式。
void axMapControl1_OnBeforeScreenDraw(object sender, IMapControlEvents2_OnBeforeScreenDrawEvent e) { //在状态栏中显示视图绘制提示 StatusBarService.ShowMapDrawing(true); }
2)OnAfterScreenDraw
在状态栏中显示绘制结束信息。
void axMapControl1_OnAfterScreenDraw(object sender, IMapControlEvents2_OnAfterScreenDrawEvent e) { StatusBarService.ShowMapDrawing(false); if (this.AxMapControl.Map.SelectionCount == 0) StatusBarService.SetMessage("就绪"); }
3)OnViewRefreshed
在状态栏中显示具体绘制图层的信息。
void axMapControl1_OnViewRefreshed(object sender, IMapControlEvents2_OnViewRefreshedEvent e) { StatusBarService.ShowMapDrawing(true); if (e.layerOrElement != null && e.layerOrElement is ILayer) { StatusBarService.SetMessage(string.Format("正在显示{0}…", ((ILayer)e.layerOrElement).Name), true); } }
3、数据编辑
数据编辑也是GIS系统不可或缺的功能,在DM控件中定义了一个 IEngineEditor类型的编辑器属性,同时将当前编辑图层CurrentEditLayer也以属性的方式定义。
1)编辑器
2)当前编辑图层
/// <summary> /// 当前编辑图层 /// </summary> public IFeatureLayer CurrentEditLayer { get { currentEditLayer = null; IEngineEditLayers editLayers = DefaultMapControl.Instance.Editor as IEngineEditLayers; if (editLayers != null) currentEditLayer = editLayers.TargetLayer; return currentEditLayer; } } /// <summary> /// 编辑器 /// </summary> public IEngineEditor Editor { get { return this.axMapControl1.Editor; } }
4、工作区域管理
在大多数GIS应用系统中,在进行某些作业时,会针对指定的区域进行操作(如导出数据、数据分析),为此我在系统中引入了工作区域(WorkArea)的概念,建立了工作区域、工作区域管理器等类,便于管理。
public WorkAreaManager WorkAreaManager { get { return this.workAreaManager; } }
有关工作区域的详细内容,将在后续章节中叙述。
相关文章推荐
- 基于sharpdevelop核心和ArcEngine打造插件式桌面GIS应用之四——工具栏
- 基于sharpdevelop核心和ArcEngine打造插件式桌面GIS应用(概述)
- 基于sharpdevelop核心和ArcEngine打造插件式桌面GIS应用之二——开发环境搭建
- 基于sharpdevelop核心和ArcEngine打造插件式桌面GIS应用之五——图层树
- 应用SharpDevelop核心来创建插件式系统
- 基于插件技术的GIS应用框架(C# + ArcEngine9.3)(二)
- 基于插件技术的GIS应用框架(C# + ArcEngine9.3)(二)
- 基于插件技术的GIS应用框架(C# + ArcEngine9.3)(三)
- 基于插件技术的GIS应用框架(C# + ArcEngine9.3)(一)
- 基于插件技术的GIS应用框架(C# + ArcEngine9.3)(一)
- 基于插件技术的GIS应用框架(C# + ArcEngine9.3)(四)
- 基于插件技术的GIS应用框架(C# + ArcEngine9.3)(一)
- 基于插件技术的GIS应用框架(C# + ArcEngine9.3)(五)
- 基于插件技术的GIS应用框架(C# + ArcEngine9.3)(一)
- 基于插件技术的GIS应用框架(C# + ArcEngine9.3)(六)
- 基于插件技术的GIS应用框架(C# + ArcEngine9.3)(七)
- ArcEngine中实现axMapControl控件鼠标左击右击响应不同事件
- 基于插件技术的GIS应用框架(C# + ArcEngine9.3)(八)
- 基于插件技术的GIS应用框架(C# + ArcEngine9.3)(九)
- 基于插件技术的GIS应用框架(C# + ArcEngine9.3)(九)