一、PIE.Net开发环境及目录说明
1. 开发环境
- 确保Win7系统已安装SP1
- 安装Visual Studio2013(支持VS2010/2012/2013/2015)
- 安装PIESDK.exe二次开发包
2. 【SDK】安装后目录说明
1) Bin>>开发包
2) Config>>配置文件
3) Data>>坐标系投影及数据映射表
4) Document>>帮助文件
5) Language>>语言国际化
6) Res>>按钮图标及鼠标Cursor样式
7) Sample>>实例文件
8) Style>>符号库文件
9) Template>>制图模板
二、PIE.NET_SDK二次开发实例
Tool(工具插件):适用于与地图或制图组件有交互的插件,只需继承自BaseTool(继承自BaseCommand),根据功能需要可重写OnMouseDown、OnMouseMove等方法,如:拉框放大、探针、画多边形等。
Command(命令插件):与地图无交互,只需继承自BaseCommand,重写OnClick方法,如:全图、居中放大、前一视图等。
1. WinForm插件调用
(1)新建Visual C#的Windows 窗体应用程序,选择新建→项目,选择Visual C #的Windows窗体应用程序,设置.Net Framework4以及工程名称“MapManager”和位置。
(2)设置Debug和Release环境,新建选择x86平台。
(3)配置PIE.NET_SDK:在MapManager.csproj的同级目录下新建“APPDebug”文件夹,修改生成输出路径位置为../ APPDebug/Bin。
(4)代码编写
A:工具箱里MapControl、TOCControl控件拖拽绑定
添加窗体,初始化绑定MapControl、TOCControl控件代码:
tocControl1.SetBuddyControl(mapControl1);
窗体运行显示如下:
B:选择工程引用,根据自己开发的插件功能需求进行选择, 浏览本机已经安装位置的【Bin】目录下添加类库,单击确定即可。
C:调用
以地图拉框放大(Tool)和全图(Command)为例
/// <summary> /// 拉框放大 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void toolStripButton_MapZoomIn_Click(object sender, EventArgs e) { ITool tool = new MapZoomInTool(); ICommand command = tool as ICommand; command.OnCreate(mapControl1); mapControl1.CurrentTool = tool; } /// <summary> /// 全图 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void toolStripButton_FullExtent_Click(object sender, EventArgs e) { ICommand cmd = new FullExtentCommand(); cmd.OnCreate(mapControl1); cmd.OnClick(); }
2. 插件代码实现
新建插件.cs类
以地图拉框放大(Tool)为例
以全图显示(Command)为例
构造函数中的定义可个性化定制,控制实际的显示名称、提示和图片(m_Image),鼠标样式放置在构造函数里设置,如鼠标事件里需要改变鼠标样式,再在鼠标事件里控制即可。
设置Cursor符号cur样式
(1)构造函数
public ZoomIn() { this.Caption = "拉框放大"; (Caption属性) this.Name = "MapZoomIn"; (名称) this.ToolTip = "拉框放大地图"; (提示) this.Checked = false; (插件是否选择) this.Enabled = false; (插件是否可用) (鼠标样式在构造函数) this.Cursor = new Cursor(new System.IO.MemoryStream(Properties.Resources.ZoomIn)); }
(2)创建插件对象
public override void OnCreate(object hook) { base.OnCreate(hook); m_ActiveView = m_HookHelper.ActiveView; (当前激活视图获取) }
(3)单击方法
public override void OnClick() { if (!this.Enabled) return; }
(4)鼠标事件
以拉框放大为例:鼠标按下时获取拉框,并给地图设置范围变化、刷新。
/// <summary> /// 鼠标按下 /// </summary> /// <param name="sender">触发对象</param> /// <param name="e">鼠标事件参数</param> public override void OnMouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { if (e.Button != System.Windows.Forms.MouseButtons.Left) return; //判断左键 m_ActiveView.Extent = (m_HookHelper.GetContent() as IMapControl).TrackRectangle(); m_ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); }