Пример #1
0
 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);
         }
     }
 }
Пример #2
0
        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);
                    }
                }
            }
        }
Пример #3
0
        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);
                }
            }
        }
Пример #4
0
        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();
                }
            }
        }
Пример #5
0
        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 + "\"生成完成。");
                }
            }
        }
Пример #6
0
        public void Execute(IContextMessage contextMessage, IArgumentMissProcessor argumentMissProcessor, string executeGroup, Action <int, string> processTracker)
        {
            string firstSubProduct = GetFirstSubProduct();

            Execute(firstSubProduct, contextMessage, argumentMissProcessor, executeGroup, processTracker);
        }