8.12 矢量图层面要素单一符号使用二(仅渲染中心点)

news2024/11/24 14:02:32

文章目录

  • 前言
  • 仅渲染中心点(Centroid fill)
    • QGis设置面符号为仅渲染中心点(Centroid fill)
    • 二次开发代码实现仅渲染中心点(Centroid fill)
  • 总结

前言

  • 本章介绍矢量图层线要素单一符号中仅渲染中心点(Centroid fill)的使用
  • 说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps

仅渲染中心点(Centroid fill)

Centroid fill 是一种用于地理信息系统 (GIS) 中填充面状地物的方法。在计算每个多边形的质心后,将该点与邻近的多边形连接,然后填充整个区域。该方法通常用于将遥感图像转换为矢量格式,或者在地图制作中创建特定类型的地图,例如土壤类型地图或植被覆盖地图。

  • 以water.shp为例,在QGis中添加water图层,QGis中默认使用的符号是简单填充(Simple fill),如下图
    在这里插入图片描述

QGis设置面符号为仅渲染中心点(Centroid fill)

  • Symbol layer type设置为Centroid fill
  • 其子符号为Marker符号,如下图
    在这里插入图片描述
  • 属性设置完成后图层显示效果如下图
    在这里插入图片描述

二次开发代码实现仅渲染中心点(Centroid fill)

  • QgsCentroidFillSymbolLayer是仅渲染中心点(Centroid fill),详情见文档,类图如下
    在这里插入图片描述
  • QgsCentroidFillSymbolLayer需要设置子符号为Marker符号
  • QgsCentroidFillSymbolLayer构造函数中默认创建了一个Simple Marker的符号,代码如下
QgsCentroidFillSymbolLayer::QgsCentroidFillSymbolLayer()
{
  setSubSymbol( new QgsMarkerSymbol() );
}
  • 创建符号层有两种方法:构造函数和create
  • 方法一
  1. 从图层获取渲染器
    //从图层获取渲染器
    QgsFeatureRenderer * layerRenderer= layer->renderer();
    QgsSingleSymbolRenderer *singleSymbolRenderer = QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer);
  1. 构造函数:修改属性可以调用setxxx函数,如下代码
    auto centroidFillSymbolLayer = new QgsCentroidFillSymbolLayer();
    centroidFillSymbolLayer->setPointOnSurface(false);
    centroidFillSymbolLayer->setPointOnAllParts(true);
    centroidFillSymbolLayer->setClipPoints(false);
    centroidFillSymbolLayer->setClipOnCurrentPartOnly(false);
  1. 创建符号并设置到渲染器
    //多个Symbol Layer构成一个Symbol
    QgsSymbolLayerList layerList;
    layerList << centroidFillSymbolLayer;
    //构造QgsFillSymbol并设置renderer
    auto fillSymbol = new QgsFillSymbol(layerList);
    singleSymbolRenderer->setSymbol(fillSymbol);
    layer->setRenderer(singleSymbolRenderer);
  • 方法二
    方法一中步骤1,3不变,步骤2中使用create()成员函数,颜色方案同样有两种选择
    QVariantMap mp;
    mp["point_on_surface"] = QStringLiteral("0");
    mp["point_on_all_parts"] = QStringLiteral("1");
    mp["clip_points"] = QStringLiteral("0");
    mp["clip_on_current_part_only"] = QStringLiteral("0");
    auto centroidFillSymbolLayer = QgsCentroidFillSymbolLayer::create(mp);
  • 完整测试代码如下
void MainWindow::polygonCentroidSlot()
{
    //添加一个线图层
    QgsVectorLayer* layer = addTestShape(QStringLiteral("maps/shapefile/water.shp"));
    //从图层获取渲染器
    QgsFeatureRenderer * layerRenderer= layer->renderer();
    QgsSingleSymbolRenderer *singleSymbolRenderer = QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer);
#if 0
    auto centroidFillSymbolLayer = new QgsCentroidFillSymbolLayer();
    centroidFillSymbolLayer->setPointOnSurface(false);
    centroidFillSymbolLayer->setPointOnAllParts(true);
    centroidFillSymbolLayer->setClipPoints(false);
    centroidFillSymbolLayer->setClipOnCurrentPartOnly(false);
