8.4 矢量图层点要素分类(Categorized)渲染使用

news2024/10/7 10:16:39

文章目录

  • 前言
  • 分类(Categorized)渲染
    • QGis
    • 代码实现
  • 总结

前言

  • 前面几章介绍了矢量-点要素-单一符号的各种用法
  • 所谓单一符号是指点要素的符号在图层显示时只有一种形式
  • 下面介绍的分类(Categorized)渲染
  • 说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps

分类(Categorized)渲染

根据类型(属性表的离散变量)设置不同的符号方案。
Attribute table是地理信息系统名词,它包含地理要素集信息的数据库或表格文件
Attribute table的每行表示一个要素,而每列表示一个要素属性。

  • 下面以图层places_33S.shape为例,分别介绍qgis软件和二次开发中如何使用分类渲染
    在这里插入图片描述

QGis

  • 一般矢量图层中会有一个属性表(Attribute Table),图层places_33S.shape的属性表如下图
    在这里插入图片描述
    在这里插入图片描述
  • places_33S图层属性表有一个字段为IS_TOWN,以下就用该字段进行分类渲染
  • 在图层属性选项中,选择分类(Categorized)渲染,如下图
    在这里插入图片描述
  • 在属性框中,Value选择IS_TOWN,代表该地点是否为城镇
  • 然后点击属性框中的Classify按钮后,完成分类符号创建,其中表头Legend可以手动输入图例名称,如下图所示
    在这里插入图片描述
    在这里插入图片描述
  • 从图中可以清晰分辨图层中的点是否是城镇
  • 在不是城镇或者城镇处双击可以修改符号,如下图
    在这里插入图片描述
  • 我们把符号改为svg marker,效果如下图所示
    在这里插入图片描述

代码实现

  • QgsCategorizedSymbolRenderer是分类渲染器,详见见文档,类图如下
    在这里插入图片描述
  • 以下是实现分类渲染的步骤
  1. 获取分类渲染器
    //从图层获取分类渲染器并转换为分类渲染器
    QgsFeatureRenderer * layerRenderer= layer->renderer();
    QgsCategorizedSymbolRenderer *categorizedRenderer = QgsCategorizedSymbolRenderer::convertFromRenderer(layerRenderer);
  1. 设置分类字段:调用函数setClassAttribute( const QString &attr )
    QString attrName = "IS_TOWN";
    categorizedRenderer->setClassAttribute(attrName);
  1. 创建分类:通过分类字段获取字段值,并创建分类,函数createCategories用于创建分类,函数addCategory用于添加分类
    QList<QVariant> uniqueValues;
    const int idx = layer->fields().lookupField( attrName );
    uniqueValues = qgis::setToList( layer->uniqueValues( idx ) );
    QgsSymbol *symbol = QgsSymbol::defaultSymbol( layer->geometryType() );
    QgsCategoryList cats = QgsCategorizedSymbolRenderer::createCategories( uniqueValues, symbol, layer, attrName );
    for(int i = 0;i < cats.size();++i)
    {
        QgsRendererCategory cat = cats.at(i);
        categorizedRenderer->addCategory(cat);
    }
  1. 设置每个分类的符号颜色::函数setSourceColorRamp( QgsColorRamp *ramp )设置渲染器的分类符号颜色,其类图如下
    在这里插入图片描述
    ,这里我们使用QgsGradientColorRamp或者QgsRandomColorRamp作为示例
#if 0
    //使用渐变颜色指定类别颜色
    QgsGradientColorRamp *ramp = new QgsGradientColorRamp(QColor( 255, 255, 255 ), QColor( 255, 0, 0 ));
#else
    //使用随机颜色设定类别颜色
    QgsRandomColorRamp *ramp = new QgsRandomColorRamp();
#endif
    categorizedRenderer->updateColorRamp(ramp);
  1. 设置图例名称:函数updateRangeLabel( int rangeIndex, const QString &label )
    //设置每个分类的图例Legend
    categorizedRenderer->updateCategoryLabel(0,"Not Town");
    categorizedRenderer->updateCategoryLabel(1,"Town");
  1. 设置每个分类的符号:调用函数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);
    categorizedRenderer->updateRangeSymbol(0, markerSymbol);

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

总结

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

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

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

相关文章

【Python爬虫库】pytube使用方法

一、pytube库简介 pytube库是一个python第三方库&#xff0c;用于youtube视频的抓取和其他相关操作。官方文档&#xff1a;pytube 二、基本操作 1、显示视频标题 from pytube import YouTube yt YouTube(https://youtube.com/watch?vIAJsZWhj6GI) print(yt.title)说明&am…

自建网盘平台搭建(源码+教程)

为什么要自己搭建网盘&#xff0c;现在许多大厂的网盘&#xff0c;文件都添加了许多限制&#xff0c;有好多文件会遭到和谐&#xff0c;而且大部分网盘也都会限速&#xff0c;不开通VIP是很难用的&#xff01;这是一套可以运营的网盘&#xff0c;代码无加密可以进行二次开发。下…

dos命令bat结合任务计划程序自动执行py文件

效果 bat文件 run.bat @echo off call C:\ProgramData\Anaconda3\Scripts\activate.bat pytorch C:\ProgramData\Anaconda3\envs\pytorch\python.exe E:\Gerapy_py\gerapy\projects\xmtv\xmtv\start_urls.py下面这个bat文件可以用来判断py文件是否执行成功 @echo off call C…

