Exemple #1
0
        private void button3_Click(object sender, EventArgs e)
        {
            string fname1 = "F:\\FIR_NDVI_FY3A_MERSI_250M_20120610164136_20120611164136.dat";
            IRasterDataProvider     prd  = GeoDataDriver.Open(fname1) as IRasterDataProvider;
            IRasterOperator <float> oper = new RasterOperator <float>();

            count = oper.Count(prd, null, (v) => { return(true); });
        }
Exemple #2
0
        private StatResultItem[] AreaStat(object aoiObj, Func <Int16, bool> filter, string[] files)
        {
            if (files == null || files.Length == 0)
            {
                return(null);
            }
            IStatAnalysisEngine <Int16> exe = new StatAnalysisEngine <Int16>();

            if (aoiObj as Dictionary <string, int[]> != null)
            {
                Dictionary <string, int[]> aoi   = aoiObj as Dictionary <string, int[]>;
                List <StatResultItem>      items = new List <StatResultItem>();
                IRasterDataProvider        prd   = null;
                try
                {
                    prd = GeoDataDriver.Open(files[0]) as IRasterDataProvider;
                    if (aoi == null || aoi.Count == 0)
                    {
                        return(null);
                    }
                    StatResultItem[] item = exe.StatAreaCustom(prd, aoi, filter);
                    if (item != null && item.Length > 0)
                    {
                        items.AddRange(item);
                    }
                    //
                    RasterOperator <Int16> oper = new RasterOperator <Int16>();
                    int            count        = oper.Count(prd, null, filter);
                    StatResultItem sri          = new StatResultItem();
                    sri.Name  = "整个湖区";
                    sri.Value = Math.Round(count * BAGStatisticHelper.CalPixelArea(prd.ResolutionX), 3);
                    items.Add(sri);
                    return(items.ToArray());
                }
                catch
                {
                    throw new ArgumentException("选择的文件:“" + Path.GetFileName(files[0]) + "”无法进行自定义面积统计。");
                }
                finally
                {
                    if (prd != null)
                    {
                        prd.Dispose();
                        prd = null;
                    }
                }
            }
            else
            {
                return(null);
            }
        }
        private double CalcTotalArea(IRasterDataProvider dataProvider, int[] aoi, float minValue, float maxValue)
        {
            double convertArea = 0;
            IRasterOperator <Int16> rasterOper = new RasterOperator <Int16>();
            int count = rasterOper.Count(dataProvider, aoi, (value) =>
            {
                if (minValue < value && value <= maxValue)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            });

            convertArea = count * AreaCountHelper.CalcArea(dataProvider.ResolutionX, dataProvider.ResolutionY);
            return(convertArea / 1000000);
        }
        /// <summary>
        /// 计算指定等级的总覆盖面积
        /// 例如:重度(60%-100%)
        /// 比较条件为:minConvertDegree< x && x<=  maxConvertDegree
        /// </summary>
        /// <param name="minConvertDegree"></param>
        /// <param name="maxConvertDegree"></param>
        /// <returns></returns>
        public double CalcTotalConvertArea(IRasterDataProvider dataProvider, float minCovertDegree, float maxCovertDegree, double pixelArea)
        {
            double convertArea = 0;
            IRasterOperator <float> rasterOper = new RasterOperator <float>();
            int count = rasterOper.Count(dataProvider, null, (value) =>
            {
                if (minCovertDegree < value && value <= maxCovertDegree)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            });

            convertArea = count * pixelArea;
            return(convertArea);
        }
        /// <summary>
        /// 计算指定等级的总覆盖面积
        /// 例如:重度(60%-100%)
        /// 比较条件为:minConvertDegree< x && x<=  maxConvertDegree
        /// </summary>
        /// <param name="minConvertDegree"></param>
        /// <param name="maxConvertDegree"></param>
        /// <returns></returns>
        public double CalcTotalConvertArea(IRasterDataProvider dataProvider, int[] aoi, float minCovertDegree, float maxCovertDegree)
        {
            double convertArea = 0;
            IRasterOperator <float> rasterOper = new RasterOperator <float>();
            int count = rasterOper.Count(dataProvider, aoi, (value) =>
            {
                if (minCovertDegree < value && value <= maxCovertDegree)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            });
            double pixelArea = BAGStatisticHelper.CalPixelArea(dataProvider.ResolutionX);

            convertArea = count * pixelArea;
            return(convertArea);
        }
        /// <summary>
        /// 计算云覆盖面积
        /// </summary>
        /// <returns></returns>
        public double CalcCloudConvertArea(IRasterDataProvider dataProvider, int[] aoi)
        {
            double cloudArea = 0;
            IRasterOperator <Int16> rasterOper = new RasterOperator <Int16>();
            int count = rasterOper.Count(dataProvider, aoi, (value) =>
            {
                if (value == 1)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            });
            double pixelArea = BAGStatisticHelper.CalPixelArea(dataProvider.ResolutionX);

            cloudArea = count * pixelArea;
            return(cloudArea);
        }
Exemple #7
0
        /// <summary>
        /// 计算云覆盖度
        /// </summary>
        /// <param name="dataProvider">云监测生成的判识结果文件</param>
        /// <param name="pixelCount">指定区域像素点个数(例如:太湖区域像素点总数)</param>
        /// <returns></returns>
        public float CalcCloudConvertDegree(IRasterDataProvider dataProvider, int[] aoi)
        {
            if (dataProvider == null || aoi.Count() == 0)
            {
                return(0);
            }
            long nCloud = 0;
            IRasterOperator <UInt16> rasterOper = new RasterOperator <UInt16>();

            nCloud = rasterOper.Count(dataProvider, aoi, (value) =>
            {
                if (value == 1)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            });
            return((float)nCloud / (float)aoi.Count());
        }