8.6 矢量图层点要素基于规则(Rule-based)渲染使用

文章目录

  • 前言
  • 基于规则(Rule-based)
    • QGis
    • 代码实现
  • 总结

前言

  • 前面介绍了矢量-点要素-单一符号、矢量-点要素-分类符号以及矢量-点要素-分级符号的使用
  • 本章介绍如何使用基于规则的渲染
  • 说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps

基于规则(Rule-based)

在不同的规则(表达式筛选、特定的分辨率)下,使用不同的符号方案。

  • 以myplaces.shp为例,分别介绍在QGis和二次开发中如何使用基于规则渲染
  • 图层属性表中有一个字段IS_TOWN,使用该字段演示Rule Based Renderer
    在这里插入图片描述

QGis

  • 图层属性框渲染器改为Rule Based,如下图
    在这里插入图片描述
  • 在规则列表中编辑生成的规则,如下图
    在这里插入图片描述
  • 新建一条规则,如下图
    在这里插入图片描述
    在这里插入图片描述
  • 规则设置完成之后,效果如下图
    在这里插入图片描述

代码实现

  • QgsRuleBasedRenderer是基于规则的渲染器,详细内容见文档,类图如下
    在这里插入图片描述
  • 以下是实现基于规则渲染的步骤
  1. 获取分类渲染器:从图层获取渲染器并转换为分类渲染器,代码如下:
    //从图层获取分类渲染器
    QgsFeatureRenderer * layerRenderer= layer->renderer();
    QgsRuleBasedRenderer *ruleBasedRenderer = QgsRuleBasedRenderer::convertFromRenderer(layerRenderer);
  1. 添加规则:类QgsRuleBasedRenderer::Rule代表一条规则,详细见文档
  2. 规则需要设置表达式用于筛选数据,Rule类的函数setFilterExpression用于设置表达式
  3. 针对每条规则,还可以设置规则的符号,Rule类的函数setSymbol用于设置符号
    //生成一条新规则
    QgsSymbol *s = QgsSymbol::defaultSymbol( layer->geometryType() );
    QgsRuleBasedRenderer::Rule *ifrule = new QgsRuleBasedRenderer::Rule( s );
    //设置表达式
    QString filter = QStringLiteral(" \"IS_TOWN\" = 1");
    ifrule->setFilterExpression( filter );
    //设置图例
    ifrule->setLabel( QStringLiteral("TOWN") );
    //使用Simple Marker生成符号,然后为新规则设置符号
    QVariantMap mp;
    mp[QString("name")] = QStringLiteral("circle");
    mp[QString("color")] = QStringLiteral("red");
    QgsMarkerSymbol *townSymbol = QgsMarkerSymbol::createSimple(mp);
    ifrule->setSymbol( townSymbol );
  1. 规则添加到渲染器
    //将规则添加到renderer中
    ruleBasedRenderer->rootRule()->appendChild(ifrule);
  1. 添加else规则:类Rule的函数setIsElse(true)即可
    //添加新规则
    QgsSymbol *s1 = QgsSymbol::defaultSymbol( layer->geometryType() );
    QgsRuleBasedRenderer::Rule *elserule = new QgsRuleBasedRenderer::Rule( s1 );
    //因为取值只有0 1,所以直接设置IsElse为true
    elserule->setIsElse(true);
    elserule->setLabel(QStringLiteral(" Not TOWN"));
    //为规则设置符号
    mp[QString("color")] = QStringLiteral("black");
    QgsMarkerSymbol *nottownSymbol = QgsMarkerSymbol::createSimple(mp);
    elserule->setSymbol(nottownSymbol);

在这里插入图片描述
在这里插入图片描述

总结

  • 分别介绍了使用QGis软件以及二次开发实现基于规则的渲染。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/169374.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round 908 (Div. 2)

一个教训:做题的时候一定要自己模拟一遍所有样例,这样思路出来的很快!!! C. Anonymous Informant Example input Copy 6 5 3 4 3 3 2 3 3 100 7 2 1 5 5 6 1 1 1 1 1 1000000000 1 8 48 9 10 11 12 13 14 …

CTFHub Git泄露

Log 前言 根据题目描述,这个题目需要使用到工具 GitHack 来完成,而 CTFHub 上提供的工具需要在 python2 环境中执行,注意 python3 环境无法使用。 GitHack准备(kali Linux) 打开虚拟机 sudo su 以管理员的身份运行…

力扣刷题-二叉树-完全二叉树的节点个数

222.完全二叉树的节点个数 给出一个完全二叉树,求出该树的节点个数。 示例 1: 输入:root [1,2,3,4,5,6] 输出:6 示例 2: 输入:root [] 输出:0 示例 3: 输入:root [1]…

如何修改dpi为300?96dpi怎么改成300dpi?

平时使用的图片dpi一般都是96,但是我们在打印的时候,都要求dpi为300以上,这时候就需要修改图片分辨率,如何改图片分辨率成了一个问题,所以今天就教大家一个图片分辨率提高在线处理的方法,一起来了解一下吧。…

ArcEngine:如何进行缩放图层、属性信息显示、状态栏显示?

01 前言 如果以后不是工作相关,我或许以后再难了解ArcEngine相关的GIS桌面软件二次开发的内容? 02 要求 创建窗体应用程序;(10分)修改窗口标题为本人的“学号 姓名”;(5分)添加主…

gitlab利用CI多工程持续构建

