前言
- 前面介绍了矢量-点要素-单一符号以及矢量-点要素-分类符号的用法
- 本章介绍分级(Graduated)渲染
- 说明:文章中的示例代码均来自 开源项目qgis_cpp_api_apps
分级(Graduated)渲染
根据数值大小(数据表的连续变量),利用配色方案(Color ramp)设置不同的颜色。
- 以myplaces.shp为例分别介绍分级渲染在qgis软件中的使用以及二次开发中如何使用分级渲染
QGis
- myplaces.shp图层有一个RAINFALL属性,代表各个地点的降水量,属性表见下图
- 在图层属性选项中,选择分级(Graduated)渲染,如下图
- Value选择字段RAINFALL,Mode和Classes保持默认,点击Classify按钮后,生成符号表,如下图
- 可以看到随着降水量的增加,地图上的点颜色更加深了,如下图
- 双击子符号,可以修改符号,如下图
- 如将30-135区间的符号修改为svg
代码实现
QgsGraduatedSymbolRenderer
类是分级渲染器,详情见 文档,类图如下
- 以下是实现分级渲染的步骤
- 获取分类渲染器:从图层获取渲染器并转换为分类渲染器,代码如下:
- 设置分类属性名称:
QgsGraduatedSymbolRenderer
类的成员函数setClassAttribute
设置分类的字段名称,本例中使用字段RAINFALL
- 设置分类符号颜色:成员函数
setSourceColorRamp( QgsColorRamp *ramp )
设置渲染器的分类符号颜色,类图如下
,这里我们使用QgsGradientColorRamp
或者QgsRandomColorRamp
作为示例,代码如下
- 设置分类方法:函数
setClassificationMethod( QgsClassificationMethod *method )
用于设置方法,分类的方法有Quantile EqualInterval Jenks StdDev Pretty Logarithmic Fixed等,代码如下
- 进行分类:函数
updateClasses( const QgsVectorLayer *vl, int nclasses )
进行分类动作
- 设置图例名称:函数
updateRangeLabel( int rangeIndex, const QString &label )
- 设置各个分类的符号:函数
updateRangeSymbol( int rangeIndex, QgsSymbol *symbol )
总结
- 分别介绍了qgis软件和qgis cpp api如何实现分级渲染符号化