1.算法功能简介

异步方法一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。异步方法通常会在另外一个线程中,“真实”地执行着。整个过程,不会阻碍调用者的工作。

PIE SDK支持算法功能的执行,下面对算法的异步调用功能进行介绍。

2.算法功能实现说明

2.1. 示例简介

AlgoFactory类实现了算法的管理,主要实现了以下方法:

1)      AlgoFactory.Instance().CreateAlgo(A,B)实现算法Algo的创建;需要注意的是:A:“PIE.CommonAlgo.dll”,B: "PIE.CommonAlgo.ImageClipAlgo"。

2)      设置算法的参数;

3)      通过AlgoFactory.Instance().AsynExcuteAlgo(algo)实现异步调用。

ISystemAlgoEvents接口是算法进度变化事件接口,用来管理算法执行进度变化( OnProgressChangedEvent )以及执行完成( OnExcuteCompletedEvent )事件。

2.2. 实现步骤

第一步

算法创建CreateAlgo;

第二步

设置算法参数;

第三步

异步执行AsynExcuteAlgo;

第四步

编写算法执行完成事件

第五步

编写算法进度变化事件

2.3. 示例代码

项目路径

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

数据路径

百度云盘地址下/PIE示例数据/栅格数据/01.GF1/ MS.tif

视频路径

百度云盘地址下/PIE视频教程/10.算法调用/算法的调用方式/算法的异步调用.avi

示例代码

          /// <summary>
/// 单击方法
/// </summary>
public override void OnClick()
{
//Clip裁剪
PIE.CommonAlgo.DataPreImgClip_Exchange_Info info = new PIE.CommonAlgo.DataPreImgClip_Exchange_Info(); info.InputFilePath = @"D:\Data\GF1_ortho.tif"; //待裁剪影像
PIE.DataSource.IRasterDataset rDataset = PIE.DataSource.DatasetFactory.OpenRasterDataset(info.InputFilePath, PIE.DataSource.OpenMode.ReadOnly);
if (rDataset == null) return;
int count = rDataset.GetBandCount();
List<int> list = new List<int> { };
for (int i = ; i < count; i++)
{ list.Add(i);
}
info.listBands = list;
info.XFactor = ;
info.YFactor = ;
info.bInvalidValue = false;
info.OutputFilePath = @"D:\Data\clip_AsynExecute.tif"; //裁剪保存结果
info.Type = ; // (等于0表示通过栅格范围裁剪)
info.XStart = ;
info.XEnd = ;
info.YStart = ;
info.YEnd = ;
info.FileType = "GTiff"; //Tiff数据的FileTypeCode为“GTiff”,IMG数据的FileTypeCode为"HFA",其他格式的为"ENVI"。; //1、初始实例化Instance,算法创建CreateAlgo
PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImageClipAlgo");
if (algo == null) return; //2、异步执行AsynExcuteAlgo
PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;
algo.Name = "影像裁剪";
algo.Params = info;
algoEvents.OnExecuteCompleted += OnAlgoExcuteCompleted;
algoEvents.OnProgressChanged += OnAlgoProgressChanged; PIE.AxControls.IStatusBar statusBar = m_Application.StatusBar;
statusBar.ShowProgress(, , "");
PIE.SystemAlgo.AlgoFactory.Instance().AsynExecuteAlgo(algo);
} /// <summary>
/// 3、算法执行完成事件
/// </summary>
/// <param name="algo">算法</param>
private void OnAlgoExcuteCompleted(PIE.SystemAlgo.ISystemAlgo algo)
{
PIE.AxControls.IStatusBar statusBar = m_Application.StatusBar;
statusBar.UpdateProgress(, "");
statusBar.HideProgress(); PIE.Carto.ILayer layer = PIE.Carto.LayerFactory.CreateDefaultLayer(@"D:\Data\clip_AsynExecute.tif");
m_HookHelper.FocusMap.AddLayer(layer);
m_HookHelper.ActiveView.PartialRefresh(PIE.Carto.ViewDrawPhaseType.ViewAll); PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;
algoEvents.OnExecuteCompleted -= OnAlgoExcuteCompleted;
algoEvents.OnProgressChanged -= OnAlgoProgressChanged;
} /// <summary>
/// 4、算法进度变化事件
/// </summary>
/// <param name="complete">进度</param>
/// <param name="msg">进度信息</param>
/// <param name="algo">算法</param>
/// <returns>int</returns>
private int OnAlgoProgressChanged(double complete, string msg, PIE.SystemAlgo.ISystemAlgo algo)
{
PIE.AxControls.IStatusBar statusBar = m_Application.StatusBar;
statusBar.UpdateProgress((int)complete, msg);
return ;
}

