文章目录
- 前言
- 多波段彩色渲染唯一值着色
- QGis设置为唯一值着色
- 二次开发代码实现唯一值着色
 
- 总结
前言
- 介绍栅格图层数据渲染之唯一值着色渲染
- 说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps
多波段彩色渲染唯一值着色
- 以“with_color_table.tif”数据为例,在QGis中加载默认显示为多波段彩色如下图
  
QGis设置为唯一值着色
-  在图层属性的“Symbology”选项卡中选择“Render type”为“Paletted/Unique values” 
  
-  在“Band”中选择需要渲染的波段;在“Color ramp”中选择配色方案。 
-  单击“Classify”按钮会自动统计栅格波段所有的唯一值,并以配色方案的方式显示在列表中。“Value”列表示所有的渲染值;“Color”列表示渲染颜色;“Label”列表示图例文字。 
-  单击列表右下角的“…”下拉按钮,即可从其他图层或外部读取色彩配置表(Color map): - Load Classes from Layer:使用其他图层的色彩配置表。
- Load Color Map from File…:从文件中加载色彩配置表。
- Export Color Map to File…:导出色彩配置表到文件。
 
-  属性设置完成后,图层渲染效果如下图 
  
二次开发代码实现唯一值着色
- 类QgsPalettedRasterRenderer是对应的渲染器,详情见文档,类图如下
  
- 几个静态函数用于分类,代码如下
static QgsPalettedRasterRenderer::ClassData classDataFromFile (const QString &path)
static QgsPalettedRasterRenderer::ClassData classDataFromRaster (QgsRasterInterface *raster, int bandNumber, QgsColorRamp *ramp=nullptr, QgsRasterBlockFeedback *feedback=nullptr)
static QgsPalettedRasterRenderer::ClassData classDataFromString (const QString &string)
static QString classDataToString (const QgsPalettedRasterRenderer::ClassData &classes)
static QgsPalettedRasterRenderer::ClassData colorTableToClassData (const QList< QgsColorRampShader::ColorRampItem > &table)
- 添加文件with_color_table.tif,调用函数colorTableToClassData,根据文件中包含的colorTable生成分类
const QgsPalettedRasterRenderer::ClassData classes = QgsPalettedRasterRenderer::colorTableToClassData( layer->dataProvider()->colorTable( grayBand ) );
- 调用构造函数生成渲染器并设置给图层
- 完整测试代码如下
void MainWindow::rasterPalettedSlot()
{
    //添加测试图层
    QgsRasterLayer *layer = addTestRaster("maps/raster/with_color_table.tif");
    const int grayBand = 1;
    const QgsPalettedRasterRenderer::ClassData classes = QgsPalettedRasterRenderer::colorTableToClassData( layer->dataProvider()->colorTable( grayBand ) );
    auto renderer = new QgsPalettedRasterRenderer( layer->dataProvider(),grayBand,classes );
    layer->setRenderer(renderer);
}
- 效果如下图
  
  
总结
- 介绍了栅格图层唯一值着色的用法














](https://i-blog.csdnimg.cn/direct/7b59c81a6f854d5a993ab76e3d76244f.png)