搭建CI的过程中有多个工程的时候,一个完美的构建过程往往是子工程上的更新(push 或者是merge)触发父工程的构建,这就需要如下建立一个downstream pipeline 子仓库1 .gitlab-ci.yml stages:- buildbuild_job:stage: buildtrigger:project: test_user/tes…

IDEA运行thymeleaf的html文件打开端口为63342且连不上数据库

这边贴apple.html代码 <!DOCTYPE html> <html xmlns:th"http://www.thymeleaf.org"> <head><meta charset"UTF-8"><title>User List</title> </head> <body> <h1>User List</h1> <table&…

Vuex 组件间通讯

组件间通讯 Vuex https://vuex.vuejs.org/zh/ 基本原理 数据提取到父级 // index 文件 import Vue from vue import Vuex from "vuex" import tab from ./tab // 引入 modulesVue.use(Vuex) // 全局引入// 创建 Vuex 实例 export default new Vuex.Store({modules: …

Win10 开始菜单、微软app和设置都打不开(未解决)

环境&#xff1a; Win10专业版 问题描述&#xff1a; Win10 开始菜单、微软app和设置都打不开,桌面个性话打开就报错&#xff0c;打开个性化该文件没有与之关联的程序来执行该操作 解决方案&#xff1a; 一般造成原因是MS-Settings文件系统错误 1.先重启电脑&#xff08;重…

深入解析序列模型:全面阐释 RNN、LSTM 与 Seq2Seq 的秘密

探索序列建模的基础知识和应用。 简介 序列建模是许多领域的一个重要问题&#xff0c;包括自然语言处理 (NLP)、语音识别和语音合成、时间序列预测、音乐生成和「生物信息学」。所有这些任务的共同点是它们需要坚持。接下来的事情的预测是基于历史的。例如&#xff0c;在“哈桑…

面试题-6

1.精灵图和base64的区别是什么&#xff1f; 精灵图:把多张小图整合到一张大图上,利用定位的一些属性把小图显示在页面上,当访问页面可以减少请求,提高加载速度 base64&#xff1a;传输8bit字节代码的编码方式,把原本二进制形式转为64个字符的单位&#xff0c;最后组成字符串 …

Linux 串口应用编程

1 串口 API Linux串口通信&#xff1a; 在 Linux 系统中&#xff0c;操作设备的统一接口就是&#xff1a; open/ioctl/read/write 。 对于 UART &#xff0c;又在 ioctl 之上封装了很多函数&#xff0c;主要是用来设置行规程。所以对于 UART &#xff0c;编程的套路就是…

iceberg学习笔记(2)—— 与Hive集成

前置知识&#xff1a; 1.了解hadoop基础知识&#xff0c;并能够搭建hadoop集群 2.了解hive基础知识 3.Iceberg学习笔记&#xff08;1&#xff09;—— 基础知识-CSDN博客 可以参考&#xff1a; Hadoop基础入门&#xff08;1&#xff09;&#xff1a;框架概述及集群环境搭建_TH…

Chrome添加扩展程序

Crx4Chrome 下载crx 打开扩展程序 如果拖动crx文件到扩展程序提示只能通过Chrome应用商店添加此项内容 修改crx文件后缀为zip并解压&#xff0c;再拖动到扩展程序

CXL崛起:2024启航,2025年开启新时代

在2019年&#xff0c;Intel主导联合多家阿里巴巴、Facebook(也就是改名后Meta)、谷歌、Dell、华为、思科、微软、HPE最初的八巨头&#xff0c;发布了新的互联协议CXL&#xff0c;全称Comupte Express Link。由于在服务器领域享有绝对领导地位&#xff0c;Intel一经号令&#xf…

消息中间的应用场景

1、异步处理 比如用户在电商网站下单&#xff0c;下单完成后会给用户推送短信或邮件&#xff0c;发短信和邮件的过程就可以异步完成。因为下单付款是核心业务&#xff0c;发邮件和短信并不属于核心功能&#xff0c;并且可能耗时较长&#xff0c;所以针对这种业务场景可以选择先…

【Qt开发流程】之程序主窗口

描述 就目前的应用程序而言&#xff0c;一般包含菜单栏、工具栏、状态栏、中央区域等。 qt窗口部件类图如下&#xff1a; 一个主窗口提供了一个构建应用程序用户界面的框架。 Qt有QMainWindow及其相关类来管理主窗口。 QMainWindow有自己的布局&#xff0c;可以向其中添加QTo…

测试之路,女孩子软件测试-职业规划建议,路就在脚下...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、测试岗是不是加…

Upwork 新手使用指南——如何快速在Upwork上接单

Upwork 这个自由职业平台不知道大家听说过没&#xff0c;在 Upwork&#xff0c;如果你是自由职业者&#xff0c;你可以接单&#xff1b;如果你是客户&#xff0c;你可以找人干活。但对于新手来说&#xff0c;怎么使用 Upwork 并且用好 Upwork 是一大难题。因此今天给大家分享 U…

Mistral 7B 比Llama 2更好的开源大模型 (四)

Mistral 7B在平衡高性能和保持大型语言模型高效的目标方面迈出了重要的一步。通过我们的工作,我们的目标是帮助社区创建更实惠、更高效、更高性能的语言模型,这些模型可以在广泛的现实世界应用程序中使用。 Mistral 7B在实践中,对于16K和W=4096的序列长度,对FlashAttentio…