private void createPeriodRasters(int iterationNumber) { string rpFile = resultsDir + "\\Out_Int_RP_" + iterationNumber.ToString() + ".txt"; List <HashSet <int> > pLst = new List <HashSet <int> >(); List <IRemapFilter> remapFiltLst = new List <IRemapFilter>(); for (int i = 1; i <= numPer; i++) { pLst.Add(new HashSet <int>()); IRemapFilter flt = new RemapFilterClass(); remapFiltLst.Add(flt); } using (System.IO.StreamReader sr = new System.IO.StreamReader(rpFile)) { string ln = sr.ReadLine(); while ((ln = sr.ReadLine()) != null) { string[] lnArr = ln.Split(new char[] { '\t' }); if ((lnArr.Length) < 6) { break; } int period = System.Convert.ToInt32(lnArr[3]); int id = System.Convert.ToInt32(lnArr[0]); if (period > 0) { HashSet <int> oLst = pLst[period - 1]; oLst.Add(id); pLst[period - 1] = oLst; } } sr.Close(); } Dictionary <int, int> vlDic = rsUtil.buildVat(treatGrid); //IRasterInfo2 rsInfo2 = (IRasterInfo2)treatGrid.RasterInfo; //ITable rsVat = rsInfo2.AttributeTable; //if (rsVat == null) //{ //} //ICursor cur = null; //cur = rsVat.Search(null, false); //int valueIndex = cur.FindField("Value"); //IRow rw = cur.NextRow(); //while (rw != null) foreach (int vl in vlDic.Keys) { for (int i = 1; i <= numPer; i++) { IRemapFilter fl = remapFiltLst[i - 1]; HashSet <int> lst = pLst[i - 1]; int nVl = 0; if (lst.Contains(vl)) { nVl = 1; //Console.WriteLine("Add Value Remap Class = " + vl.ToString() + " to " + nVl.ToString()); } fl.AddClass(vl, vl + 0.000001, nVl); } } periodRasterLst.Clear(); for (int i = 1; i <= numPer; i++) { IRemapFilter flt = remapFiltLst[i - 1]; IFunctionRasterDataset oRs = rsUtil.calcRemapFunction(treatGrid, flt);// reSampleRasterGrid(rsUtil.calcRemapFunction(treatGrid, flt)); if (createinter) { rsUtil.saveRasterToDataset(rsUtil.createRaster(oRs), "Treat_" + iterationNumber.ToString() + i.ToString(), wks, rasterUtil.rasterType.IMAGINE); } periodRasterLst.Add(oRs); } }
/// <summary> /// Remaps the values of a given raster to new set of values /// </summary> /// <param name="inRaster">input raster</param> /// <param name="filter">a remap filter</param> /// <returns>IRaster with remaped values</returns> public IFunctionRasterDataset calcRemapFunction(object inRaster, IRemapFilter filter) { IFunctionRasterDataset rRst = createIdentityRaster(inRaster); IDoubleArray rangeArray = new DoubleArrayClass(); IDoubleArray valueArray = new DoubleArrayClass(); double min,max,vl; string tempAr = funcDir + "\\" + FuncCnt + ".afr"; IFunctionRasterDataset frDset = new FunctionRasterDatasetClass(); IFunctionRasterDatasetName frDsetName = new FunctionRasterDatasetNameClass(); frDsetName.FullName = tempAr; frDset.FullName = (IName)frDsetName; IRasterFunction rsFunc = new RemapFunctionClass(); IRemapFunctionArguments args = new RemapFunctionArgumentsClass(); args.AllowUnmatched = filter.AllowUnmatched; args.Raster = rRst; for (int i = 0; i < filter.ClassCount; i++) { filter.QueryClass(i, out min, out max, out vl); rangeArray.Add(min); rangeArray.Add(max); valueArray.Add(vl); } args.InputRanges = rangeArray; args.OutputValues = valueArray; frDset.Init(rsFunc, args); return frDset; }