• AE栅格分类渲染问题解决


    一个0-255的波段图像,要分为三类,0-85,85-170,170-255,那么这个断点其实有四个,分别是0,85,170,255

    当按照下面方式写代码时,真正的分类break并没有设置成功。注意黑体部分;

     

            public static void ClassifyRenderRaster(IRasterLayer pRasterLayer, int ClassifyNum)
            {
                IRasterClassifyColorRampRenderer pRClassRend = new RasterClassifyColorRampRenderer() as IRasterClassifyColorRampRenderer;
                IRasterRenderer pRRend = pRClassRend as IRasterRenderer;
    
                IRaster pRaster = pRasterLayer.Raster;
    
                IRasterBandCollection pRBandCol = pRaster as IRasterBandCollection;
                IRasterBand pRBand = pRBandCol.Item(0);
                if (pRBand.Histogram == null)
                {
                    pRBand.ComputeStatsAndHist();
                }
                pRRend.Raster = pRaster;//this
                pRClassRend.ClassCount = ClassifyNum;
                pRRend.Update();//this
                //省略colorRamp的生成代码
    
    
                int[] breaks = { 0, 25, 50, 75, 100, 200 };
                IFillSymbol fillSymbol = new SimpleFillSymbol() as IFillSymbol;
                for (int i = 0; i < pRClassRend.ClassCount; i++)
                {
                    //fillSymbol.Color = colorRamp.get_Color(i);
                    fillSymbol.Color = GetColor(i);
                    pRClassRend.set_Symbol(i, fillSymbol as ISymbol);
                    pRClassRend.set_Break(i, breaks[i]);//this
                   //pRClassRend.set_Label(i, pRClassRend.get_Break(i).ToString("0.00"));
                 } 
                   pRasterLayer.Renderer = pRRend //this
                 }

    改动后成功。IRasterRenderer.Update须在设置break之后,并且IRasterLayer须赋值为IRasterClassifyColorRampRenderer。

     

            public static void ClassifyRenderRaster(IRasterLayer pRasterLayer, int ClassifyNum)
            {
                IRasterClassifyColorRampRenderer pRClassRend = new RasterClassifyColorRampRenderer() as IRasterClassifyColorRampRenderer;
                IRaster pRaster = pRasterLayer.Raster;
    
                IRasterBandCollection pRBandCol = pRaster as IRasterBandCollection;
                IRasterBand pRBand = pRBandCol.Item(0);
                if (pRBand.Histogram == null)
                {
                    pRBand.ComputeStatsAndHist();
                }
    
                pRClassRend.ClassCount = ClassifyNum;
    
                int[] breaks = { 0, 25, 50, 75, 100, 200 };
                IFillSymbol fillSymbol = new SimpleFillSymbol() as IFillSymbol;
                for (int i = 0; i < pRClassRend.ClassCount; i++)
                {
                    fillSymbol.Color = colorRamp.get_Color(i);
                    fillSymbol.Color = GetColor(i);
                    pRClassRend.set_Symbol(i, fillSymbol as ISymbol);
                    pRClassRend.set_Break(i, breaks[i]);
                    //pRClassRend.set_Label(i, pRClassRend.get_Break(i).ToString("0.00"));
                }
    
                //IRasterRenderer pRRend = pRClassRend as IRasterRenderer;
                //pRRend.Update(); 这两句可以省略
                pRasterLayer.Renderer = pRClassRend as IRasterRenderer; //this
            }

      

    开始主要参照这几个,没有解决

    AE 栅格图分级渲染 : 参照这里不重新设置break的话(就是不是自定义分类),只设置每个分级的颜色之类的,是可以的,

    arcengine栅格渲染(栅格重分类) IRasterClassifyColorRampRenderer :未测试

    IRasterClassifyColorRampRenderer 使用时的一些奇怪的地方: 这个顺序不行吧?

  • 相关阅读:
    typedef 函数指针的使用(含例子)
    关于计算机与MCU通信及MAX232、CH340T与PL2303的区别
    CH340电路设计
    USB转串口CH340接线方法
    开漏输出、推挽输出的区别
    STM32位带操作
    STM32启动文件:startup_stm32f10x_hd.s等启动文件的简单描述
    浮点数在内存中的存储方式
    stm32启动地址
    STM32三种启动模式 boot0 boot1
  • 原文地址:https://www.cnblogs.com/GISRSMAN/p/7306119.html
Copyright © 2020-2023  润新知