public AlgorithmDef GetAlgorithmDefByAlgorithmIdentify(ExtractAlgorithmIdentify id) { if (Algorithms == null || Algorithms.Length == 0 || id == null) { return(null); } foreach (AlgorithmDef prd in Algorithms) { if (Array.IndexOf(prd.Satellites, id.Satellite) >= 0) { if (id.Sensor == null) { return(prd); } if (Array.IndexOf(prd.Sensors, id.Sensor) >= 0) { if (id.CustomIdentify == null) { return(prd); } if (prd.CustomIdentify == id.CustomIdentify) { return(prd); } } } } return(null); }
private IArgumentProvider GetDefaultArgProvider(string satellite, string sensor, string[] args) { ExtractProductIdentify id1 = new ExtractProductIdentify(); id1.ProductIdentify = _subProductDef.ProductDef.Identify; id1.SubProductIdentify = _subProductDef.Identify; id1.ThemeIdentify = "CMA"; // ExtractAlgorithmIdentify id2 = new ExtractAlgorithmIdentify(); id2.Satellite = satellite; id2.Sensor = sensor; id2.CustomIdentify = (args != null && args.Length > 0) ? args[0] : null; // return(MonitoringThemeFactory.GetArgumentProvider(id1, id2)); }
public static IArgumentProvider GetArgumentProvider(ExtractProductIdentify productIdentify, ExtractAlgorithmIdentify algorithmIdentify) { if (productIdentify == null || algorithmIdentify == null) { return(null); } ThemeDef theme = GetThemeDefByIdentify(productIdentify.ThemeIdentify); if (theme == null) { return(null); } ProductDef prd = theme.GetProductDefByIdentify(productIdentify.ProductIdentify); if (prd == null) { return(null); } SubProductDef subPrd = prd.GetSubProductDefByIdentify(productIdentify.SubProductIdentify); if (subPrd == null) { return(null); } AlgorithmDef alg = subPrd.GetAlgorithmDefByAlgorithmIdentify(algorithmIdentify); IArgumentProvider argprd = CreateArgumentProvider(alg, BandRefTableHelper.GetBandRefTable(algorithmIdentify.Satellite, algorithmIdentify.Sensor)); if (argprd != null) { argprd.SetArg("AlgorithmName", alg.Identify); } return(argprd); }
public string[] GetNeedFirstSettedArguments(string beginSubProduct) { List <string> needFirstSettedArgs = new List <string>(); List <string> initedArgs = new List <string>(); SubProductDef firstSubProduct = _monitoringProduct.Definition.GetSubProductDefByIdentify(beginSubProduct); if (firstSubProduct != null && firstSubProduct.IsNeedCurrentRaster) { needFirstSettedArgs.Add(GeoDo.RSS.MIF.Core.ContextEnvironment.ENV_VAR_NAME_CURRENT_RASTER_FILE); } if (_monitoringProduct.SubProducts != null) { string rstFileName = _contextEnvironment.GetContextVar(GeoDo.RSS.MIF.Core.ContextEnvironment.ENV_VAR_NAME_CURRENT_RASTER_FILE); RasterIdentify rstIdentify = new RasterIdentify(); if (rstFileName != null) { rstIdentify = new RasterIdentify(rstFileName); initedArgs.Add(GeoDo.RSS.MIF.Core.ContextEnvironment.ENV_VAR_NAME_CURRENT_RASTER_FILE); } foreach (IMonitoringSubProduct subprd in _monitoringProduct.SubProducts) { AlgorithmDef alg = subprd.Definition.Algorithms[0]; if (subprd.Definition.IsNeedCurrentRaster && subprd.Definition.Algorithms.Count() > 0) { 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]; } } //子产品不存在实例 if (subprd.Definition.SubProductInstanceDefs == null) { foreach (ArgumentDef arg in alg.Arguments.Where((a) => { return(a is ArgumentDef); })) { if (arg.IsOptional) { continue; } if (arg.RefType == "file" && arg.FileProvider == null) { if (!needFirstSettedArgs.Contains(arg.Name)) { needFirstSettedArgs.Add(arg.Name); } } else if (arg.RefType == "file") { if (arg.FileProvider.Contains("ContextEnvironment:")) { string[] parts = arg.FileProvider.Split(':'); if (!initedArgs.Contains(parts[1]) && !needFirstSettedArgs.Contains(parts[1])) { needFirstSettedArgs.Add(parts[1]); } } } } } //子产品有实例 else { foreach (SubProductInstanceDef ist in subprd.Definition.SubProductInstanceDefs) { if (ist.FileProvider.Contains("ContextEnvironment:")) { string[] parts = ist.FileProvider.Split(':'); if (!initedArgs.Contains(parts[1]) && !needFirstSettedArgs.Contains(parts[1])) { needFirstSettedArgs.Add(parts[1]); } } } } // initedArgs.Add(subprd.Identify); } } return(needFirstSettedArgs.Count > 0 ? needFirstSettedArgs.ToArray() : null); }
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(); } } }