public normalization(IFunctionRasterDataset ReferenceRaster, IFunctionRasterDataset TransformRaster, int PercentChange = 20, rasterUtil rasterUtility = null)
 {
     referenceRaster = ReferenceRaster;
     IRasterBandCollection rsBc = (IRasterBandCollection)referenceRaster;
     rsType = referenceRaster.RasterInfo.PixelType;
     cellCount = new int[rsBc.Count];
     minArray = new double[rsBc.Count];
     maxArray = new double[rsBc.Count];
     sumX2Array = new double[rsBc.Count];
     sumXArray = new double[rsBc.Count];
     sumXYArray = new double[rsBc.Count];
     sumYArray = new double[rsBc.Count];
     sumY2Array = new double[rsBc.Count];
     coef = new double[rsBc.Count][];
     blockCellCount = new int[rsBc.Count];
     difDic = new Dictionary<double, int>[rsBc.Count];
     for (int i = 0; i < rsBc.Count; i++)
     {
         difDic[i] = new Dictionary<double, int>();
     }
     transformRaster = TransformRaster;
     pChange = System.Convert.ToDouble(PercentChange) / 200d;
     rsUtil = rasterUtility;
 }
 public static void estimateStatistics(IRaster inRaster, IRaster outRaster, rasterUtil.transType transType)
 {
     IRasterBandCollection rsbci = (IRasterBandCollection)inRaster;
     IRasterBandCollection rsbco = (IRasterBandCollection)outRaster;
     for (int i = 0; i < rsbci.Count; i++)
     {
         IRasterBand rsBi = rsbci.Item(i);
         IRasterBand rsBo = rsbco.Item(i);
         IRasterStatistics rsBStatsi = rsBi.Statistics;
         IRasterStatistics rsBStatso = rsBo.Statistics;
         if (rsBStatsi == null)
         {
             continue;
         }
         if (rsBStatso == null)
         {
             rsBStatso = new RasterStatistics();
         }
         switch (transType)
         {
             case rasterUtil.transType.LOG10:
                 rsBStatso.Maximum = Math.Log10(rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Log10(rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Log10(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Log10(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.LN:
                 rsBStatso.Maximum = Math.Log(rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Log(rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Log(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Log(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.EXP:
                 rsBStatso.Maximum = Math.Exp(rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Exp(rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Exp(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Exp(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.EXP10:
                 rsBStatso.Maximum = Math.Pow(10,rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Pow(10, rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Pow(10, rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Pow(10, rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.ABS:
                 rsBStatso.Maximum = Math.Abs(rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Abs(rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Abs(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Abs(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.SIN:
                 rsBStatso.Maximum = Math.Sin(rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Sin(rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Sin(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Sin(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.COS:
                 rsBStatso.Maximum = 1;
                 rsBStatso.Minimum = -1;
                 rsBStatso.StandardDeviation = Math.Cos(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Cos(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.TAN:
                 rsBStatso.Maximum = Math.Tan(rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Tan(rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Tan(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Tan(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.ASIN:
                 rsBStatso.Maximum = Math.Asin(rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Asin(rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Asin(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Asin(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.ACOS:
                 rsBStatso.Maximum = Math.Acos(rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Acos(rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Acos(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Acos(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.ATAN:
                 rsBStatso.Maximum = Math.Atan(rsBStatsi.Maximum);
                 rsBStatso.Minimum = Math.Atan(rsBStatsi.Minimum);
                 rsBStatso.StandardDeviation = Math.Atan(rsBStatsi.StandardDeviation);
                 rsBStatso.Mean = Math.Atan(rsBStatsi.Mean);
                 break;
             case rasterUtil.transType.RADIANS:
                 rsBStatso.Maximum = rsBStatsi.Maximum*Math.PI/180;
                 rsBStatso.Minimum = rsBStatsi.Minimum * Math.PI / 180;
                 rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation * Math.PI / 180;
                 rsBStatso.Mean = rsBStatsi.Mean * Math.PI / 180;
                 break;
             default:
                 break;
         }
     }
 }
 public polytomousLogisticRaster(ref rasterUtil rasterUtility)
 {
     rsUtil = rasterUtility;
 }
 public IRaster convertFeatureClassToRaster(IFeatureClass featureClass, rasterUtil.rasterType rasterType, IWorkspace outWorkSpace, string outName, double cellSize, IRasterDataset snapRaster, IEnvelope extent)
 {
     ESRI.ArcGIS.GeoAnalyst.IConversionOp convOp = new ESRI.ArcGIS.GeoAnalyst.RasterConversionOpClass();
     ESRI.ArcGIS.GeoAnalyst.IRasterAnalysisEnvironment rasterAnalysisEnvironment = (ESRI.ArcGIS.GeoAnalyst.IRasterAnalysisEnvironment)convOp;
     rasterAnalysisEnvironment.OutSpatialReference = ((IGeoDataset)featureClass).SpatialReference;
     rasterAnalysisEnvironment.OutWorkspace = outWorkSpace;
     object cellS = cellSize;
     object ext = ((IGeoDataset)featureClass).Extent;
     object snap = Type.Missing;
     if(snapRaster!=null)
     {
         snap = snapRaster;
     }
     if (extent != null)
     {
         ext = extent;
     }
     rasterAnalysisEnvironment.SetCellSize(ESRI.ArcGIS.GeoAnalyst.esriRasterEnvSettingEnum.esriRasterEnvValue, ref cellS);
     rasterAnalysisEnvironment.SetExtent(ESRI.ArcGIS.GeoAnalyst.esriRasterEnvSettingEnum.esriRasterEnvValue, ref ext,ref snap);
     string fmt = rasterType.ToString();
     if (fmt == "IMAGINE")
     {
         fmt = "IMAGINE image";
         if (!outName.ToLower().EndsWith(".img")) outName = outName + ".img";
     }
     IRasterDataset geoDset = convOp.ToRasterDataset((IGeoDataset)featureClass, fmt, outWorkSpace, outName);
     IGeoDatasetSchemaEdit2 geoSch = (IGeoDatasetSchemaEdit2)geoDset;
     if (geoSch.CanAlterSpatialReference) geoSch.AlterSpatialReference(rasterAnalysisEnvironment.OutSpatialReference);
     return returnRaster(geoDset);
 }
 private static Dictionary<string, double[][]> getDictionaryValues(ESRI.ArcGIS.Geodatabase.IFeatureClass pointFtr, ESRI.ArcGIS.Geodatabase.IField[] fldsToSummarize, IFunctionRasterDataset strataRaster, geoDatabaseUtility geoUtil, rasterUtil rsUtil)
 {
     IRaster2 rs2 = (IRaster2)rsUtil.createRaster(strataRaster);
     int[] ptfldIndex = new int[fldsToSummarize.Length];
     for (int i = 0; i < ptfldIndex.Length; i++)
     {
         ptfldIndex[i] = pointFtr.FindField(fldsToSummarize[i].Name);
     }
     Dictionary<string, double[][]> outDic = new Dictionary<string, double[][]>();
     IFeatureCursor sCur = pointFtr.Search(null, true);
     IFeature sFtr = sCur.NextFeature();
     while (sFtr != null)
     {
         IGeometry geo = sFtr.Shape;
         IPoint pnt = (IPoint)geo;
         int clm, rw;
         rs2.MapToPixel(pnt.X, pnt.Y,out clm, out rw);
         object strataVlObj = rs2.GetPixelValue(0, clm, rw);
         if(strataVlObj!=null)
         {
             string strataVl = strataVlObj.ToString();
             double[][] vlArr;
             if (outDic.TryGetValue(strataVl, out vlArr))
             {
                 for (int i = 0; i < ptfldIndex.Length; i++)
                 {
                     object vlObj = sFtr.get_Value(ptfldIndex[i]);
                     if (vlObj != null)
                     {
                         double vl = System.Convert.ToDouble(vlObj);
                         vlArr[i][0] += vl;
                         vlArr[i][1] += (vl * vl);
                         vlArr[i][2] += 1;
                     }
                 }
             }
             else
             {
                 vlArr = new double[fldsToSummarize.Length][];
                 for (int i = 0; i < ptfldIndex.Length; i++)
                 {
                     double[] vlSumArr = new double[3];
                     object vlObj =sFtr.get_Value(ptfldIndex[i]);
                     if (vlObj != null)
                     {
                         double vl =  System.Convert.ToDouble(vlObj);
                         vlSumArr[0] = vl;
                         vlSumArr[1] = (vl * vl);
                         vlSumArr[2] = 1;
                     }
                     vlArr[i] = vlSumArr;
                 }
                 outDic[strataVl] = vlArr;
             }
         }
         sFtr = sCur.NextFeature();
     }
     System.Runtime.InteropServices.Marshal.ReleaseComObject(sCur);
     return outDic;
 }
 public batchCalculations(rasterUtil rasterUtility, esriUtil.Forms.RunningProcess.frmRunningProcessDialog runningDialog)
 {
     rsUtil = rasterUtility;
     if (rp != null) rp = runningDialog;
 }
 private static double iterValues(double[] doubleArr, rasterUtil.localType localType)
 {
     double outVl = 0;
     foreach (double d in doubleArr)
     {
         switch (localType)
         {
             case rasterUtil.localType.MULTIPLY:
                 outVl = outVl * d;
                 break;
             case rasterUtil.localType.DIVIDE:
                 outVl = outVl / d;
                 break;
             case rasterUtil.localType.SUBTRACT:
                 outVl = outVl - d;
                 break;
             case rasterUtil.localType.POWER:
                 outVl = Math.Pow(outVl, d);
                 break;
             default:
                 break;
         }
     }
     return outVl;
 }
        public static void estimateStatistics(IRaster inRaster, IRaster outRaster, rasterUtil.localType localType)
        {
            IRasterBandCollection rsbci = (IRasterBandCollection)inRaster;
            double[] bMaxArr = new double[rsbci.Count];
            double[] bMinArr = new double[rsbci.Count];
            double[] bMeanArr = new double[rsbci.Count];
            double[] bStdArr = new double[rsbci.Count];
            double[] bModeArr = new double[rsbci.Count];
            double[] bMedianArr = new double[rsbci.Count];
            IRasterBandCollection rsbco = (IRasterBandCollection)outRaster;
            IRasterStatistics rsStatso = rsbco.Item(0).Statistics;

            if (rsStatso == null)
            {
                rsStatso = new RasterStatistics();
            }
            for (int i = 0; i < rsbci.Count; i++)
            {
                IRasterBand rsBi = rsbci.Item(i);
                IRasterStatistics rsBStatsi = rsBi.Statistics;
                if (rsBStatsi == null)
                {
                    continue;
                }
                bMaxArr[i] = rsBStatsi.Maximum;
                bMinArr[i] = rsBStatsi.Minimum;
                bMeanArr[i] = rsBStatsi.Mean;
                bStdArr[i] = rsBStatsi.StandardDeviation;
            }
            switch (localType)
            {
                case rasterUtil.localType.MAX:
                    rsStatso.Maximum = bMaxArr.Max();
                    rsStatso.Minimum = bMinArr.Max();
                    rsStatso.Mean = bMeanArr.Max();
                    rsStatso.StandardDeviation = bStdArr.Max();
                    break;
                case rasterUtil.localType.MIN:
                    rsStatso.Maximum = bMaxArr.Min();
                    rsStatso.Minimum = bMinArr.Min();
                    rsStatso.Mean = bMeanArr.Min();
                    rsStatso.StandardDeviation = bStdArr.Min();
                    break;
                case rasterUtil.localType.MAXBAND:
                case rasterUtil.localType.MINBAND:
                    rsStatso.Maximum = rsbci.Count;
                    rsStatso.Minimum = 1;
                    rsStatso.Mean = rsbci.Count/2;
                    rsStatso.StandardDeviation = (rsStatso.Mean*0.48)/3;
                    break;
                case rasterUtil.localType.SUM:
                    rsStatso.Mean = bMeanArr.Sum();
                    rsStatso.Maximum = bMaxArr.Sum();
                    rsStatso.Minimum = bMinArr.Sum();
                    rsStatso.StandardDeviation = bStdArr.Sum();
                    break;
                case rasterUtil.localType.MULTIPLY:
                    rsStatso.Mean = iterValues(bMeanArr,localType);
                    rsStatso.Maximum = iterValues(bMeanArr, localType);
                    rsStatso.Minimum = iterValues(bMeanArr, localType);
                    rsStatso.StandardDeviation = iterValues(bMeanArr, localType);
                    break;
                case rasterUtil.localType.DIVIDE:
                    rsStatso.Mean = iterValues(bMeanArr, localType);
                    rsStatso.Maximum = iterValues(bMeanArr, localType);
                    rsStatso.Minimum = iterValues(bMeanArr, localType);
                    rsStatso.StandardDeviation = iterValues(bMeanArr, localType);
                    break;
                case rasterUtil.localType.SUBTRACT:
                    rsStatso.Mean = iterValues(bMeanArr, localType);
                    rsStatso.Maximum = iterValues(bMeanArr, localType);
                    rsStatso.Minimum = iterValues(bMeanArr, localType);
                    rsStatso.StandardDeviation = iterValues(bMeanArr, localType);
                    break;
                case rasterUtil.localType.POWER:
                    rsStatso.Mean = iterValues(bMeanArr, localType);
                    rsStatso.Maximum = iterValues(bMeanArr, localType);
                    rsStatso.Minimum = iterValues(bMeanArr, localType);
                    rsStatso.StandardDeviation = iterValues(bMeanArr, localType);
                    break;
                case rasterUtil.localType.MEAN:
                    rsStatso.Mean = bMeanArr.Average();
                    rsStatso.Maximum = bMaxArr.Average();
                    rsStatso.Minimum = bMinArr.Average();
                    rsStatso.StandardDeviation = bStdArr.Average();
                    break;
                case rasterUtil.localType.VARIANCE:
                    double stdMean = bStdArr.Average();
                    rsStatso.Mean = Math.Pow(stdMean,2);
                    rsStatso.Maximum = Math.Pow(stdMean*1.65,2);
                    rsStatso.Minimum = Math.Pow(stdMean-(stdMean*0.65),2);
                    rsStatso.StandardDeviation = Math.Pow(stdMean*.21666666,2);
                    break;
                case rasterUtil.localType.STD:
                    rsStatso.Mean = bStdArr.Average();
                    rsStatso.Maximum = rsStatso.Mean*1.65;
                    rsStatso.Minimum = rsStatso.Mean - (rsStatso.Mean*0.65);
                    rsStatso.StandardDeviation = rsStatso.Mean*.21666666;
                    break;
                case rasterUtil.localType.MODE:
                    rsStatso.Mean = bModeArr.Average();
                    rsStatso.Maximum = bModeArr.Max();
                    rsStatso.Minimum = bModeArr.Min();
                    rsStatso.StandardDeviation = rsStatso.Mean * 0.2166666;
                    break;
                case rasterUtil.localType.MEDIAN:
                    rsStatso.Mean = bMedianArr.Average();
                    rsStatso.Maximum = bMedianArr.Max();
                    rsStatso.Minimum = bMedianArr.Min();
                    rsStatso.StandardDeviation = rsStatso.Mean * 0.2166666;
                    break;
                case rasterUtil.localType.UNIQUE:
                    rsStatso.Maximum = rsbci.Count;
                    rsStatso.Minimum = 1;
                    rsStatso.Mean = rsbci.Count/2;
                    rsStatso.StandardDeviation = (rsStatso.Mean*0.48)/3;
                    break;
                case rasterUtil.localType.ENTROPY:
                    rsStatso.Maximum = (-1*0.4*Math.Log(0.4))*(rsbci.Count*.4);
                    rsStatso.Minimum = 0;
                    rsStatso.Mean = (rsStatso.Maximum-rsStatso.Minimum)/2;
                    rsStatso.StandardDeviation = (rsStatso.Mean*0.48)/3;
                    break;
                default:
                    break;
            }
        }
        public string fillDbRaster(IImageServerLayer imSvLyr, IWorkspace wks,ESRI.ArcGIS.Geometry.IEnvelope ext,ISpatialReference sr, out IRaster outrs)
        {
            if (ext.SpatialReference.FactoryCode != sr.FactoryCode)
            {
                ext.Project(sr);
            }
            StringBuilder msg = new StringBuilder();
            if (wks == null)
            {
                wks = servWks;
            }
            outrs = null;
            Forms.RunningProcess.frmRunningProcessDialog rp = new Forms.RunningProcess.frmRunningProcessDialog(false);
            rp.addMessage("Downloading images please be patient...");
            rp.Show();
            //rp.showInSepperateProcess();
            rp.TopMost = true;
            rp.stepPGBar(10);
            rp.Refresh();
            DateTime dtS = DateTime.Now;
            try
            {
                rasterUtil rsUtil = new rasterUtil();
                int minX = System.Convert.ToInt32(ext.XMin);
                int maxX = System.Convert.ToInt32(ext.XMax);
                int minY = System.Convert.ToInt32(ext.YMin);
                int maxY = System.Convert.ToInt32(ext.YMax);
                int xDiff = System.Convert.ToInt32(ext.Width);
                int yDiff = System.Convert.ToInt32(ext.Height);
                int tile = 1;
                IRaster rast = rsUtil.createRaster(((IRaster2)imSvLyr.Raster).RasterDataset);
                ISaveAs saveas = (ISaveAs)rast;
                IRasterProps rasterProps = (IRasterProps)rast;
                imSvLyr.SpatialReference = sr;
                string nm = "T" + System.Guid.NewGuid().ToString().Substring(0, 3);
                string svImgNm = imSvLyr.ServiceInfo.Name;
                string rNm = nm;
                int mCols = System.Convert.ToInt32(imSvLyr.ServiceInfo.MaxNCols * .90);
                int mRows = System.Convert.ToInt32(imSvLyr.ServiceInfo.MaxNRows * .90);
                if (xDiff < mCols) mCols = xDiff;
                if (yDiff < mRows) mRows = yDiff;
                List<IRaster> tileLst = new List<IRaster>();
                for (int i = minX; i < maxX; i += mRows)
                {
                    for (int j = minY; j < maxY; j += mCols)
                    {

                        IEnvelope clipEnvelope = new EnvelopeClass();
                        clipEnvelope.PutCoords(i, j, i + mRows, j + mCols);
                        rasterProps.Extent = clipEnvelope;
                        rasterProps.Width = mRows;
                        rasterProps.Height = mCols;
                        rasterProps.SpatialReference = sr;
                        string r = rNm + tile.ToString();
                        if (r.Length > 12)
                        {
                            rp.addMessage("Too many tiles. Ending at Tile: " + tile);
                            msg.AppendLine("Too many tiles. Ending at Tile: " + tile);
                            //outrs = rsUtil.mosaicRastersFunction(wks, rNm, tileLst.ToArray(),esriMosaicMethod.esriMosaicNone,rstMosaicOperatorType.MT_FIRST,true,true,false,true);
                            return msg.ToString();
                        }
                        if (((IWorkspace2)wks).get_NameExists(esriDatasetType.esriDTRasterDataset, r))
                        {
                            r = rsUtil.getSafeOutputName(wks, r);
                            //Console.WriteLine("Deleting Raster " + r);
                            //((IRasterWorkspaceEx)wks).DeleteRasterDataset(r);
                        }
                        rp.addMessage("Creating tile " + r);
                        rp.stepPGBar(5);
                        rp.Refresh();
                        //Console.WriteLine("TestLength  = " + testLng.ToString());
                        tileLst.Add(rsUtil.returnRaster((IRasterDataset)saveas.SaveAs(r, wks, "GDB")));
                        msg.AppendLine("Added Tile " + r);
                        tile++;
                    }
                }
                rp.addMessage("Merging rasters...");
                rp.Refresh();
                //outrs = rsUtil.mosaicRastersFunction(wks, rNm, tileLst.ToArray(), esriMosaicMethod.esriMosaicNone, rstMosaicOperatorType.MT_FIRST, true, true, false, true);
            }
            catch (Exception e)
            {
                string x = e.ToString();
                msg.AppendLine(x);
                Console.WriteLine("Error: " + x);
            }
            finally
            {
                DateTime dtE = DateTime.Now;
                TimeSpan ts = dtE.Subtract(dtS);
                msg.AppendLine("Finished process in " + ts.TotalMinutes + " minutes.");
                rp.addMessage("Finished process in " + ts.TotalMinutes + " minutes.");
                rp.stepPGBar(100);
                rp.enableClose();
                rp.TopMost = false;
                rp.Close();
            }
            return msg.ToString();
        }
 private static void runRawPixel(IFunctionRasterDataset fDset, IPnt pSize, IPnt pLoc, rasterUtil rsUtil)
 {
     IRasterBandCollection rsBc = (IRasterBandCollection)fDset;
     for (int b = 0; b < 1; b++)
     {
         IRasterBand rsb = rsBc.Item(b);
         IRawPixels rP = (IRawPixels)rsb;
         IPixelBlock pb = rP.CreatePixelBlock(pSize);
         rP.Read(pLoc, pb);
         for (int r = 0; r < pb.Height; r++)
         {
             for (int c = 0; c < pb.Width; c++)
             {
                 object vl = pb.GetVal(0, c, r);
             }
         }
     }
 }
 private static void runRawBlock(IFunctionRasterDataset fDset, IPnt pSize, IPnt pLoc, rasterUtil rsUtil)
 {
     IRaster2 rs2 = (IRaster2)rsUtil.createRaster(fDset);
     for (int b = 0; b < 1; b++)
     {
         object vl = rs2.GetPixelValue(b, 100, 100);
     }
     //IRawBlocks rPb = (IRawBlocks)fDset;
     //IPixelBlock pb = rPb.CreatePixelBlock();
     //int bEndc = (int)Math.Ceiling(pSize.X / pb.Width);
     //int bEndr = (int)Math.Ceiling(pSize.Y / pb.Height);
     //for (int rb = 0; rb < bEndr; rb += (int)pSize.Y)
     //{
     //    for (int cb = 0; cb < bEndc; cb += (int)pSize.X)
     //    {
     //        for (int b = 0; b < rPb.RasterInfo.BandCount; b++)
     //        {
     //            Console.WriteLine("Band " + b.ToString());
     //            rPb.ReadBlock(100, 100, b, pb);
     //            for (int r = 0; r < pb.Height; r++)
     //            {
     //                for (int c = 0; c < pb.Width; c++)
     //                {
     //                    object vl = pb.GetVal(0, c, r);
     //                }
     //            }
     //        }
     //    }
     //}
 }
        private static void runRasterPb(IFunctionRasterDataset fDset, IPnt pSize, IPnt pLoc, rasterUtil rsUtil)
        {
            IRaster rs = rsUtil.createRaster(fDset);
            IPixelBlock pb = rs.CreatePixelBlock(pSize);
            rs.Read(pLoc, pb);
            for (int b = 0; b < 1; b++)
            {
                Console.WriteLine("PixelBlock type = " + pb.PixelType[b].ToString());
                Console.WriteLine("fDset type = " + fDset.RasterInfo.PixelType.ToString());
                for (int r = 0; r < pb.Height; r++)
                {
                    for (int c = 0; c < pb.Width; c++)
                    {
                        object vl = pb.GetVal(b, c, r);
                        //if (vl == null) Console.WriteLine("VL = null for r,c " + r.ToString() + ", " + c.ToString());
                        //else Console.WriteLine("VL = " + vl.ToString());
                    }
                }

            }
        }
        static void Main(string[] args)
        {
            //ESRI License Initializer generated code.
            m_AOLicenseInitializer.InitializeApplication(new esriLicenseProductCode[] { esriLicenseProductCode.esriLicenseProductCodeAdvanced}, new esriLicenseExtensionCode[] {});
            System.DateTime dt = System.DateTime.Now;

            System.DateTime dt2;
            TimeSpan ts;
            rasterUtil rsUtil = new rasterUtil();
            geoDatabaseUtility geoUtil = new geoDatabaseUtility();
            featureUtil ftrUtil = new featureUtil();
            string zones = @"C:\Users\jshogland\Documents\JOHN\Requests\TaceyFrescino\forFIESTA\test.gdb\utcobnd";
            string values = @"C:\Users\jshogland\Documents\JOHN\Requests\TaceyFrescino\forFIESTA\test.gdb\AdminBoundary";
            string[] flds = { "m_BAA_all_1" };
            IFeatureClass zonesFtr = geoUtil.getFeatureClass(zones);
            IFeatureClass valuesFtr = geoUtil.getFeatureClass(values);
            ftrUtil.weightFieldValuesByAreaLength(valuesFtr, flds, zonesFtr);

            //string ftpSite = @"ftp://rockyftp.cr.usgs.gov/vdelivery/Datasets/Staged/NAIP/mt_2013/";
            //List<string> fNames = getFileNames(ftpSite);
            //string outDir = @"E:\Helena\NAIP\Bulk Order 421750\NAIP JPG2000";
            //List<string> exNames = getExistingNames(outDir);
            //List<string> tiles = getTiles();
            //for (int i = 0; i < fNames.Count; i++)
            //{
            //    string fName = fNames[i];
            //    string lfn = fName.Substring(0, 7);
            //    if (tiles.Contains(lfn.ToLower()))
            //    {
            //        if (!exNames.Contains(fName))
            //        {
            //            Console.WriteLine("Total number of files = " + fNames.Count.ToString());
            //            Console.WriteLine("Downloading " + fName);
            //            bool gotFile = Download(ftpSite, outDir, fName);
            //            Console.WriteLine("Got File " + fName + " " + gotFile.ToString());
            //        }
            //    }
            //}
            dt2 = System.DateTime.Now;
            ts = dt2.Subtract(dt);
            Console.WriteLine("Total Seconds RawBlock= " + ts.TotalSeconds.ToString());

            m_AOLicenseInitializer.ShutdownApplication();
        }
        /// <summary>
        /// LocalStatistics
        /// </summary>
        /// <param name="inRaster">string, IRasterDataset, or Raster</param>
        /// <returns>IRaster</returns>
        public IFunctionRasterDataset localStatisticsfunction(object inRaster, rasterUtil.localType op)
        {
            string tempAr = funcDir + "\\" + FuncCnt + ".afr";
            IFunctionRasterDataset frDset = new FunctionRasterDatasetClass();
            IFunctionRasterDatasetName frDsetName = new FunctionRasterDatasetNameClass();
            frDsetName.FullName = tempAr;
            frDset.FullName = (IName)frDsetName;
            IRasterFunction rsFunc = null;
            switch (op)
            {
                case localType.MAX:
                    rsFunc = new FunctionRasters.localMaxFunctionDataset();
                    break;
                case localType.MIN:
                    rsFunc = new FunctionRasters.localMinFunctionDataset();
                    break;
                case localType.SUM:
                    rsFunc = new FunctionRasters.localSumFunctionDataset();
                    break;
                case localType.MULTIPLY:
                    rsFunc = new FunctionRasters.localMultiplyFunctionDataset();
                    break;
                case localType.DIVIDE:
                    rsFunc = new FunctionRasters.localDividFunctionDataset();
                    break;
                case localType.SUBTRACT:
                    rsFunc = new FunctionRasters.localSubtractFunctionDataset();
                    break;
                case localType.POWER:
                    rsFunc = new FunctionRasters.localPowFunctionDataset();
                    break;
                case localType.MEAN:
                    rsFunc = new FunctionRasters.localMeanFunctionDataset();
                    break;
                case localType.VARIANCE:
                    rsFunc = new FunctionRasters.localVarianceFunctionDataset();
                    break;
                case localType.STD:
                    rsFunc = new FunctionRasters.localStandardDeviationFunctionDataset();
                    break;
                case localType.MODE:
                    rsFunc = new FunctionRasters.localModeFunctionDataset();
                    break;
                case localType.MEDIAN:
                    rsFunc = new FunctionRasters.localMedianFunctionDataset();
                    break;
                case localType.UNIQUE:
                    rsFunc = new FunctionRasters.localUniqueValuesFunctionDataset();
                    break;
                case localType.ENTROPY:
                    rsFunc = new FunctionRasters.localEntropyFunctionDataset();
                    break;
                case localType.MAXBAND:
                    rsFunc = new FunctionRasters.localMaxBandFunction();
                    break;
                case localType.MINBAND:
                    rsFunc = new FunctionRasters.localMinBandFunction();
                    break;
                case localType.ASM:
                    rsFunc = new FunctionRasters.localAsmFunctionDataset();
                    break;
                default:
                    break;
            }
            FunctionRasters.LocalFunctionArguments args = new FunctionRasters.LocalFunctionArguments(this);

            IFunctionRasterDataset inRs = createIdentityRaster(inRaster);
            args.InRaster = inRs;
            frDset.Init(rsFunc, args);
            return frDset;
        }
 public IFunctionRasterDataset localRescalefunction(object inRaster, rasterUtil.localRescaleType op)
 {
     string tempAr = funcDir + "\\" + FuncCnt + ".afr";
     IFunctionRasterDataset frDset = new FunctionRasterDatasetClass();
     IFunctionRasterDatasetName frDsetName = new FunctionRasterDatasetNameClass();
     frDsetName.FullName = tempAr;
     frDset.FullName = (IName)frDsetName;
     IRasterFunction rsFunc = null;
     switch (op)
     {
         case localRescaleType.PrcTile:
             rsFunc = new FunctionRasters.localPrctileDataset();
             break;
         default:
             break;
     }
     FunctionRasters.LocalRescaleFunctionArguments args = new FunctionRasters.LocalRescaleFunctionArguments(this);
     IFunctionRasterDataset inRs = createIdentityRaster(inRaster);
     args.InRaster = inRs;
     frDset.Init(rsFunc, args);
     return frDset;
 }
 public functionModel()
 {
     rsUtil = new rasterUtil();
 }
 public functionModel(rasterUtil rasterUtility)
 {
     rsUtil = rasterUtility;
 }
 public segmentation(rasterUtil rasterUtility, IRaster inRaster, double maximumArea, double minimumArea, int sensitivity, IWorkspace OutputWorkspace=null, string OutputFeatureClassName="segPoly", bool SmoothPolygon = false)
 {
     rsUtil = rasterUtility;
     inputRaster = inRaster;
     bCnt = ((IRasterBandCollection)inputRaster).Count;
     ftrMeans = new double[bCnt];
     maxArea = maximumArea;
     minArea = minimumArea;
     specificity = sensitivity;
     OutName = OutputFeatureClassName;
     if (OutputWorkspace == null)
     {
         IRaster2 rs2 = (IRaster2)inRaster;
         IDataset dSet = (IDataset)rs2.RasterDataset;
         OutWorkSpace = dSet.Workspace;
     }
     else
     {
         OutWorkSpace = OutputWorkspace;
     }
     Smooth = SmoothPolygon;
 }
 public static void estimateStatistics(IRaster inRaster, IRaster outRaster, rasterUtil.focalType statType,double cells)
 {
     IRasterBandCollection rsbci = (IRasterBandCollection)inRaster;
     IRasterBandCollection rsbco = (IRasterBandCollection)outRaster;
     for (int i = 0; i < rsbci.Count; i++)
     {
         IRasterBand rsBi = rsbci.Item(i);
         IRasterBand rsBo = rsbco.Item(i);
         IRasterStatistics rsBStatsi = rsBi.Statistics;
         IRasterStatistics rsBStatso = rsBo.Statistics;
         if (rsBStatsi == null)
         {
             continue;
         }
         if (rsBStatso == null)
         {
             rsBStatso = new RasterStatistics();
         }
         switch (statType)
         {
             case rasterUtil.focalType.MAX:
                 rsBStatso.Maximum = rsBStatsi.Maximum;
                 rsBStatso.Minimum = rsBStatsi.Minimum;
                 rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation;
                 rsBStatso.Mean = rsBStatsi.Mean;
                 break;
             case rasterUtil.focalType.MIN:
                 rsBStatso.Maximum = rsBStatsi.Maximum;
                 rsBStatso.Minimum = rsBStatsi.Minimum;
                 rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation;
                 rsBStatso.Mean = rsBStatsi.Mean;
                 break;
             case rasterUtil.focalType.SUM:
                 rsBStatso.Maximum = rsBStatsi.Maximum*cells;
                 rsBStatso.Minimum = rsBStatsi.Minimum*cells;
                 rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation*cells;
                 rsBStatso.Mean = rsBStatsi.Mean*cells;
                 break;
             case rasterUtil.focalType.MEAN:
                 rsBStatso.Maximum = rsBStatsi.Maximum;
                 rsBStatso.Minimum = rsBStatsi.Minimum;
                 rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation;
                 rsBStatso.Mean = rsBStatsi.Mean;
                 break;
             case rasterUtil.focalType.MODE:
                 rsBStatso.Maximum = rsBStatsi.Maximum;
                 rsBStatso.Minimum = rsBStatsi.Minimum;
                 rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation;
                 rsBStatso.Mean = rsBStatsi.Mean;
                 break;
             case rasterUtil.focalType.MEDIAN:
                 rsBStatso.Maximum = rsBStatsi.Maximum;
                 rsBStatso.Minimum = rsBStatsi.Minimum;
                 rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation;
                 rsBStatso.Mean = rsBStatsi.Mean;
                 break;
             case rasterUtil.focalType.VARIANCE:
                 rsBStatso.Maximum = rsBStatsi.Maximum;
                 rsBStatso.Minimum = rsBStatsi.Minimum;
                 rsBStatso.StandardDeviation = rsBStatsi.StandardDeviation;
                 rsBStatso.Mean = rsBStatsi.Mean;
                 break;
             case rasterUtil.focalType.STD:
                 rsBStatso.Mean = rsBStatsi.StandardDeviation;
                 rsBStatso.Maximum = rsBStatso.Mean*1.96;
                 rsBStatso.Minimum = rsBStatso.Mean-(rsBStatso.Maximum-rsBStatso.Mean);
                 rsBStatso.StandardDeviation = (rsBStatso.Maximum-rsBStatso.Mean)/3;
                 break;
             case rasterUtil.focalType.UNIQUE:
                 rsBStatso.Maximum = cells;
                 rsBStatso.Minimum = 1;
                 rsBStatso.Mean = cells / 2;
                 rsBStatso.StandardDeviation = (rsBStatso.Maximum - rsBStatso.Mean) / 3;
                 break;
             case rasterUtil.focalType.ENTROPY:
                 rsBStatso.Maximum = cells*0.4*(-1*0.4*Math.Log(0.4));
                 rsBStatso.Minimum = 0;
                 rsBStatso.Mean = rsBStatso.Maximum / 2;
                 rsBStatso.StandardDeviation = (rsBStatso.Maximum - rsBStatso.Mean) / 3;
                 break;
             case rasterUtil.focalType.ASM:
                 rsBStatso.Maximum = 1;
                 rsBStatso.Minimum = 0;
                 rsBStatso.Mean = rsBStatso.Maximum / 2;
                 rsBStatso.StandardDeviation = (rsBStatso.Maximum - rsBStatso.Mean) / 3;
                 break;
             default:
                 break;
         }
     }
 }
 public segmentation()
 {
     rsUtil = new rasterUtil();
 }
 public batchCalculations()
 {
     rsUtil = new rasterUtil();
     //rp.Show();
 }
        public void summarizeRelatedTable(ITable pTable, ITable rTable, string plinkField, string rlinkField, string[] summaryFlds, string[] groupFlds, rasterUtil.focalType[] stats,string pWhere="", string rWhere="")
        {
            bool needCatDic = false;
            if(stats.Contains(rasterUtil.focalType.ASM)||stats.Contains(rasterUtil.focalType.ENTROPY)||stats.Contains(rasterUtil.focalType.MEDIAN)||stats.Contains(rasterUtil.focalType.MODE)||stats.Contains(rasterUtil.focalType.UNIQUE))needCatDic=true;
            HashSet<string> uGroups;
            //Console.WriteLine("Summarizing values");
            Dictionary<string,Dictionary<string, object[][]>> sumDic = getRelatedSummary(pTable, rTable, plinkField, rlinkField, summaryFlds, groupFlds, needCatDic, pWhere, rWhere, out uGroups);//<link,<group,[6][number of fields to summarize]>
            foreach (string s in sumDic.Keys)
            {
                //Console.WriteLine("ID key:" + s);
            }
            foreach (string s in uGroups)
            {
                //Console.WriteLine("Group:" + s);
            }
            //Console.WriteLine("Updating parent");
            int[] newFldNameIndex = new int[summaryFlds.Length * uGroups.Count * (stats.Length+1)];
            string[] newFldNameString = new string[summaryFlds.Length * uGroups.Count * (stats.Length+1)];
            int IndexCnt = 0;
            //int nIndex = pTable.FindField(geoUtil.createField(pTable,"n",esriFieldType.esriFieldTypeDouble,false));
            int linkIndex = pTable.FindField(plinkField);
            for (int i = 0; i < summaryFlds.Length; i++)
            {
                string fldNm = summaryFlds[i];
                foreach(string k in uGroups)
                {
                    string fldNm2 = fldNm + "_" + k;
                    string newFldName = geoUtil.createField(pTable, fldNm2 + "_N", esriFieldType.esriFieldTypeInteger, false);
                    newFldNameString[IndexCnt] = newFldName;
                    newFldNameIndex[IndexCnt] = pTable.FindField(newFldName);
                    IndexCnt += 1;
                    for (int j = 0; j < stats.Length; j++)
                    {
                        string fldNm3 = fldNm2 + "_" + stats[j];
                        newFldName = geoUtil.createField(pTable, fldNm3, esriFieldType.esriFieldTypeDouble, false);
                        newFldNameString[IndexCnt]=newFldName;
                        newFldNameIndex[IndexCnt] = pTable.FindField(newFldName);
                        IndexCnt += 1;
                    }
                }
            }
            IQueryFilter pQf = new QueryFilterClass();
            if (!String.IsNullOrEmpty(pWhere)) pQf.WhereClause = pWhere;
            ICursor cur = pTable.Update(pQf, true);
            IRow rw = cur.NextRow();
            while (rw != null)
            {
                string lnk = rw.get_Value(linkIndex).ToString();
                Dictionary<string,object[][]> d;
                if (sumDic.TryGetValue(lnk, out d))
                {
                    //Console.WriteLine("Found dictionary value " + lnk);
                    object n = 0;
                    for (int i = 0; i < newFldNameString.Length; i++)
                    {
                        string fldNameC = newFldNameString[i];
                        string[] fldnameArr = fldNameC.Split(new char[] { '_' });
                        string fld = fldnameArr[0];
                        string grp = fldnameArr[1];
                        for (int k = 1; k < groupFlds.Length; k++)
                        {
                            grp = grp + "_" + fldnameArr[1 + k];
                        }
                        string st = fldnameArr[fldnameArr.Length-1];
                        object[][] vlFldArr;
                        if (d.TryGetValue(grp, out vlFldArr))
                        {
                            //Console.WriteLine("Found Group value " + grp);
                            object uVl = 0;
                            int clIndex = System.Array.IndexOf(summaryFlds, fld);
                            object[] vlArr = vlFldArr[clIndex];
                            n = vlArr[0];
                            if (st != "N")
                            {
                                rasterUtil.focalType sType = (rasterUtil.focalType)Enum.Parse(typeof(rasterUtil.focalType), st);
                                //Console.WriteLine(sType.ToString());
                                switch (sType)
                                {
                                    case rasterUtil.focalType.SUM:
                                        uVl = vlArr[1];
                                        break;
                                    case rasterUtil.focalType.MIN:
                                        uVl = vlArr[3];
                                        break;
                                    case rasterUtil.focalType.MAX:
                                        uVl = vlArr[4];
                                        break;
                                    case rasterUtil.focalType.MEAN:
                                        uVl = System.Convert.ToDouble(vlArr[1]) / System.Convert.ToDouble(n);
                                        break;
                                    case rasterUtil.focalType.STD:
                                        uVl = Math.Sqrt((System.Convert.ToDouble(vlArr[2]) - (System.Convert.ToDouble(vlArr[1]) / System.Convert.ToDouble(n))) / (System.Convert.ToDouble(n) - 1));
                                        break;
                                    case rasterUtil.focalType.MODE:
                                        uVl = getMode((Dictionary<string, int>)vlArr[5]);
                                        break;
                                    case rasterUtil.focalType.MEDIAN:
                                        uVl = getMedian((Dictionary<string, int>)vlArr[5]);
                                        break;
                                    case rasterUtil.focalType.VARIANCE:
                                        uVl = (System.Convert.ToDouble(vlArr[2]) - (System.Convert.ToDouble(vlArr[1]) / System.Convert.ToDouble(n))) / (System.Convert.ToDouble(n) - 1);
                                        break;
                                    case rasterUtil.focalType.UNIQUE:
                                        uVl = ((Dictionary<string, int>)vlArr[5]).Keys.Count;
                                        break;
                                    case rasterUtil.focalType.ENTROPY:
                                        uVl = getEntropy((Dictionary<string, int>)vlArr[5]);
                                        break;
                                    case rasterUtil.focalType.ASM:
                                        uVl = getASM((Dictionary<string, int>)vlArr[5]);
                                        break;
                                    default:
                                        break;
                                }

                            }
                            else
                            {
                                uVl = n;
                            }
                            rw.set_Value(newFldNameIndex[i], uVl);
                        }
                        else
                        {
                            //Console.WriteLine("Could not find Group " + grp);
                            rw.set_Value(newFldNameIndex[i], 0);
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < newFldNameString.Length; i++)
                    {
                        rw.set_Value(newFldNameIndex[i], 0);
                    }
                }
                cur.UpdateRow(rw);
                rw = cur.NextRow();
            }
            System.Runtime.InteropServices.Marshal.ReleaseComObject(cur);
        }
        public static void summarizeBiomassPolygon(IFeatureClass pointFtr, IField[] fldsToSummarize, IFunctionRasterDataset strataRaster, IFeatureClass standsFtr, geoDatabaseUtility geoUtil = null, rasterUtil rsUtil = null)
        {
            if (geoUtil == null) geoUtil = new geoDatabaseUtility();
            if(rsUtil == null) rsUtil = new rasterUtil();
            int cnt = 0;
            //need to work on calculating N
            Dictionary<string,double[][]> vlDic = getDictionaryValues(pointFtr, fldsToSummarize, strataRaster, geoUtil, rsUtil); //Strata: SummaryFields [{sum,sum2,cnt},...]
            int[] meanFldIndex = new int[fldsToSummarize.Length];
            int[] varFldIndex = new int[fldsToSummarize.Length];
            int[] cntFldIndex = new int[fldsToSummarize.Length];
            //string cntName = geoUtil.createField(standsFtr, "n", esriFieldType.esriFieldTypeInteger, false);
            //int cntIndex = standsFtr.FindField(cntName);
            foreach (IField fld in fldsToSummarize)
            {
                string sName = geoUtil.createField(standsFtr, "v_" + fld.Name, esriFieldType.esriFieldTypeDouble, false);
                varFldIndex[cnt] = standsFtr.FindField(sName);
                string mName = geoUtil.createField(standsFtr, "m_" + fld.Name, esriFieldType.esriFieldTypeDouble, false);
                meanFldIndex[cnt] = standsFtr.FindField(mName);
                string cntName = geoUtil.createField(standsFtr, "n_" + fld.Name, esriFieldType.esriFieldTypeDouble, false);
                cntFldIndex[cnt] = standsFtr.FindField(cntName);
                cnt++;
            }
            IFeatureCursor uCur = standsFtr.Update(null, true);
            IFeature uFtr = uCur.NextFeature();
            while (uFtr != null)
            {
                ESRI.ArcGIS.Geometry.IGeometry geo = uFtr.Shape;
                IFunctionRasterDataset cRs = rsUtil.clipRasterFunction(strataRaster, geo, esriRasterClippingType.esriRasterClippingOutside);
                //Console.WriteLine("Clipping raster");
                Dictionary<string, double> rsStrataPropDic = getStrataProportion(cRs,rsUtil); //Strata: proportion of area
                //int tn = 0;
                //double[] tn = new double[meanFldIndex.Length];
                double[][] updateValuesArr = new double[meanFldIndex.Length][];
                for (int i = 0; i < meanFldIndex.Length; i++)
                {
                    updateValuesArr[i] = new double[3];
                }
                foreach (KeyValuePair<string, double> kvp in rsStrataPropDic)
                {
                    string stratum = kvp.Key;
                    double proportion = kvp.Value;
                    //Console.WriteLine(stratum + " = " + proportion.ToString());
                    double[][] vlDicArr;
                    if (vlDic.TryGetValue(stratum, out vlDicArr))
                    {
                        //double n = vlDicArr[0][2];
                        //tn += System.Convert.ToInt32(n);
                        for (int i = 0; i < meanFldIndex.Length; i++)
                        {
                            double[] dArr = vlDicArr[i];
                            double n = dArr[2];
                            //tn[i] += n;
                            double s=dArr[0];
                            double s2=dArr[1];
                            updateValuesArr[i][0] += (s/n) * proportion;//mean
                            updateValuesArr[i][1] += (s2-Math.Pow(s,2)/n)/(n-1) * proportion;//variance
                            updateValuesArr[i][2] += n;
                        }

                    }
                }
                //uFtr.set_Value(cntIndex, tn);
                for (int i = 0; i < meanFldIndex.Length; i++)
                {
                    uFtr.set_Value(meanFldIndex[i], updateValuesArr[i][0]);
                    uFtr.set_Value(varFldIndex[i], updateValuesArr[i][1]);
                    uFtr.set_Value(cntFldIndex[i], updateValuesArr[i][2]);
                }
                uCur.UpdateFeature(uFtr);
                uFtr = uCur.NextFeature();
            }
            System.Runtime.InteropServices.Marshal.ReleaseComObject(uCur);
        }
 public polytomousLogisticRaster()
 {
     rsUtil = new rasterUtil();
 }
        private static Dictionary<string, double> getStrataProportion(IFunctionRasterDataset strataRaster,rasterUtil rsUtil)
        {
            IRaster2 rs2 = (IRaster2)rsUtil.createRaster(strataRaster);
            Dictionary<string, double> outDic = new Dictionary<string, double>();
            IRasterCursor rsCur = rs2.CreateCursorEx(null);
            //Console.WriteLine(((IRasterProps)rs2).Height.ToString() + ((IRasterProps)rs2).Height.ToString());
            int n = 0;
            do
            {
                IPixelBlock pb = rsCur.PixelBlock;
                //Console.WriteLine("PixelBLock w_h = " + pb.Width.ToString() + "_" + pb.Height.ToString());
                for (int r = 0; r < pb.Height; r++)
                {
                    for (int c = 0; c < pb.Width; c++)
                    {
                        object vlObj = pb.GetVal(0, c, r);
                        if (vlObj != null)
                        {
                            string vl = vlObj.ToString();
                            double vlCnt;
                            if (outDic.TryGetValue(vl, out vlCnt))
                            {
                                outDic[vl] = vlCnt + 1;
                            }
                            else
                            {
                                outDic.Add(vl, 1);
                            }
                            n += 1;
                        }
                        else
                        {
                            //Console.WriteLine("VL Null");
                        }

                    }
                }
            } while (rsCur.Next() == true);
            //Console.WriteLine("OutDic Count = " + outDic.Count.ToString());
            System.Runtime.InteropServices.Marshal.ReleaseComObject(rsCur);
            foreach (string s in outDic.Keys.ToArray())
            {
                double vl = outDic[s];
                outDic[s] = vl / n;
            }
            return outDic;
        }
 public IRaster convertFeatureClassToRaster(IFeatureClass featureClass, rasterUtil.rasterType rasterType, IWorkspace outWorkSpace, string outName, double cellSize, IRasterDataset snapRaster)
 {
     return convertFeatureClassToRaster(featureClass, rasterType, outWorkSpace, outName, cellSize, snapRaster, null);
 }