#else
    QVariantMap mp;
    mp["point_on_surface"] = QStringLiteral("0");
    mp["point_on_all_parts"] = QStringLiteral("1");
    mp["clip_points"] = QStringLiteral("0");
    mp["clip_on_current_part_only"] = QStringLiteral("0");
    auto centroidFillSymbolLayer = QgsCentroidFillSymbolLayer::create(mp);
#endif
    //多个Symbol Layer构成一个Symbol
    QgsSymbolLayerList layerList;
    layerList << centroidFillSymbolLayer;
    //构造QgsFillSymbol并设置renderer
    auto fillSymbol = new QgsFillSymbol(layerList);
    singleSymbolRenderer->setSymbol(fillSymbol);
    layer->setRenderer(singleSymbolRenderer);

}
  • 效果如下图
    在这里插入图片描述
    在这里插入图片描述

总结

  • 介绍了矢量图层面要素单一符号中的仅渲染中心点(Centroid fill)使用

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

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

相关文章

【三】【QT开发应用】VSQT和QTCreator项目互相转化的方法,QTCreator项目转化VSQT,VSQT转化为QTCreator

VSQT和QTCreator项目互相转化的方法 QTCreator项目转化VSQT 环境变量配置 将qmake.exe所在的目录添加到系统path里面. 转化命令 qmake -tp vc xxx.pro 生成.vcxproj文件 环境变量配置 将qmake.exe所在的目录路径添加到系统path中. 接着用cmd命令行转换,可能出现的问题 …

C++ 70 之 类模版中的成员函数,在类外实现

#include <iostream> #include <string> using namespace std;template<class T1, class T2> class Students10{ public:T1 m_name;T2 m_age;Students10(T1 name, T2 age); // 类内声明 类外实现// {// this->m_name name;// this->m_age …

淘宝文件系统-哈希查找分析

一.框架理解 在淘宝文件系统中&#xff0c;通常会将文件索引存储在一块内存中&#xff0c;这块内存包含了若干个主块&#xff08;Index Block&#xff09;。每个主块中存储着多个文件的索引信息。每个文件的索引按照哈希表的形式进行存储&#xff0c;通过哈希值来定位到具体的文…

QPST的使用

QPST&#xff08;Qualcomm Product Support Tool&#xff09;是一个针对高通芯片开发的传输软件。 下载软件 进行安装 安装后使用&#xff0c;QPSTConfig 可以自动抓取dump的log 使用QFile 刷机

DDPM公式推导(六)

为了整篇文章的完整性&#xff0c;给出文章剩余部分的翻译。这篇博客没有公式推导部分。 4 Experiments 我们在所有实验中设置 T 1000 T1000 T1000&#xff0c;以使采样过程中神经网络评估的次数与之前的工作 [53, 55] 相匹配。我们将前向过程的方差设置为从 β 1 1 0 − …

Redis 6.0新特性详解

Redis 6.0新特性主要有3个&#xff1a;多线程、Client Side Cache、Acls。下面详细说明一下。 1.多线程 redis 6.0 提供了多线程的支持&#xff0c;redis 6 以前的版本&#xff0c;严格来说也是多线程&#xff0c;只不过执行用户命令的请求时单线程模型&#xff0c;还有一些线…

基于YOLOv10深度学习的高密度人脸智能检测与统计系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

【PPT设计前沿】2024年PPT新趋势,让你的演示文稿引领潮流!

文章目录 一、简约风格的新诠释二、动态元素与交互性的深度融合三、个性化与定制化的独特展现四、大数据与可视化的创新应用五、绿色环保与可持续性的倡导《PPT完美设计入门与进阶/入门与进阶》图书特色内容简介目录前言/序言 获取方式 随着技术的不断革新和创意设计的蓬勃发展…

注解详解系列 - @ResponseStatus

注解简介 在今天的每日一注解中&#xff0c;我们将探讨ResponseStatus注解。ResponseStatus是Spring框架中的一个注解&#xff0c;用于为控制器方法指定HTTP响应状态码和理由短语。 注解定义 ResponseStatus注解用于标记控制器方法或异常类&#xff0c;以指示HTTP响应的状态码…

【神经网络】基于CNN(卷积神经网络)构建猫狗分类模型

