1. 算法功能简介
同步调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。
PIE SDK支持算法功能的执行,下面对算法的同步调用功能进行介绍。
2. 算法功能实现说明
2.1. 示例简介
AlgoFactory类实现了算法的管理,主要实现了以下方法:
1) AlgoFactory.Instance().CreateAlgo(A,B)实现算法Algo的创建;需要注意的是:A:“PIE.CommonAlgo.dll”,B: "PIE.CommonAlgo.ImageClipAlgo"。
2) 设置算法执行的参数;
3) 通过算法的Excute或AlgoFactory.Instance().ExcuteAlgo()方法实现算法的同步调用;
2.2. 实现步骤
第一步
|
算法创建CreateAlgo
|
第二步
|
设置算法执行的参数;
|
第三步
|
同步执行ExcuteAlgo
|
2.3. 示例代码
项目路径
|
百度云盘地址下/PIE示例程序/10.算法调用/算法的调用方式/Algo.Execute
|
数据路径
|
百度云盘地址下/PIE示例数据/栅格数据/04.World/ World.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\World.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_Execute.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、同步执行Excute
PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;
algo.Name = "影像裁剪";
algo.Params = info;
bool OK = algo.Execute();
PIE.Carto.ILayer layer = PIE.Carto.LayerFactory.CreateDefaultLayer(@"D:\Data\clip_Execute.tif");
m_HookHelper.FocusMap.AddLayer(layer); m_HookHelper.ActiveView.PartialRefresh(PIE.Carto.ViewDrawPhaseType.ViewAll);
}
|
2.4. 示例截图