Exemple #1
0
        private IExtractResult TFRQAlgorithm(Action <int, string> progressTracker)
        {
            IRasterOperator <Int16>   roper      = new RasterOperator <Int16>();
            IInterestedRaster <Int16> timeResult = null;

            string[] files = GetStringArray("SelectedPrimaryFiles");
            if (files == null || files.Length == 0)
            {
                return(null);
            }
            RasterIdentify identify = new RasterIdentify(files);

            identify.SubProductIdentify = _subProductDef.Identify;
            int maxNum = 0;

            timeResult = roper.Times(files, identify, progressTracker, (dstValue, srcValue) =>
            {
                dstValue += srcValue;
                if (maxNum < dstValue)
                {
                    maxNum = dstValue;
                }
                return(dstValue);
            });
            if (timeResult == null || maxNum == 0)
            {
                return(null);
            }
            double zoom = (double)_argumentProvider.GetArg("Zoom");

            return(CalcTreq(timeResult, identify, maxNum, zoom));
        }
Exemple #2
0
        private IExtractResult TFREAlgorithm(Action <int, string> progressTracker)
        {
            IRasterOperator <Int16>   roper      = new RasterOperator <Int16>();
            IInterestedRaster <Int16> timeResult = null;

            string[] files = GetStringArray("SelectedPrimaryFiles");
            if (files == null || files.Length == 0)
            {
                return(null);
            }
            RasterIdentify identify = new RasterIdentify(files);

            identify.SubProductIdentify = _subProductDef.Identify;
            timeResult = roper.Times(files, identify, progressTracker, (dstValue, srcValue) =>
            {
                return((Int16)(dstValue + srcValue));
            });
            if (timeResult == null)
            {
                return(null);
            }
            timeResult.Dispose();
            string workFilename = identify.ToWksFullFileName(".dat");

            File.Copy(timeResult.FileName, workFilename, true);
            return(new FileExtractResult("FLD", workFilename, true));
        }
Exemple #3
0
        private void button2_Click(object sender, EventArgs e)
        {
            string fname1 = "F:\\FIR_NDVI_FY3A_MERSI_250M_20120610164136_20120611164136.dat";
            string fname2 = "F:\\FIR_NDVI_FY3A_MERSI_250M_20120610164136_20120611164136 - 副本.dat";

            IRasterOperator <float> oper = new RasterOperator <float>();

            oper.Times(new string[] { fname1, fname2 }, new RasterIdentify(), (v1, v2) => { return(v1 + v2); });
        }
Exemple #4
0
        public static IExtractResult ComputeMinFile(string[] fnames, RasterIdentify rasterIdentify)
        {
            IRasterOperator <float>   rasterOperator = new RasterOperator <float>();
            IInterestedRaster <float> resultRaster   = rasterOperator.Times(fnames, rasterIdentify,
                                                                            (value, valuei) =>
            {
                if (valuei < value)
                {
                    value = valuei;
                }
                return(value);
            }
                                                                            );

            return(resultRaster);
        }
Exemple #5
0
        /// <summary>
        /// 当期区域像素点频次统计(基于判识二值数据进行计算)
        /// </summary>
        /// <param name="productIdentify">产品标识</param>
        /// <param name="subProIdentify">子产品标识</param>
        /// <param name="invaild">无效值</param>
        public static void TimesStatAnalysisByPixel(string productIdentify, string subProIdentify, Int16 invaild)
        {
            IRasterOperator <Int16>   roper      = new RasterOperator <Int16>();
            RasterIdentify            identify   = GetIdentify(productIdentify, subProIdentify);
            IInterestedRaster <Int16> timeResult = null;

            string[] files = GetFiles();
            //频次统计
            timeResult = roper.Times(files, identify, (dstValue, srcValue) =>
            {
                if (srcValue != invaild)
                {
                    return((Int16)(dstValue++));
                }
                else
                {
                    return(dstValue);
                }
            });
            if (timeResult == null)
            {
                return;
            }
        }
