zoukankan      html  css  js  c++  java
  • PIE SDK算法的异步调用

    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

    示例代码

     1          /// <summary>
     2         /// 单击方法
     3         /// </summary>
     4         public override void OnClick()
     5         {
     6             //Clip裁剪
     7             PIE.CommonAlgo.DataPreImgClip_Exchange_Info info = new PIE.CommonAlgo.DataPreImgClip_Exchange_Info();
     8 
     9             info.InputFilePath = @"D:DataGF1_ortho.tif";  //待裁剪影像
    10             PIE.DataSource.IRasterDataset rDataset = PIE.DataSource.DatasetFactory.OpenRasterDataset(info.InputFilePath, PIE.DataSource.OpenMode.ReadOnly);
    11             if (rDataset == null) return;
    12             int count = rDataset.GetBandCount();
    13             List<int> list = new List<int> { };
    14             for (int i = 0; i < count; i++)
    15             {
    16 
    17                 list.Add(i);
    18             }
    19             info.listBands = list;
    20             info.XFactor = 1;
    21             info.YFactor = 1;
    22             info.bInvalidValue = false;
    23             info.OutputFilePath = @"D:Dataclip_AsynExecute.tif";  //裁剪保存结果
    24             info.Type = 0;  // (等于0表示通过栅格范围裁剪)
    25             info.XStart = 0;
    26             info.XEnd = 2000;
    27             info.YStart = 0;
    28             info.YEnd = 2000;
    29             info.FileType = "GTiff";  //Tiff数据的FileTypeCode为“GTiff”,IMG数据的FileTypeCode为"HFA",其他格式的为"ENVI"。;
    30 
    31             //1、初始实例化Instance,算法创建CreateAlgo
    32             PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImageClipAlgo");
    33             if (algo == null) return;
    34 
    35             //2、异步执行AsynExcuteAlgo
    36             PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;
    37             algo.Name = "影像裁剪";
    38             algo.Params = info;
    39             algoEvents.OnExecuteCompleted += OnAlgoExcuteCompleted;
    40             algoEvents.OnProgressChanged += OnAlgoProgressChanged;
    41 
    42             PIE.AxControls.IStatusBar statusBar = m_Application.StatusBar;
    43             statusBar.ShowProgress(0, 100, "");
    44             PIE.SystemAlgo.AlgoFactory.Instance().AsynExecuteAlgo(algo);
    45         }
    46 
    47         /// <summary>
    48         /// 3、算法执行完成事件
    49         /// </summary>
    50         /// <param name="algo">算法</param>
    51         private void OnAlgoExcuteCompleted(PIE.SystemAlgo.ISystemAlgo algo)
    52         {
    53             PIE.AxControls.IStatusBar statusBar = m_Application.StatusBar;
    54             statusBar.UpdateProgress(100, "");
    55             statusBar.HideProgress();
    56 
    57             PIE.Carto.ILayer layer = PIE.Carto.LayerFactory.CreateDefaultLayer(@"D:Dataclip_AsynExecute.tif");
    58             m_HookHelper.FocusMap.AddLayer(layer);
    59             m_HookHelper.ActiveView.PartialRefresh(PIE.Carto.ViewDrawPhaseType.ViewAll);
    60 
    61             PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;
    62             algoEvents.OnExecuteCompleted -= OnAlgoExcuteCompleted;
    63             algoEvents.OnProgressChanged -= OnAlgoProgressChanged;
    64         }
    65 
    66         /// <summary>
    67         /// 4、算法进度变化事件
    68         /// </summary>
    69         /// <param name="complete">进度</param>
    70         /// <param name="msg">进度信息</param>
    71         /// <param name="algo">算法</param>
    72         /// <returns>int</returns>
    73         private int OnAlgoProgressChanged(double complete, string msg, PIE.SystemAlgo.ISystemAlgo algo)
    74         {
    75             PIE.AxControls.IStatusBar statusBar = m_Application.StatusBar;
    76             statusBar.UpdateProgress((int)complete, msg);
    77             return 0;
    78         }
    View Code

    2.4. 示例截图

    算法的异步调用

     

    算法的执行情况显示

  • 相关阅读:
    DAY9 函数初识(各种参数的用法)
    CSS背景
    HTML/CSS 练习
    从JDBC到commons-DBUtils
    SQL
    MYSQL数据库基本操作
    JDBC
    Stream数据流(Collection接口扩充)
    Stack栈
    Map集合接口
  • 原文地址:https://www.cnblogs.com/PIESat/p/10231715.html
Copyright © 2011-2022 走看看