zoukankan      html  css  js  c++  java
  • 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 使用时的一些奇怪的地方: 这个顺序不行吧?

  • 相关阅读:
    2018-5-19-创建不带BOM-的UTF8
    2018-5-19-创建不带BOM-的UTF8
    2019-2-27-win10-uwp-去掉-Flyout-边框
    2019-2-27-win10-uwp-去掉-Flyout-边框
    PHP addChild() 函数
    PHP addAttribute() 函数
    PHP __construct() 函数
    PDOStatement::setFetchMode
    PDOStatement::setAttribute
    自动收集执行计划
  • 原文地址:https://www.cnblogs.com/GISRSMAN/p/7306119.html
Copyright © 2011-2022 走看看