【Java】Netty创建网络服务端客户端(TCP/UDP)

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Netty创建网络服务端客户端示例。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更…

MySQL模糊查询/模式匹配(Pattern Match)

使用SQL查询数据时&#xff0c;时常会遇到这种情况&#xff0c;我们并不需要精确的匹配&#xff0c;而是要查找具有某类特点的数据。这种场景我们就要用到模糊查询。MySQL中常用的模糊查询方法有2种&#xff1a; like语句模糊查询regexp正则表达式模式匹配 目录 一、使用like模…

基于SSM的社区生鲜电商平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

Java / Android 多线程和 synchroized 锁

s AsyncTask 在Android R中标注了废弃 synchronized 同步 Thread: thread.start() public synchronized void start() {/*** This method is not invoked for the main method thread or "system"* group threads created/set up by the VM. Any new functionali…

Visual Interpretability for Deep Learning: a Survey

Visual Interpretability for Deep Learning: a Survey----《深度学习的视觉可解释性:综述》 摘要 本文回顾了最近在理解神经网络表示以及学习具有可解释性/解耦的中间层表示的神经网络方面的研究。尽管深度神经网络在各种任务中表现出了优越的性能&#xff0c;但可解释性始终…

基于SpringBoot+Vue+uniapp微信小程序实验室预约管理平台详细设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

getid3 获取视频时长

1、首先&#xff0c;我们需要先下载一份PHP类—getid3https://codeload.github.com/JamesHeinrich/getID3/zip/master 2.我在laravel6.0 中使用 需要在composer.json 自动加载 否则系统访问不到 在命令行 执行 composer dump-autoload $getID3 new \getID3();//视频文件需要放…

【PostgreSql本地备份为dump文件与恢复】使用脚本一键备份为dump文件

环境&#xff1a;windows数据库&#xff1a;postgresql 1.准备脚本 backUpDb.bat 脚本为备份脚本&#xff0c;双击运行&#xff0c;右键可以选择编辑&#xff1b;restoreDb.bat 脚本为恢复脚本&#xff0c;双击运行&#xff0c;右键选择编辑&#xff1b; 1.1 脚本介绍 如上图…

数据结构:串(定义,基本操作,存储结构)

目录 1.串的定义2.串的基本操作3.字符集编码4.串的存储结构1.顺序存储2.链式存储 1.串的定义 串&#xff0c;即字符串( String&#xff09;是由零个或多个字符组成的有限序列。 一般记为s ‘a1a2……an’ (n ≥0) 其中&#xff0c;S是串名&#xff0c;单引号括起来的字符序列是…

企业清算有哪些类型?在哪里可以查看相关公告?

企业清算是什么&#xff1f; 企业清算指企业按章程规定解散以及由于破产或其他原因宣布终止经营后&#xff0c;对企业的财产、债权、债务进行全面清查&#xff0c;并进行收取债权&#xff0c;清偿债务和分配剩余财产的经济活动。 企业清算给分为破产清算&#xff0c;非破产清…

华为云交换数据空间 EDS:“可信、可控、可证”能力实现你的数据你做主

文章目录 前言一、数据安全流通价值的必要性和紧迫性1.1、交换数据空间&#xff08;EDS&#xff09;背景1.2、《数字中国建设整体布局规划》1.3、数据流通成为制约数据要素价值释放的瓶颈 二、华为云 EDS 解决方案介绍2.1、构建可控数据交换空间2.2、可控的数据交换框架2.3、定…

互联网医院|线上医疗引领行业发展

您是否曾经遇到过这样的问题&#xff1a;在忙碌的工作中&#xff0c;突然感到身体不适&#xff0c;但却又不想浪费时间和金钱去实体医院&#xff1f;或者是因为疫情的限制&#xff0c;出门看病变得困难重重&#xff1f;那么&#xff0c;今天我要向您介绍的&#xff0c;正是解决…

中断 NVIC的概念和原理

1.什么是中断 中断&#xff1a; 由于中断源的触发&#xff0c;常规程序被打断&#xff0c; CPU转 而运行中断响应函数&#xff0c;而后又回到常规程序的执行&#xff0c; 这一过程叫做中断。 中断优先级的概念 中断的意义和作用 中断处理的过程和术语 STM32 GPIO外部中断简…

【java:牛客每日三十题总结-3】

java:牛客每日三十题总结 总结如下 总结如下 集合相关知识点 Collection主要的子接口: List:可以存放重复内容 Set:不能存放重复内容,所有重复的内容靠hashCode()和equals()两个方法区分 Queue:队列接口 SortedSet:可以对集合中的数据进行排序 Map没有继承Collection接口&…

最新AI系统ChatGPT源码+AI绘画系统源码+支持GPT4.0+Midjourney绘画+搭建部署教程+附源码

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

黑豹程序员-SpringBoot中整合knife4j接口文档

1、Knife介绍 黑豹程序员-架构师学习路线图-百科&#xff1a;Knife4j API接口文档管理 2、坐标 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>2.0.7</version&…

银河麒麟等 Linux系统 安装 .net 3.1,net 6及更高版本的方法

确定 系统的版本。华为鲲鹏处理器是 Arm64位的。 于是到windows 官网下载对应版本 .net sdk 下载地址 https://dotnet.microsoft.com/zh-cn/download/dotnet 2.下载完成后&#xff0c;再linux 服务器 上进入到文件所在目录&#xff0c;建议全英文路径。 然后依次输入以下命令 …