Exemple #6
0
 public override IExtractResult Make(Action <int, string> progressTracker)
 {
     if (_argumentProvider == null || _argumentProvider.GetArg("AlgorithmName") == null)
     {
         return(null);
     }
     if (_argumentProvider.GetArg("AlgorithmName").ToString() == "FLLS")
     {
         string[] files = GetStringArray("SelectedPrimaryFiles");
         if (files == null || files.Count() == 0)
         {
             return(null);
         }
         foreach (string file in files)
         {
             if (!File.Exists(file))
             {
                 return(null);
             }
         }
         IRasterOperator <Int16>   roper      = new RasterOperator <Int16>();
         IInterestedRaster <Int16> timeResult = null;
         DataIdentify di = GetDataIdentify();
         timeResult = roper.Times(files, CreatRasterIndetifyId(files, "FLD", "FLLS", di, null, null), (dstValue, srcValue) =>
         {
             //泛滥水体值==4
             if (srcValue == 4)
             {
                 return(++dstValue);
             }
             else
             {
                 return(dstValue);
             }
         });
         if (timeResult != null && !string.IsNullOrEmpty(timeResult.FileName) && File.Exists(timeResult.FileName))
         {
             //发生[1,5)次
             StatResultItem[] lowResults = null;
             //发生[5,10)次
             StatResultItem[] midResults = null;
             //发生十次及十次以上
             StatResultItem[]            highResults = null;
             IStatAnalysisEngine <Int16> exe         = new StatAnalysisEngine <Int16>();
             using (IRasterDataProvider prd = timeResult.HostDataProvider)
             {
                 lowResults = exe.StatArea(prd, "省级行政区+土地利用类型", (srcValue) =>
                 {
                     if (srcValue >= 1 && srcValue < 5)
                     {
                         return(true);
                     }
                     else
                     {
                         return(false);
                     }
                 });
                 if (files.Count() >= 5)
                 {
                     midResults = exe.StatArea(prd, "省级行政区+土地利用类型", (srcValue) =>
                     {
                         if (srcValue >= 5 && srcValue < 10)
                         {
                             return(true);
                         }
                         else
                         {
                             return(false);
                         }
                     });
                 }
                 if (files.Count() >= 10)
                 {
                     highResults = exe.StatArea(prd, "省级行政区+土地利用类型", (srcValue) =>
                     {
                         if (srcValue >= 10)
                         {
                             return(true);
                         }
                         else
                         {
                             return(false);
                         }
                     });
                 }
             }
             List <StatResultItem> resultList = new List <StatResultItem>();
             if (lowResults != null && lowResults.Count() > 0)
             {
                 foreach (StatResultItem item in lowResults)
                 {
                     item.Name += "_1-5次";
                 }
                 resultList.AddRange(lowResults);
             }
             if (midResults != null && midResults.Count() > 0)
             {
                 foreach (StatResultItem item in midResults)
                 {
                     item.Name += "_5-10次";
                 }
                 resultList.AddRange(midResults);
             }
             if (highResults != null && highResults.Count() > 0)
             {
                 foreach (StatResultItem item in midResults)
                 {
                     item.Name += "_10次以上";
                 }
                 resultList.AddRange(highResults);
             }
             FileExtractResult fileResult = null;
             if (resultList != null && resultList.Count() > 0)
             {
                 string filename = StatResultToFile(files, resultList.ToArray(), "FLD", "FLLS", "水情泛滥历时面积", null);
                 fileResult = new FileExtractResult("FLLS", filename);
             }
             timeResult.Dispose();
             File.Delete(timeResult.FileName);
             return(fileResult);
         }
         return(null);
     }
     return(null);
 }
        private string GetSNWDegree(string[] files)
        {
            double pixelArea = 0;
            IInterestedRaster <Int16> timeResult = null;
            IRasterOperator <Int16>   roper      = new RasterOperator <Int16>();
            DataIdentify di = GetDataIdentify();
            string       outFileIdentify = GetStringArgument("OutFileIdentify");
            string       extinfo         = GetStringArgument("extinfo");

            timeResult = roper.Times(files, CreatRasterIndetifyId(files, "SNW", outFileIdentify, di, null, extinfo),
                                     (dstValue, srcValue) =>
            {
                if (srcValue == 0)
                {
                    return(dstValue);
                }
                else
                {
                    return(++dstValue);
                }
            });
            IRasterDataProvider dataProvider = timeResult.HostDataProvider;

            if (dataProvider != null)
            {
                ArgumentProvider             ap        = new ArgumentProvider(dataProvider, null);
                RasterPixelsVisitor <Int16>  visitor   = new RasterPixelsVisitor <Int16>(ap);
                IPixelFeatureMapper <double> memresult = new MemPixelFeatureMapper <double>("0SDC", 1000, new Size(dataProvider.Width, dataProvider.Height), dataProvider.CoordEnvelope, dataProvider.SpatialRef);
                IInterestedRaster <double>   iir       = null;
                try
                {
                    visitor.VisitPixel(new int[] { 1 }, (index, values) =>
                    {
                        if (values[0] == 0)
                        {
                            memresult.Put(index, 0);
                        }
                        else
                        {
                            pixelArea = RasterOperator <Int16> .ComputePixelArea(index / dataProvider.Width, dataProvider.CoordEnvelope.MaxY, dataProvider.ResolutionY);
                            memresult.Put(index, pixelArea * values[0]);
                        }
                    });
                    RasterIdentify id = new RasterIdentify();
                    id.ThemeIdentify      = "CMA";
                    id.ProductIdentify    = "SNW";
                    id.SubProductIdentify = "0SDC";
                    id.GenerateDateTime   = DateTime.Now;
                    iir = new InterestedRaster <double>(id, new Size(dataProvider.Width, dataProvider.Height), dataProvider.CoordEnvelope.Clone());
                    iir.Put(memresult);
                    return(iir.FileName);
                }
                finally
                {
                    if (iir != null)
                    {
                        iir.Dispose();
                    }
                    if (visitor != null)
                    {
                        visitor.Dispose();
                    }
                    if (timeResult != null)
                    {
                        timeResult.Dispose();
                    }
                    if (File.Exists(timeResult.FileName))
                    {
                        File.Delete(timeResult.FileName);
                    }
                }
            }
            return(null);
        }