Esempio n. 1
0
        private IExtractResult SITIAlgorithm(Action <int, string> progressTracker)
        {
            //
            string rasterFile = _argumentProvider.GetArg("SelectedPrimaryFiles") as string;

            if (string.IsNullOrWhiteSpace(rasterFile))
            {
                ISmartSession      session = _argumentProvider.GetArg("SmartSession") as ISmartSession;
                IMonitoringSession ms      = session.MonitoringSession as IMonitoringSession;
                IWorkspace         wks     = ms.GetWorkspace();
                if (wks.ActiveCatalog != null)
                {
                    string[] fs = wks.ActiveCatalog.GetSelectedFiles("0SIT");
                    if (fs != null && fs.Length != 0)
                    {
                        rasterFile = fs[0];
                        _argumentProvider.SetArg("SelectedPrimaryFiles", rasterFile);
                    }
                }
            }
            if (string.IsNullOrEmpty(rasterFile) || !File.Exists(rasterFile))
            {
                return(null);
            }
            //栅格统计
            Dictionary <string, Func <short, bool> > filters = new Dictionary <string, Func <short, bool> >();

            //海冰厚度中四个标记值
            float[] rasterValues = new float[] { -1, 1, 5, 10 };
            for (int i = 0; i < rasterValues.Length; i++)
            {
                float  min       = rasterValues[i];
                string filterKey = min.ToString();
                filters.Add(filterKey, (v) =>
                {
                    return(v == min);
                });
            }
            Dictionary <string, SortedDictionary <string, double> > dic = RasterStatFactory.Stat(rasterFile, null, filters, progressTracker);

            if (dic == null || dic.Count < 1)
            {
                return(null);
            }
            SortedDictionary <string, double> statAreas = dic[dic.Keys.First()];

            _statAreas = new List <double>();
            double total = 0;

            foreach (string item in statAreas.Keys)
            {
                _statAreas.Add(statAreas[item]);
                total += statAreas[item];
            }
            _statAreas.Add(total);
            return(ThemeGraphyResult(null));
        }
Esempio n. 2
0
        private IStatResult[] StatProcentRasterToStatResult(string fname, string statVector, Dictionary <string, Func <short, bool> > filters, Action <int, string> progressTracker, out string title, out string[] colDescs, bool fullZeroAdd, bool weight, float weightZoom)
        {
            IStatResult[] results = null;
            title    = "";
            colDescs = null;
            string statString       = AreaStatProvider.GetAreaStatItemFileName(statVector);
            IRasterDataProvider rdp = GeoDataDriver.Open(fname) as IRasterDataProvider;
            SortedDictionary <string, double[][]> srcResult = RasterStatFactory.StatPercent <Int16>(fname, statString, filters, progressTracker, weight, weightZoom);
            //删除为空的AOI区域以及计算百分比
            SortedDictionary <string, double[][]> statResult = new SortedDictionary <string, double[][]>();
            //区间个数
            int regionCount = filters.Keys.Count;

            foreach (string key in srcResult.Keys)
            {
                if (srcResult[key] == null)
                {
                    continue;
                }
                else
                {
                    int        zeroCount = 0;
                    double[][] value     = new double[regionCount][];
                    for (int i = 0; i < regionCount; i++)
                    {
                        value[i] = new double[] { srcResult[key][i][0], srcResult[key][i][0] / srcResult[key][i][1] * 100 };
                        if (value[i][0] == 0)
                        {
                            zeroCount++;
                        }
                    }
                    //如果全为0
                    if (fullZeroAdd || (!fullZeroAdd && zeroCount < regionCount))
                    {
                        statResult.Add(key, value);
                    }
                }
            }
            if (statResult.Count == 0)
            {
                return(null);
            }
            string productName = _subProductDef.ProductDef.Name;

            title = productName + statVector;
            string subTitle = GetSubTitle(fname);

            colDescs = new string[] { "面积", "百分比" };
            results  = DicToStatResult(statResult, filters.Keys.ToArray(), subTitle, colDescs);
            if (results == null)
            {
                return(null);
            }
            return(results);
        }
        private IExtractResult StatProcentRaster <T>(string fname, Dictionary <string, Func <short, bool> > filters, Action <int, string> progressTracker)
        {
            string statString = AreaStatProvider.GetAreaStatItemFileName("行政区划");
            SortedDictionary <string, double[][]> srcResult = RasterStatFactory.StatPercent <short>(fname, statString, filters, progressTracker);
            //删除为空的AOI区域以及计算百分比
            SortedDictionary <string, double[][]> statResult = new SortedDictionary <string, double[][]>();
            //区间个数
            int regionCount = filters.Keys.Count;

            foreach (string key in srcResult.Keys)
            {
                if (srcResult[key] == null)
                {
                    continue;
                }
                else
                {
                    int        zeroCount = 0;
                    double[][] value     = new double[regionCount][];
                    for (int i = 0; i < regionCount; i++)
                    {
                        value[i] = new double[] { srcResult[key][i][0], srcResult[key][i][0] / srcResult[key][i][1] * 100 };
                        if (value[i][0] == 0)
                        {
                            zeroCount++;
                        }
                    }
                    //如果全为0,也不添加
                    if (zeroCount < regionCount)
                    {
                        statResult.Add(key, value);
                    }
                }
            }
            if (statResult.Count == 0)
            {
                return(null);
            }
            string      productName = _subProductDef.ProductDef.Name;
            string      title       = productName + "行政区划" + "植被指数统计";
            string      subTitle    = GetSubTitle(fname);
            IStatResult results     = DicToStatResult(statResult, filters.Keys.ToArray(), subTitle);

            if (results == null)
            {
                return(null);
            }
            string outFileIdentify = GetStringArgument("OutFileIdentify");
            string productIdentify = _subProductDef.ProductDef.Identify;
            string filename        = StatResultToFile(new string[] { fname }, results, productIdentify, outFileIdentify, title, null, 1, false, 1);

            return(new FileExtractResult(outFileIdentify, filename));
        }
