1. 开发环境部署
- 确保Win10系统
- 安装Visual Studio2019
- 安装PIESDK.Net_V6.3_Windows_X64.exe
2.创建工程
1.选Windows窗口应用,不然后面找不到.Net framwork 4.0
- 选中项目设置属性
这个是PIESDK的安装路径下的Bin
PIE软件启动路径
鼠标双击打开,选择图片,添加现有资源,选择图片位置。
3.删除原来的测试文件,重新创建VectorCommand.cs。
- 代码部分增加了详细的注释
//using System;
//using System.Collections.Generic;
//using System.Text;
using PIE.Controls;
using System.Windows.Forms;
namespace PIE.ControlsTest
{
/// <summary>
/// 矢量数据加载
/// </summary>
public class VectorCommand : BaseCommand // BaseCommand基础命令:数据加载、显示、放缩等功能,可参考文档中 Command类结构图
{
/// <summary>
/// 构造函数
/// </summary>
public VectorCommand()
{
m_Image = ControlsTest.Properties.Resources.DataLoader_Vector; // 按钮背景图片
this.Caption = "加载矢量数据"; // 按钮名称
this.Name = "VectorCommand"; // 命令对象名称
this.ToolTip = "加载矢量数据(shape)"; // 按钮提示内容
this.Checked = false; // 初始化按钮是否为选中状态
this.Enabled = false; // 设置初始化按钮的可用性
}
/// <summary>
/// 创建插件对象
/// </summary>
/// <param name="hook"></param>
public override void OnCreate(object hook) // OnCreate是从BaseCommand继承的成员函数,这里重写该成员函数
{
// object是C#类中的顶层基类,
if (hook == null) return;// hook为空直接返回;
// IPmdContents接口是用来管理地图工程文档及制图模板的基础接口。
if (!(hook is PIE.Carto.IPmdContents)) return;// hook是否为interface类型;is 运算符检查表达式的结果是否与给定的类型相匹配
this.Enabled = true;// 设置按钮可用
// 通过OnCreate方法传递hook对象,也就是MapControl对象,赋值给Command对象的m_Hook和m_HookHelper
m_Hook = hook;
m_HookHelper.Hook = hook;
}
/// <summary>
/// 单击方法
/// </summary>
public override void OnClick()
{
if (!this.Enabled) return;
OpenFileDialog openFileDialog = new OpenFileDialog(); // 创建 OpenFileDialog 对象。
openFileDialog.Title = "请选择打开的数据:"; // 设置文件对话框标题。
openFileDialog.Filter = "Shape Files|*.shp;*.000";// 设置当前文件名筛选器字符串,该字符串决定对话框的“另存为文件类型”或“文件类型”框中出现的选择内容。
openFileDialog.Multiselect = true; // 是否允许选择多个文件。
if (openFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK) return; // 如果选择取消,退出程序
PIE.Carto.IActiveView activeView = m_HookHelper.ActiveView;// IActiveView接口则定义了Map对象的数据显示功能
PIE.Carto.IMap map = m_HookHelper.FocusMap;// IMap定义了Map对象的数据管理功能
PIE.Carto.ILayer layer = null;// ILayer是所有图层类都实现了的一般接口,它定义了所有图层都实现的公共方法和属性
string[] files = openFileDialog.FileNames;// 获得文件名称
for (int i = 0; i < files.Length; i++)
{
layer = PIE.Carto.LayerFactory.CreateDefaultLayer(files[i]); // 创建默认图层,参数为目标图层路径
map.AddLayer(layer);// 将图层放置到地图内
}
// PartialRefresh 部分刷新;刷新制图模块的所有类型
activeView.PartialRefresh(PIE.Carto.ViewDrawPhaseType.ViewAll);
}
}
}
- 打开xml文件
添加以下内容:
<Item valid="1" type="button" identity="PIE.ControlsTest.VectorCommand" library="PIE.ControlsTest.dll" caption="加载矢量数据(shp)" image="DataLoader_Vector.png" beginGroup="0" parameter="" tip=""/>
运行结果:
参考网址:
https://www.cnblogs.com/PIESat/p/10248815.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)