public void Execute(string beginSubProduct, IContextMessage contextMessage, IArgumentMissProcessor argumentMissProcessor, string executeGroup, Action <int, string> processTracker) { try { SubProductDef firstSubProduct = _monitoringProduct.Definition.GetSubProductDefByIdentify(beginSubProduct); List <IMonitoringSubProduct> waitingSubProducts = new List <IMonitoringSubProduct>(); bool isBefore = true; if (string.IsNullOrEmpty(executeGroup)) { foreach (IMonitoringSubProduct subprd in _monitoringProduct.SubProducts) { if (firstSubProduct.Identify != subprd.Definition.Identify && isBefore) { continue; } if (!subprd.Definition.IsAutoGenerate) { continue; } isBefore = false; waitingSubProducts.Add(subprd); } Execute(waitingSubProducts, contextMessage, argumentMissProcessor, null, processTracker); } else { foreach (IMonitoringSubProduct subprd in _monitoringProduct.SubProducts) { if (firstSubProduct.Identify != subprd.Definition.Identify && isBefore) { continue; } if (!subprd.Definition.IsAutoGenerate) { continue; } if (subprd.Definition.AutoGenerateGroup != null) { if (!subprd.Definition.AutoGenerateGroup.Contains(executeGroup)) { continue; } } isBefore = false; waitingSubProducts.Add(subprd); } Execute(waitingSubProducts, contextMessage, argumentMissProcessor, executeGroup, processTracker); } } catch (Exception ex) { if (contextMessage != null) { contextMessage.PrintMessage(ex.Message); } } }
private void MakeSubProductUseInstances(string preBanks, IMonitoringSubProduct subprd, AlgorithmDef alg, IContextMessage contextMessage, IArgumentMissProcessor argumentMissProcessor, string executeGroup, Action <int, string> processTracker) { IArgumentProvider prd = subprd.ArgumentProvider; prd.SetArg("ThemeGraphyGenerator", _layoutGenerator); prd.SetArg("FileNameGenerator", _fileNameGenerator); foreach (SubProductInstanceDef ist in subprd.Definition.SubProductInstanceDefs) { if (!ist.isautogenerate) { continue; } if (!string.IsNullOrEmpty(executeGroup) && ist.AutoGenerateGroup != null && !ist.AutoGenerateGroup.Contains(executeGroup)) { continue; } ResetFileVars(prd, alg); if (ist.FileProvider == null) { if (contextMessage != null) { contextMessage.PrintMessage(preBanks + "参数\"FileProvider\"为空,子产品\"" + ist.Name + "\"过程终止!"); } continue; } if (ist.AOIProvider != null) { SetAOI(ist.AOIProvider, prd); } if (ist.FileProvider != null) { if (!SetPrimaryFiles(preBanks, ist.FileProvider, ist.Argument, ref ist.extInfo, prd, contextMessage)) { continue; } } if (ist.OutFileIdentify != null) { prd.SetArg("OutFileIdentify", ist.OutFileIdentify); } if (ist.LayoutName != null) { prd.SetArg("ThemeGraphTemplateName", ist.LayoutName); } if (!string.IsNullOrEmpty(ist.ColorTableName)) { prd.SetArg("colortablename", "colortablename=" + ist.ColorTableName); } if (!string.IsNullOrEmpty(ist.extInfo)) { prd.SetArg("extinfo", ist.extInfo); } //多通道合成图需要使用Canverviewer中的数据。包括文件名,波段,图像增强方案等。 prd.SetArg("SmartSession", _contextEnvironment.Session); //根据某个文件型参数生成AOI TryApplyAOITemplateBySeconaryArg(subprd); // IExtractResult result = subprd.Make(processTracker); if (result != null) { if (_resultHandler != null) { _resultHandler.HandleResult(_contextEnvironment, _monitoringProduct, subprd, result); } } } }
private void DirectMakeSubProduct(string preBanks, IMonitoringSubProduct subprd, AlgorithmDef alg, IContextMessage contextMessage, IArgumentMissProcessor argumentMissProcessor, Action <int, string> processTracker) { IArgumentProvider prd = subprd.ArgumentProvider; prd.SetArg("ThemeGraphyGenerator", _layoutGenerator); prd.SetArg("FileNameGenerator", _fileNameGenerator); foreach (ArgumentDef arg in alg.Arguments.Where((a) => { return(a is ArgumentDef); })) { if (arg.IsOptional) { continue; } if (arg.RefType == "file" && arg.FileProvider == null) { if (contextMessage != null) { contextMessage.PrintMessage(preBanks + "参数\"" + arg.Name + "\"为空,子产品\"" + subprd.Name + "\"过程终止!"); } return; } else if (arg.RefType == "file") { GetAndSetFileVar(preBanks + " ", subprd, arg, contextMessage); } } //根据某个文件型参数生成AOI TryApplyAOITemplateBySeconaryArg(subprd); // IExtractResult result = subprd.Make(processTracker); if (result != null) { if (_resultHandler != null) { _resultHandler.HandleResult(_contextEnvironment, _monitoringProduct, subprd, result); } } }
private void MakeSubProduct(string preBanks, IMonitoringSubProduct subprd, IContextMessage contextMessage, IArgumentMissProcessor argumentMissProcessor, string executeGroup, Action <int, string> processTracker) { bool isCreatDataProvider = false; IRasterDataProvider raster = null; try { subprd.ArgumentProvider.Reset(); subprd.ArgumentProvider.AOI = null; AlgorithmDef alg = subprd.AlgorithmDefs[0]; RasterIdentify rstIdentify = null; rstIdentify = GetRasterIdentifOfCurrentFile(); if (subprd.Definition.IsNeedCurrentRaster) { string rstFileName = _contextEnvironment.GetContextVar(GeoDo.RSS.MIF.Core.ContextEnvironment.ENV_VAR_NAME_CURRENT_RASTER_FILE); raster = GeoDataDriver.Open(rstFileName) as IRasterDataProvider; subprd.ArgumentProvider.DataProvider = raster; isCreatDataProvider = true; // TryApplyAOITemplates(subprd); // if (rstIdentify == null) { if (contextMessage != null) { contextMessage.PrintMessage("参数\"" + GeoDo.RSS.MIF.Core.ContextEnvironment.ENV_VAR_NAME_CURRENT_RASTER_FILE + "\"为空!"); } if (argumentMissProcessor == null) { return; } string crtFileName = argumentMissProcessor.DoGettingArgument(subprd.Definition, subprd.UseDefaultAlgorithm(subprd.Definition.ProductDef.Identify), GeoDo.RSS.MIF.Core.ContextEnvironment.ENV_VAR_NAME_CURRENT_RASTER_FILE); if (crtFileName == null) { return; } rstIdentify = new RasterIdentify(crtFileName); _contextEnvironment.PutContextVar(GeoDo.RSS.MIF.Core.ContextEnvironment.ENV_VAR_NAME_CURRENT_RASTER_FILE, crtFileName); } ExtractAlgorithmIdentify id = new ExtractAlgorithmIdentify(); id.Satellite = rstIdentify.Satellite; id.Sensor = rstIdentify.Sensor; alg = subprd.Definition.GetAlgorithmDefByAlgorithmIdentify(id); if (alg == null) { alg = subprd.Definition.Algorithms[0]; } } subprd.ResetArgumentProvider(alg.Identify); subprd.ArgumentProvider.SetArg("AlgorithmName", alg.Identify); if (alg.Bands != null && alg.Bands.Length > 0) { MonitoringThemeFactory.SetBandArgs(subprd, rstIdentify.Satellite, rstIdentify.Sensor); foreach (BandDef band in alg.Bands) { if (subprd.ArgumentProvider.GetArg(band.Identify).ToString() == "-1") { if (contextMessage != null) { contextMessage.PrintMessage(preBanks + "从波段映射表获取\"" + band.Identify + "\"的波段序号失败,生成过程终止!"); } return; } } } // TryHandleCustomArguments(subprd.ArgumentProvider, alg); // if (subprd.Definition.SubProductInstanceDefs != null) { MakeSubProductUseInstances(preBanks + " ", subprd, alg, contextMessage, argumentMissProcessor, executeGroup, processTracker); } else { DirectMakeSubProduct(preBanks + " ", subprd, alg, contextMessage, argumentMissProcessor, processTracker); } } finally { if (raster != null) { raster.Dispose(); raster = null; } if (subprd.ArgumentProvider.DataProvider != null && isCreatDataProvider) { subprd.ArgumentProvider.DataProvider.Dispose(); } } }
private void Execute(List <IMonitoringSubProduct> waitingSubProducts, IContextMessage contextMessage, IArgumentMissProcessor argumentMissProcessor, string executeGroup, Action <int, string> processTracker) { if (waitingSubProducts == null || waitingSubProducts.Count == 0) { if (contextMessage != null) { contextMessage.PrintMessage("待批量生成的子产品(定量产品\\专题图产品\\统计分析表格等)为空,批量生成进程退出。"); } return; } int step = 100 / waitingSubProducts.Count; int i = 0; foreach (IMonitoringSubProduct subprd in waitingSubProducts) { if (processTracker != null) { processTracker((i++) * step, "正在生成\"" + subprd.Name + "\"......"); } if (contextMessage != null) { contextMessage.PrintMessage("开始生成\"" + subprd.Name + "\"......"); } MakeSubProduct(" ", subprd, contextMessage, argumentMissProcessor, executeGroup, processTracker); if (contextMessage != null) { contextMessage.PrintMessage("\"" + subprd.Name + "\"生成完成。"); } } }
public void Execute(IContextMessage contextMessage, IArgumentMissProcessor argumentMissProcessor, string executeGroup, Action <int, string> processTracker) { string firstSubProduct = GetFirstSubProduct(); Execute(firstSubProduct, contextMessage, argumentMissProcessor, executeGroup, processTracker); }