Esempio n. 4
0
        private IExtractResult StatRasterByVector(string instanceName, string aoiTemplate, Dictionary <string, Func <float, bool> > filters, Action <int, string> progressTracker)
        {
            object aioObj = _argumentProvider.GetArg("AOI");
            string title  = GetStringArgument("title");

            string[] files           = GetStringArray("SelectedPrimaryFiles");
            string   extInfos        = GetStringArgument("extinfo");
            string   outFileIdentify = GetStringArgument("OutFileIdentify");//outfileidentify
            string   statname        = GetStringArgument("statname");
            string   productName     = _subProductDef.ProductDef.Name;
            string   productIdentify = _subProductDef.ProductDef.Identify;
            Dictionary <string, SortedDictionary <string, double> > dic = null;

            if (files == null || files.Length == 0)
            {
                return(null);
            }
            foreach (string file in files)
            {
                dic = RasterStatFactory.Stat(files[0], aoiTemplate, filters, progressTracker);
            }
            dic = RasterStatFactory.Stat(files[0], aoiTemplate, filters, progressTracker);
            if (dic == null || dic.Count == 0)
            {
                return(null);
            }
            title = productName + statname + instanceName;
            string      subTitle = GetSubTitle(files);
            IStatResult results  = DicToStatResult(dic, filters.Keys.ToArray(), subTitle);

            if (results == null)
            {
                return(null);
            }
            string filename = StatResultToFile(files, results, productIdentify, outFileIdentify, title, extInfos, 1, true, 1);

            return(new FileExtractResult(outFileIdentify, filename));
        }
Esempio n. 5
0
        public override IExtractResult Make(Action <int, string> progressTracker, IContextMessage contextMessage)
        {
            _contextMessage = contextMessage;
            if (_argumentProvider == null)
            {
                return(null);
            }
            if (_argumentProvider.GetArg("SelectedPrimaryFiles") == null)
            {
                ISmartSession      session = _argumentProvider.GetArg("SmartSession") as ISmartSession;
                IMonitoringSession ms      = session.MonitoringSession as IMonitoringSession;
                IWorkspace         wks     = ms.GetWorkspace();
                if (wks.ActiveCatalog != null)
                {
                    string[] fs = wks.ActiveCatalog.GetSelectedFiles("NDVI");
                    if (fs != null && fs.Length != 0)
                    {
                        _argumentProvider.SetArg("SelectedPrimaryFiles", fs);
                    }
                }
                if (_argumentProvider.GetArg("SelectedPrimaryFiles") == null)
                {
                    PrintInfo("请选择统计文件!");
                    return(null);
                }
            }
            string[] fname = GetStringArray("SelectedPrimaryFiles");
            if (fname == null || fname.Length <= 0)
            {
                PrintInfo("请选择统计文件!");
                return(null);
            }
            if (_argumentProvider.GetArg("AlgorithmName") == null)
            {
                PrintInfo("参数\"AlgorithmName\"为空。");
                return(null);
            }
            string algorith = _argumentProvider.GetArg("AlgorithmName").ToString();

            if (algorith != "AVGAlgorithm")
            {
                PrintInfo("指定的算法\"" + algorith + "\"没有实现。");
                return(null);
            }
            short validMin = (short)_argumentProvider.GetArg("ValidMin");
            short validMax = (short)_argumentProvider.GetArg("ValidMax");

            if (validMin > validMax)
            {
                return(null);
            }
            string statString = AreaStatProvider.GetAreaStatItemFileName("行政区划");
            SortedDictionary <string, double[]> srcResults = RasterStatFactory.SumAndCountByVector <short>(fname[0], statString,
                                                                                                           (v) => { return(v < validMax && v > validMin); }, progressTracker);

            if (srcResults == null || srcResults.Count < 1)
            {
                return(null);
            }
            SortedDictionary <string, double[]> statResults = new SortedDictionary <string, double[]>();

            //去除无效值
            foreach (string key in srcResults.Keys)
            {
                if (srcResults[key] == null)
                {
                    continue;
                }
                statResults.Add(key, srcResults[key]);
            }
            if (statResults.Count <= 0)
            {
                return(null);
            }
            string      title           = _subProductDef.ProductDef.Name + "平均值统计";
            string      subTitle        = GetSubTitle(fname[0]);
            string      outFileIdentify = _argumentProvider.GetArg("OutFileIdentify").ToString();
            IStatResult results         = DicToStatResult(statResults, subTitle);

            if (results == null)
            {
                return(null);
            }
            string filename = StatResultToFile(fname, results, _subProductDef.ProductDef.Identify, outFileIdentify, title, null, 1, true, 1);

            return(new FileExtractResult(outFileIdentify, filename));
        }