文章目录 解决问题数据集探索性数据分析数据预处理数据集分割数据预处理 构建模型并训练构建模型训练模型 结果分析与评估模型保存结果预测经验总结 解决问题 针对经典猫狗数据集&#xff0c;基于卷积神经网络&#xff0c;构建猫狗二元分类模型&#xff0c;使用数据集进行参数…

我主编的电子技术实验手册(08)——串联电阻分压

本专栏是笔者主编教材&#xff08;图0所示&#xff09;的电子版&#xff0c;依托简易的元器件和仪表安排了30多个实验&#xff0c;主要面向经费不太充足的中高职院校。每个实验都安排了必不可少的【预习知识】&#xff0c;精心设计的【实验步骤】&#xff0c;全面丰富的【思考习…

由于bug造成truncate table卡住问题

客户反应truncate table卡主&#xff0c;检查awr发现多个truncate在awr报告期内一直没执行完&#xff0c;如下&#xff1a; 检查ash&#xff0c;truncate table表的等待事件都是“enq: RO - fast object reuse”和“local write wait” 查找“enq: RO - fast object reuse”&am…

qmt量化交易策略小白学习笔记第35期【qmt编程之指数数据--如何获取指数行情数据】

qmt编程之获取沪深指数数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 感谢关注&#xff0c;咨询免费开通量化回测与获取实盘权限&#xff0c;欢迎和博主联系&#xff01; 获取指数行情数…

机器学习笔记——无监督学习下的k均值聚类

k均值聚类算法原理 目标是将样本分类 原理&#xff1a;首先随机选择k何点作为中心&#xff0c;然后计算每一个点到中心的聚类&#xff0c;然后计算到每个中心的距离&#xff0c;选择到中心最短距离的那个中心所在的类进行归类&#xff0c;然后更新中心点&#xff0c;一直重复。…

TikTok带货崛起:从短视频平台到电商平台的转型

近年来&#xff0c;随着社交媒体的迅速发展&#xff0c;TikTok以其独特的短视频形式迅速在全球范围内风靡&#xff0c;不仅吸引了海量用户&#xff0c;还成功地抓住了年轻一代的注意力。随着用户量的激增和内容生态的丰富&#xff0c;TikTok也开始探索新的商业模式&#xff0c;…

看完这篇文章你才能了解什么是大模型

引言 近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术迅速崛起&#xff0c;成为全球科技领域的热门话题。大模型&#xff08;Large Language Model&#xff09;技术以其庞大的参数和复杂的结构&#xff0c;为AI提供了强大的计算和学习能力&#xff0c;推动着AI技术…

Python热涨落流体力学求解算法和英伟达人工智能核评估模型

&#x1f3af;要点 &#x1f3af;平流扩散简单离散微分算子 | &#x1f3af;相场模拟&#xff1a;简单旋节线分解、枝晶凝固的 | &#x1f3af;求解二维波动方程&#xff0c;离散化时间导数 &#x1f3af;英伟达 A100 人工智能核性能评估模型 | &#x1f3af;热涨落流体动力学…

算法基础精选题单 枚举 (合适的枚举顺序+合适的枚举内容+前缀和和差分) (个人题解)

前言&#xff1a; 今日第一份题解&#xff0c;题目主要是于枚举有关&#xff0c;枚举算是算法题中较为简单的部分了&#xff08;对我来说还是有些难想的&#xff09;&#xff0c;话不多说&#xff0c;见下。 正文&#xff1a; 题单&#xff1a;237题】算法基础精选题单_ACM竞赛…

6.18 作业

qt中用定时器实现闹钟 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTime>//时间类 #include<QTimer>//时间事件类 #include<QtTextToSpeech/QTextToSpeech>//文本转语音类QT_BEGIN_NAMESPACE namespace Ui { class Widge…

【Linux环境下Hadoop部署—Xshell6】解决“要继续使用此程序,您必须应用最新的更新或使用新版本。”

问题描述 打开xshell使用&#xff0c;弹出&#xff1a; 解决方案&#xff1a; 修改安装目录下面的 nsilense.dll 文件 用二进制编辑器&#xff08;notepad的HEX-Editor插件&#xff09;打开Xshell/Xftp安装目录下的 nslicense.dll。 HexEdit插件安装&#xff1a; 1.下载HexEdi…