文章目錄
- 前言
- 多波段彩色渲染唯一值著色
- 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);
}
- 效果如下圖
總結
- 介紹了柵格圖層唯一值著色的用法