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

news2024/9/22 17:37:52

文章目录

  • 前言
  • 基于规则(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软件以及二次开发实现基于规则的渲染。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

00后如何组织双十一大促看这一篇就够了! | 京东云技术团队

引言 大家好,我是王蒙恩,一名“整顿职场”的00后。作为一名去年刚刚加入京东的校招生,我有幸成为本次CDP平台的11.11备战负责人。虽然早在实习的时候就经历过大促,但是真正组织整个部门的备战还是很难忘的。于是提起笔&#xff0…

二阶段提交

二阶段提交 二阶段提交(英语:Two-phase Commit)是指,为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法(Algorithm)。 二阶段过程 在两阶段提交过程中,主要分为了两种角色协调者&…

实时监控电脑屏幕的软件丨同时查看12台电脑屏幕

Hello 大家好 又见面啦 今天给大家推荐两款比较实用的监控电脑使用情况、屏幕的软件! 软件一 实时性能监控 从软件名就可以看出来,这是一款电脑性能监测工具。它可以实时监测内存、CPU、磁盘占用情况,也能一键结束进程,给电脑提…

MES管理系统与ERP系统的实施顺序与决策

在现今的数字化时代,制造企业纷纷寻求通过先进的系统来提升运营效率。其中,ERP管理系统与MES管理系统被誉为是数字化转型的两大利器。然而,在推进这两个系统时,企业常常面临一个关键问题:究竟应该先实施哪一个系统&…

ASUS华硕ROG幻13笔记本电脑GV301QE原厂Windows10系统

链接:https://pan.baidu.com/s/1aPW0ctRXRNAhE75mzVPdTg?pwdds78 提取码:ds78 华硕玩家国度幻13笔记本电脑锐龙版Ryzen 7 5800HS,显卡3050 3050Ti,3060,3060Ti,3070,3070Ti 原厂W10系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办…

Python武器库开发-flask篇之error404(二十七)

flask篇之error404(二十七) 首先&#xff0c;我们先进入模板的界面创建一个404的html页面 cd templates vim 404.html404.html的内容如下&#xff1a; <h1>error!!!</h1>在 Flask 应用程序中&#xff0c;当用户访问一个不存在的页面的时候&#xff0c;会出现 4…

(一)RISC-V 指令集及寄存器介绍

1. RISC-V指令集介绍 RISC-V 念作 “risk-five”&#xff0c;代表着 Berkeley 所研发的第五代精简指令集。 该项目 2010 年始于加州大学伯克利&#xff08;Berkeley&#xff09;分校&#xff0c;希望选择一款 ISA用于科研和教学。经过前期多年的研究和选型&#xff0c;最终决定…

DE算法简介

文章目录 前言一、DE是什么&#xff1f;二、DE流程2.1 初始化种群2.2 变异&#xff08;差分操作&#xff09;2.3 交叉2.4 选择2.5 重复迭代 三、DE运行结果 前言 这两天看了DE算法&#xff0c;简单说下自己的认识 一、DE是什么&#xff1f; 百科定义&#xff1a;差分进化算…

Linux+qt:创建动态库so,以及如何使用(详细步骤)

目录 1、根据安装Qt Creator的向导进行创建 2、开发动态库注意的一些细节 3、给动态库添加一个对外开放的接口文件 4、了解下Qt的 .pri文件&#xff08;非常实用&#xff09; 5、如何调用动态库.so 1、根据安装Qt Creator的向导进行创建 &#xff08;1&#xff09;选择“…

BetterDisplay Pro v2.0.11(显示器颜色校准软件)

BetterDisplay Pro是一款为Mac电脑设计的屏幕亮度调节软件&#xff0c;旨在提高显示器的色彩和亮度表现。它可以根据用户的需求和显示器的特性&#xff0c;自动调整显示器的亮度、色温、对比度等参数&#xff0c;以获得更加真实、舒适的视觉效果。 这款软件拥有智能调节功能&a…

pyhton重启Deployment和状态

import os import timefrom kubernetes import client, config# 指定配置文件路径 config.load_kube_config(config_fileconfig)# 创建 Kubernetes API 客户端 v1 client.AppsV1Api() v2 client.CoreV1Api() # 指定命名空间 namespace default# 指定 Deployments 名称列表 d…

这些好用的录屏专家,你都知道吗?(干货)

在数字时代&#xff0c;录制屏幕已经成为沟通、教育和创作的重要工具。无论您是一位教育者、企业家还是内容创作者&#xff0c;能够熟练地使用录屏软件将帮助您传达信息和创作内容。在本文中&#xff0c;我们将介绍三款优秀的录屏专家&#xff0c;以帮助您找到最适合自己需求的…

苹果怎么互传照片?简单方法总结好了!

随着时间的推移&#xff0c;手机中的照片数量可能会不断增加&#xff0c;从而导致存储空间不足。这时候&#xff0c;将照片传输到另一个手机可以扩大存储容量&#xff0c;使我们的手机更加顺畅运行。那么&#xff0c;苹果怎么互传照片&#xff1f;在拥有两台苹果设备的情况下&a…

如何为视频添加旁白,有哪些操作技巧?

简而言之&#xff0c;画外音是视频的旁白&#xff0c;在教程视频中添加旁白可以使视频更加有趣&#xff0c;并向观看者传达更多的信息。 如果您是视频制作人&#xff0c;想要为视频添加旁白&#xff0c;可阅读以下文章&#xff0c;可以帮助您更好地进行配音。 制作配音的技巧…

c语言:解决数组有关的删除,排序,合并等问题。

题目1&#xff1a;判断数组是否有序&#xff08;升序或者降序&#xff09; 思路和代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() {int a 0;scanf("%d", &a);int arr[50];int flag1 0;//是降序int flag2 0;//是升序…

计算机系统的层次结构和性能指标

目录 五层结构三个级别语言 计算机性能指标CPU性能指标系统整体的性能指标 五层结构 三个级别语言 编译程序&#xff1a;将高级语言编写的源程序全部语句一次全部翻译成机器语言程序&#xff0c;而后再执行机器语言程序&#xff08;只需翻译一次&#xff09; 解释程序&#xff…

详细介绍:国产操作系统银行麒麟V10的下载和安装

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Linux》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一…

新生儿奶藓:原因、科普和注意事项

引言&#xff1a; 新生儿奶藓是一种常见的婴儿皮肤问题&#xff0c;通常在生后的头几个月内出现。尽管奶藓对婴儿的健康没有太大影响&#xff0c;但了解其原因、科普相关信息以及采取适当的注意事项是帮助父母更好地照顾婴儿皮肤的关键。本文将深入探讨新生儿奶藓的原因、相关…

Kafka-4.1-工作原理综述

1 Kafka工作原理详解 1.1 工作流程 Kafka集群将 Record 流存储在称为 Topic 的类中&#xff0c;每个记录由⼀个键、⼀个值和⼀个时间戳组成。 Kafka 中消息是以 Topic 进⾏分类的&#xff0c;⽣产者⽣产消息&#xff0c;消费者消费消息&#xff0c;⾯向的都是同⼀个Topic。Topi…

1964实验室

不知道为什么&#xff0c;我总对51单片机情有独钟&#xff0c;可能因为是启蒙的技术是从51单片机开始的&#xff0c;至于后面我看到了很多更加便宜的、更加牛逼的芯片出来之后&#xff0c;我依然觉得如果是初学者还是要从51单片机开始。 还记得大学时候&#xff0c;我们老师为了…