示例#1
0
        public static IRasterRenderer CreateContinuousRenderer(Raster gRaster, IColorRamp pColorRamp, bool bInvert = false)
        {
            try
            {
                gRaster.ComputeStatistics();
                Dictionary <string, decimal> stats = gRaster.GetStatistics();
                double rMin = (double)stats["min"];
                double rMax = (double)stats["max"];

                RasterStretchColorRampRenderer stretchRenderer = new RasterStretchColorRampRenderer();
                IRasterRenderer rasterRenderer = (IRasterRenderer)stretchRenderer;
                IRasterDataset  rasterDataset  = ArcMapUtilities.GetRasterDataset(gRaster);
                IRaster         raster         = rasterDataset.CreateDefaultRaster();
                rasterRenderer.Raster = raster;

                IRasterRendererColorRamp pRenderColorRamp = (IRasterRendererColorRamp)rasterRenderer;
                pRenderColorRamp.ColorRamp = pColorRamp;
                int iRound = GetMagnitude(rMin);
                stretchRenderer.LabelHigh = Math.Round(rMax, Math.Abs(iRound)).ToString();
                stretchRenderer.LabelLow  = Math.Round(rMin, Math.Abs(iRound)).ToString();

                if (bInvert)
                {
                    IRasterStretch2 pStretch = (IRasterStretch2)stretchRenderer;
                    pStretch.Invert = true;
                }

                rasterRenderer.Update();
                return(rasterRenderer);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                return(null);
            }
        }
示例#2
0
        public static IRasterRenderer CreateDoDClassifyRenderer(Raster gRaster, int iClassCount, double rampRange)
        {
            try
            {
                // Open file raster dataset and ensure that statistics and histograms are present (absence of histograms will cause Renderer.Update() to crash)
                IRasterDataset rasterDataset = ArcMapUtilities.GetRasterDataset(gRaster);
                ESRI.ArcGIS.DataSourcesRaster.IRasterBandCollection pRastBands     = (ESRI.ArcGIS.DataSourcesRaster.IRasterBandCollection)rasterDataset;
                ESRI.ArcGIS.DataSourcesRaster.IEnumRasterBand       enumRasterBand = (ESRI.ArcGIS.DataSourcesRaster.IEnumRasterBand)pRastBands.Bands;
                rasterDataset.PrecalculateStats(0);
                ESRI.ArcGIS.DataSourcesRaster.IRasterBand pRastBand = enumRasterBand.Next();
                pRastBand.ComputeStatsAndHist();

                IRasterClassifyColorRampRenderer classifyRenderer = new RasterClassifyColorRampRendererClass();
                IRasterRenderer rasterRenderer = (IRasterRenderer)classifyRenderer;
                IFillSymbol     fillSymbol     = new SimpleFillSymbolClass();
                IRaster         raster         = rasterDataset.CreateDefaultRaster();

                double rMin = -2.5;
                double rMax = 2.5;
                if (rampRange == 0)
                {
                    gRaster.ComputeStatistics();
                    Dictionary <string, decimal> rasterStats = gRaster.GetStatistics();
                    rMin = (double)rasterStats["min"];
                    rMax = (double)rasterStats["max"];
                }
                else
                {
                    rMin = rampRange * -1;
                    rMax = rampRange;
                }

                rasterRenderer.Raster = raster;
                if ((rMin == double.MinValue & rMax == double.MaxValue) | (rMin == double.MaxValue & rMax == double.MinValue) | (rMin == float.MinValue & rMax == float.MaxValue) | (rMin == float.MaxValue & rMax == float.MinValue))
                {
                    classifyRenderer.ClassCount = 1;
                    ESRI.ArcGIS.Display.IRgbColor rgbColor = CreateRGBColor(255, 255, 255);
                    rgbColor.Transparency      = 0;
                    fillSymbol.Color           = rgbColor;
                    classifyRenderer.Symbol[0] = (ISymbol)fillSymbol;
                    classifyRenderer.Label[0]  = "No Data (no change detected)";
                    return(rasterRenderer);
                }

                classifyRenderer.ClassCount = iClassCount;
                rasterRenderer.Update();
                CreateDoDClassBreaks(rMax, rMin, iClassCount, ref classifyRenderer);
                List <IColor> lColors = CreateDoDColorRamp();
                for (int i = 0; i < classifyRenderer.ClassCount; i++)
                {
                    fillSymbol.Color           = lColors[i];
                    classifyRenderer.Symbol[i] = (ISymbol)fillSymbol;
                }

                return(rasterRenderer);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                return(null);
            }
        }