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); }); }
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); }
/// <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()); }