博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PIE SDK算法的自定义扩展
阅读量:6232 次
发布时间:2019-06-21

本文共 7555 字,大约阅读时间需要 25 分钟。

 

1.算法功能简介

    算法的自定义扩展允许用户自主开发新的算法。自定义的算法必须实现PIE.SystemAlgo.BaseSystemAlgo基础类,这样才能被PIE的算法管理器调用起来。

2.算法功能实现说明

2.1. 示例简介

    本算法用于实现栅格影像的拷贝。参数类“AlgoParams.cs”用于存放要拷贝的路径和拷贝到的路径,算法类“Algo.cs”用于执行算法,窗体类“FormTest.cs”用于接收用户输入的要拷贝的路径和拷贝到的路径,Command类“AlgoCommand.cs”用于实现算法调用。

    算法类“Algo.cs”继承自BaseSystemAlgo,该类实现了ISystemAlgo, ISystemAlgoEvents两个接口。以下对BaseSystemAlgo类的属性,方法和事件进行介绍:

属性介绍

Description

String

描述

Name

String

名称

Params

String

参数

方法介绍

Execute()

Bool

执行算法,返回结果:是否执行成功

GetErrorInfo(ref int errCode, ref string errMsg)

Void

获取错误信息,参数: errCode:错误信息编号,errMsg:错误信息描述

事件介绍

OnExecuteCompleted

OnExecuteCompletedEventHandler

执行完成事件

OnProgressChanged

OnProgressChangedEventHandler

进度变化事件

2.2. 实现步骤

第一步

编写参数类“AlgoParams.cs”

第二步

构造算法类“Algo.cs”

第三步

新建窗体类“FormTest.cs”

第四步

写Command类实现算法调用

2.3. 示例代码

项目路径

百度云盘地址下/PIE示例程序/10.算法调用/算法的调用方式/Algo.AlgoTest

数据路径

百度云盘地址下/PIE示例数据/栅格数据/04.World/ World.tif

视频路径

百度云盘地址下/PIE视频教程/10.算法调用/算法的调用方式/算法的自定义扩展.avi

示例代码

