示例#1
0
        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;
 }