2.4. 示例截图

算法的异步调用

算法的执行情况显示

PIE SDK算法的异步调用的更多相关文章

  1. PIE SDK算法的同步调用

    1.    算法功能简介 同步调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为. PIE SDK支持算法功能的执行,下面对算法的同步调用功能进行介绍. 2.    算法功能实现说明 2. ...

  2. PIE SDK算法的自定义扩展

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

  3. PIE SDK 文章目录索引

    1.PIE SDK介绍 1.1.  PIE软件介绍 1.2.  PIE SDK介绍 1.3.  PIE支持项目介绍 1.4.  PIE.NET-SDK插件式二次开发介绍 1.5.  PIE.NET-S ...

  4. PIE SDK 监督分类对话框类(SupervisedClassificaitonDialog)使用经验

    最近研究遥感,用到分类算法,PIE SDK正好提供了一些方法可供调用,他们的官方博客上也有相应的示例代码(可参考:https://www.cnblogs.com/PIESat/p/10725270.h ...

  5. PIE SDK Command、Tool、Control的调用和拓展

    1.功能简介 在一个项目中,是通过小组成员共同开发的,难以避免的是当项目功能集成的时候会出现很多兼容性问题,开发讲究高内聚低耦合,利用Command.Tool和Control的使用,可以提升集成的效率 ...

  6. PIE SDK 距离分类和最大似然分类

       1.算法功能简介 监督分类,也叫训练场地法.训练分类法,是遥感图像分类的一种,用被确认类别的样本像元去识别其他未知类别像元的过程.监督分类算法有平行算法.平行六面体法.最小距离法.最大似然法.马 ...

  7. PIE SDK与OpenCV结合说明文档

    1.功能简介 OpenCV是基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少量 ...

  8. PIE SDK影像坏线修复

    1.算法功能简介 坏条带的由来:2003年5月31日,Landsat-7ETM+机载扫描行校正器(SLC) 故障,导致此后获取的影像出现了数据条带丢失,严重影响了Landsat ETM遥感影像的使用. ...

  9. PIE SDK波谱运算

    1.算法功能简介 波谱运算(Spectral Math)是一种灵活的波谱处理工具,可以用数学表达式或IDL程序对波谱曲线(以及选择的多波段图像)进行处理.波谱曲线可以来自一幅多波段图像的Z剖面.波谱库 ...

随机推荐

  1. Python开发 第一篇 python的前世今生

    Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...

  2. Linux相关常用工具

    Xshell Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的. 通常需要通过vpn访问.建立vpn隧道可以通过FortiClient 或者 I ...

  3. Linux基础-工作中经常使用到的linux 命令

     linux 常用命令 (1)命令ls——列出文件 ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件 ls a* 列出当前目录下以字母a开头的所有文件 ls -l *.d ...

  4. 编写高质量代码改善C#程序的157个建议——建议42:使用泛型参数兼容泛型接口的不可变性

    建议42:使用泛型参数兼容泛型接口的不可变性 让返回值类型返回比声明的类型派生程度更大的类型,就是“协变”.如: public Employee GetAEmployee(string name) { ...

  5. Extjs Ext.TreePanel

    TreePanel 简单实例. <link rel="stylesheet" href="Js/ext-4.2/resources/css/ext-all-nept ...

  6. spring的介绍

    Spring是什么: Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用!!! Spring是一个轻量级的控制反转(Io ...

  7. 严选 Android 路由框架优化(上篇)

    0 背景 早前严选 Android 工程,使用原生 Intent 方式做页面跳转,为规范参数传递,做了编码规范,使用静态方法的方式唤起 Activity public static void star ...

  8. 【连载】redis库存操作,分布式锁的四种实现方式[一]--基于zookeeper实现分布式锁

    一.背景 在电商系统中,库存的概念一定是有的,例如配一些商品的库存,做商品秒杀活动等,而由于库存操作频繁且要求原子性操作,所以绝大多数电商系统都用Redis来实现库存的加减,最近公司项目做架构升级,以 ...

  9. 基于stor2RRD 的 SAN、存储监控

    一. 配置用法在官网都有的详见网页: http://www.stor2rrd.com/install.htm?1.2 二 . 在这里我只是想记录一下我是如何编译安装Apache的,避免踩坑: 安装包如 ...

  10. Struts2学习第2天--Struts2的Servlet的API的访问 Struts2的结果页面的配置 Struts2的数据的封装(包括复杂类型)

    启动后访问jsp 输入姓名密码: 提交后跳转打action 打印: 修改类: 配置同上 结果同上. 实现这俩接口 就得到了 以上代码附上: struts.xml: <?xml version=& ...