1         //(一)编写参数类“AlgoParams.cs”  2          public class AlgoParams  3     {  4         ///   5         /// 要拷贝的路径  6         ///   7         public string OpenFilePath;  8   9         ///  10         /// 拷贝到的路径 11         ///  12         public string SaveFilePath; 13     } 14          //(二)构造算法类“Algo.cs” 15 public class Algo : PIE.SystemAlgo.BaseSystemAlgo 16     { 17         ///  18         /// 构造函数 19         ///  20         public Algo() 21         { 22  23         } 24  25         ///  26         /// 执行算法 27         ///  28         /// 
是否执行成功
29 public override bool Execute() 30 { 31 AlgoParams m_AlgoParams = (AlgoParams)this.Params; 32 if (string.IsNullOrEmpty(m_AlgoParams.OpenFilePath) || string.IsNullOrEmpty(m_AlgoParams.SaveFilePath)) return false; 33 File.Copy(m_AlgoParams.OpenFilePath, m_AlgoParams.SaveFilePath, true); 34 return true; 35 } 36 } 37 //(三)新建窗体类“FormTest.cs” 38 public partial class FormTest : Form 39 { 40 /// 41 /// 算法参数 42 /// 43 private AlgoTest.AlgoParams m_Parm = new AlgoParams(); 44 45 /// 46 /// 构造函数 47 /// 48 public FormTest() 49 { 50 InitializeComponent(); 51 } 52 53 /// 54 /// 算法参数 55 /// 56 public AlgoParams Params 57 { 58 get { return m_Parm; } 59 set { this.m_Parm = value; } 60 } 61 62 private void buttonEdit_save_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e) 63 { 64 SaveFileDialog save = new SaveFileDialog(); 65 save.Title = "另存为"; 66 save.Filter = "Raster Files|*.tif"; 67 save.FileName = ""; 68 if (save.ShowDialog() == DialogResult.OK) 69 { 70 this.buttonEdit_save.Text = save.FileName; 71 } 72 } 73 74 private void simpleButton_ok_Click(object sender, EventArgs e) 75 { 76 if (string.IsNullOrEmpty(this.buttonEdit_tif.Text) || string.IsNullOrEmpty(this.buttonEdit_save.Text)) 77 { 78 MessageBox.Show("请输入路径!"); 79 return; 80 } 81 m_Parm.OpenFilePath = this.buttonEdit_tif.Text; 82 m_Parm.SaveFilePath = this.buttonEdit_save.Text; 83 this.DialogResult = DialogResult.OK; 84 } 85 86 private void simpleButton_cancel_Click(object sender, EventArgs e) 87 { 88 this.Close(); 89 } 90 91 private void buttonEdit_tif_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e) 92 { 93 OpenFileDialog open = new OpenFileDialog(); 94 open.Filter = "Raster Files|*.tif"; 95 open.Title = "选择栅格文件"; 96 open.Multiselect = false; 97 if (open.ShowDialog() != DialogResult.OK) return; 98 string filePath = open.FileName; 99 100 IRasterDataset dataSet = DatasetFactory.OpenRasterDataset(filePath, OpenMode.ReadOnly);101 if (dataSet == null)102 {103 MessageBox.Show("文件打开失败!");104 return;105 }106 if (!dataSet.Open(filePath, OpenMode.ReadOnly))107 {108 MessageBox.Show("文件打开失败!");109 return;110 }111 this.buttonEdit_tif.Text = filePath;112 }113 }114 //(四)写Command类实现算法调用115 public class AlgoCommand: DesktopCommand116 {117 /// 118 /// 构造函数119 /// 120 public AlgoCommand()121 {122 this.Caption = "测试算法";123 this.Name = "AlgoCommand";124 this.ToolTip = "测试算法";125 this.Checked = false;126 this.Enabled = false;127 }128 129 /// 130 /// 单击方法131 /// 132 public override void OnClick()133 {134 #region 1、参数设置135 if (!this.Enabled) return;136 FormTest frmTest = new FormTest();137 if (frmTest.ShowDialog() != System.Windows.Forms.DialogResult.OK) return;138 139 AlgoParams info = frmTest.Params;140 PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("AlgoTest.dll", "AlgoTest.Algo");141 if (algo == null) return;142 143 PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;144 algo.Name = "测试算法";145 algo.Params = info;146 algoEvents.OnExecuteCompleted += OnAlgoExcuteCompleted;147 algoEvents.OnProgressChanged += OnAlgoProgressChanged;148 #endregion149 150 //2、算法执行151 PIE.AxControls.IStatusBar statusBar = m_Application.StatusBar;152 statusBar.ShowProgress(0, 100, "");153 PIE.SystemAlgo.AlgoFactory.Instance().AsynExecuteAlgo(algo);154 }155 156 /// 157 /// 算法执行完成事件158 /// 159 /// 算法160 private void OnAlgoExcuteCompleted(PIE.SystemAlgo.ISystemAlgo algo)161 {162 PIE.AxControls.IStatusBar statusBar = m_Application.StatusBar;163 statusBar.UpdateProgress(100, "");164 statusBar.HideProgress();165 166 //3、结果显示167 AlgoParams info = (AlgoParams)algo.Params;168 PIE.Carto.ILayer layer = PIE.Carto.LayerFactory.CreateDefaultLayer(info.SaveFilePath);169 m_HookHelper.FocusMap.AddLayer(layer);170 m_HookHelper.ActiveView.PartialRefresh(PIE.Carto.ViewDrawPhaseType.ViewAll);171 172 PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;173 algoEvents.OnExecuteCompleted -= OnAlgoExcuteCompleted;174 algoEvents.OnProgressChanged -= OnAlgoProgressChanged;175 }176 177 /// 178 /// 算法进度变化事件179 /// 180 /// 进度181 /// 进度信息182 /// 算法183 ///
int
184 private int OnAlgoProgressChanged(double complete, string msg, PIE.SystemAlgo.ISystemAlgo algo)185 {186 PIE.AxControls.IStatusBar statusBar = m_Application.StatusBar;187 statusBar.UpdateProgress((int)complete, msg);188 return 0;189 }190 }
View Code

2.4. 示例截图

转载于:https://www.cnblogs.com/PIESat/p/10231750.html

你可能感兴趣的文章
spring boot整合mybatis+mybatis-plus
查看>>
深度学习利器:TensorFlow在智能终端中的应用——智能边缘计算,云端生成模型给移动端下载,然后用该模型进行预测...
查看>>
如何查看表和索引的统计信息
查看>>
word文档的动态添加数据
查看>>
模仿ReentrantLock类自定义锁
查看>>
Redis进阶实践之九 独立封装的RedisClient客户端工具类
查看>>
如何在Python中从零开始实现随机森林
查看>>
动态规划-最优二叉搜索树-公式推导
查看>>
jquery获取前一个月日期
查看>>
R12.2常用手册
查看>>
【全网最全的博客美化系列教程】01.添加Github项目链接
查看>>
[微信小程序] 通过快速启动demo分析小程序入门关键点
查看>>
C# 封装miniblink 使用HTML/CSS/JS来构建.Net 应用程序界面和简易浏览器
查看>>
SQL Server管理员必备技能之性能优化
查看>>
组合拳出击-Self型XSS变废为宝
查看>>
服务网与各地落地平台的调用关系
查看>>
使用VAE、CNN encoder+孤立森林检测ssl加密异常流的初探——真是一个忧伤的故事!!!...
查看>>
13个在企业中持上升势头的开源编程工具
查看>>
sql server 2005附加数据库错误:尝试打开或创建物理文件时,CREATE FILE 遇到操作系统错误...
查看>>
彻底搞定C指针-函数名与函数指针
查看>>