当前位置: 首页 > article >正文

8.5 矢量图层点要素分级(Graduated)渲染使用

转载 8.5 矢量图层点要素分级(Graduated)渲染使用_qgis如何分段渲染数据-CSDN博客

目录

前言

分级(Graduated)渲染

QGis

代码实现

总结


前言

  • 前面介绍了矢量-点要素-单一符号以及矢量-点要素-分类符号的用法
  • 本章介绍分级(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类是分级渲染器,详情见文档,类图如下

  • 以下是实现分级渲染的步骤
  1. 获取分类渲染器:从图层获取渲染器并转换为分类渲染器,代码如下:
    //从图层获取分类渲染器
    QgsFeatureRenderer * layerRenderer= layer->renderer();
    QgsGraduatedSymbolRenderer *graduatedRenderer = QgsGraduatedSymbolRenderer::convertFromRenderer(layerRenderer);

     2. 设置分类属性名称:QgsGraduatedSymbolRenderer类的成员函数setClassAttribute设置分类的字段名称,本例中使用字段RAINFALL

QString attrName = "RAINFALL";
//设置用于分类的属性名称
graduatedRenderer->setClassAttribute(attrName);

    3. 设置分类符号颜色:成员函数setSourceColorRamp( QgsColorRamp *ramp )设置渲染器的分类符号颜色,类图如下

,这里我们使用QgsGradientColorRamp或者QgsRandomColorRamp作为示例,代码如下

#if 1
    //渐变色
    QgsColorRamp *ramp = new QgsGradientColorRamp( QColor( 255, 255, 255 ), QColor( 255, 0, 0 ) );
#else
    //完全随机
    QgsColorRamp *ramp = new QgsRandomColorRamp();
#endif
    graduatedRenderer->setSourceColorRamp(ramp);

     4. 设置分类方法:函数setClassificationMethod( QgsClassificationMethod *method )用于设置方法,分类的方法有Quantile EqualInterval Jenks StdDev Pretty Logarithmic Fixed等,代码如下

const QString methodId = "Quantile";    //设置分类方法
QgsClassificationMethod *method = QgsApplication::classificationMethodRegistry()->method( methodId );
graduatedRenderer->setClassificationMethod( method );

     5. 进行分类:函数updateClasses( const QgsVectorLayer *vl, int nclasses )进行分类动作

int nclasses = 5;   //分为两类
graduatedRenderer->updateClasses( layer, nclasses );

     6. 设置图例名称:函数updateRangeLabel( int rangeIndex, const QString &label )

    //设置每个分类的图例Legend
    graduatedRenderer->updateRangeLabel(0,"small");
    graduatedRenderer->updateRangeLabel(1,"medium");

     7. 设置各个分类的符号:函数updateRangeSymbol( int rangeIndex, QgsSymbol *symbol )

    QVariantMap mp;
    mp[QString("name")] = "resources/plane.svg";
    mp[QString("outline_color")] = "pink";
    mp[QString("size")] = "8.0";
    auto markerSymbolLayer = QgsSvgMarkerSymbolLayer::create(mp);
    QgsSymbolLayerList layerList;
    layerList << markerSymbolLayer;
    auto markerSymbol = new QgsMarkerSymbol(layerList);
    graduatedRenderer->updateRangeSymbol(0, markerSymbol);

总结

  • 分别介绍了qgis软件和qgis cpp api如何实现分级渲染符号化

http://www.kler.cn/a/320405.html

相关文章:

  • (33)iptables设置防火墙策略常用命令(docker环境、非docker环境)
  • java itext后端生成pdf导出
  • 一文了解Android的核心系统服务
  • RSA算法原理
  • 系统思考—跳出症状看全局
  • PgSQL汇总
  • 用 CSS 动画记录宝宝0-280天的变化
  • 传输大咖46 | 还在为如何快速传输大文件困扰?镭速帮你解决
  • 数据集-目标检测系列-老虎检测数据集 tiger>> DataBall
  • 理解JVM中的死锁:原因及解决方案
  • 2015年国赛高教杯数学建模B题互联网+时代的出租车资源配置解题全过程文档及程序
  • 炉石传说辅助攻略—VMOS云手机助攻:国服回归任务要点,哪个辅助更好?
  • TypeScript 设计模式之【享元模式】
  • django项目添加测试数据的三种方式
  • 机器人时代的“触觉革命”:一块小传感器如何颠覆你的认知?
  • 2024最新Python Debugger工具pdb的用法(深度学习项目),了解输入输出的形状大小
  • 【每日一题】LeetCode 2306.公司命名(位运算、数组、哈希表、字符串、枚举)
  • Excel 设置自动换行
  • Qt C++设计模式->组合模式
  • 25 基于51单片机的温度电流电压检测系统(压力、电压、温度、电流、LCD1602)
  • 神经网络(四):UNet图像分割网络
  • iOS 消息机制详解
  • 三光吊舱详解!
  • IT技术之电脑黑屏处理
  • 183天打造行业新标杆!BOE(京东方)国内首条第8.6代AMOLED生产线提前全面封顶
  • Java-多线程-锁