8.3 矢量图层点要素单一符号使用五

news2024/12/27 12:19:50

文章目录

  • 前言
  • 单一符号(Single symbol)渲染
    • 几何生成器(Geometry generator)
      • QGis
      • 代码实现
  • 总结

前言

  • 上一篇教程介绍了矢量图层点要素单一符号中填充标记的用法
  • 本章继续介绍单一符号中各种标记的用法
  • 说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps

单一符号(Single symbol)渲染

  • qgis默认使用单一符号、简单标记(Simple Marker)进行渲染,以places_33S.shp为例,添加places_33S图层后,默认显示如下图
    在这里插入图片描述
  • 在点要素图层的图层属性中,选择“Symbology”选项卡,可以看到默认显示,如下图
    在这里插入图片描述
  • 除简单标记(Simple Marker)外,还有其他多种选择如下图
    在这里插入图片描述

几何生成器(Geometry generator)

Available with all types of symbols, the geometry generator symbol layer allows to use expression syntax to generate a geometry on the fly during the rendering process. The resulting geometry does not have to match with the original Geometry type and you can add several differently modified symbol layers on top of each other.

  • 几何生成器符号层允许在渲染过程中使用表达式语法来动态生成几何体。
  • 下边以缓冲区为例说明几何生成器的用法

在空间分析中,有一种方法是创建一个与任意点,直线或平面等距的区域,以检查物体对周边的影响,该区域称为缓冲区。 例如,“距离疏散设施100米的范围”是点缓冲区,“沿着水道100米的范围”是行缓冲区,“距离公园站点100米的范围”是 平面缓冲区。

QGis

  • 将Symbol layer type设置为几何生成器(Geometry generator),属性见下图
    在这里插入图片描述
  • 输入expression生成Geometry,如上图的buffer( $geometry, 100 ),意思是在距离feature100m,构建一个buffer。
    在这里插入图片描述

代码实现

  • QgsGeometryGeneratorSymbolLayer是几何生成器(Geometry generator)的类,注意该类的父类是QgsSymbolLayer,如下图
    在这里插入图片描述
  • 该类可以为点、线、面生成缓冲区
  • 通过调用成员函数setSubSymbol设置其符号,符号可以为Marker、Line和Fill
  • 其构造函数是私有的,所以创建Geometry generator layer只有一种方法:通过create函数
  • 代码实现设置图层符号的步骤如下
  1. 首先从图层获取renderer,并转换为Single Symbol Renderer代码如下
QgsFeatureRenderer * layerRenderer= layer->renderer();
QgsSingleSymbolRenderer *singleRenderer = QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer);
  1. 调用create函数
	//构造标记层(Marker SymbolLayer)
    QVariantMap mp;
    mp[QString("geometryModifier")] = "buffer($geometry,100)";
    mp[QString("SymbolType")] = "Marker";
    auto markerSymbolLayer = QgsGeometryGeneratorSymbolLayer::create(mp);
  1. 构造Marker Symbol,并为renderer设置symbol 代码如下
	//QgsMarkerSymbol构造函数中需要传入QgsSymbolLayerList
    //多个Symbol Layer构成一个Symbol
    QgsSymbolLayerList layerList;
    layerList << markerSymbolLayer;
    auto markerSymbol = new QgsMarkerSymbol(layerList);
    singleRenderer->setSymbol(markerSymbol);
    layer->setRenderer(singleRenderer);
  • 完整的测试代码如下
void MainWindow::pointGeometryGeneratorMarkerSlot()
{
    //添加一个点图层,用于设置图层符号
    QgsVectorLayer* layer = addTestPointShape(QStringLiteral("maps/shapefile/places_33S.shp"));
    //获取图层的渲染器renderer
    QgsFeatureRenderer * layerRenderer= layer->renderer();
    QgsSingleSymbolRenderer *singleRenderer = QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer);
    //构造标记层(Marker SymbolLayer)
    QVariantMap mp;
    mp[QString("geometryModifier")] = "buffer($geometry,100)";
    mp[QString("SymbolType")] = "Marker";
    auto markerSymbolLayer = QgsGeometryGeneratorSymbolLayer::create(mp);

    //QgsMarkerSymbol构造函数中需要传入QgsSymbolLayerList
    //多个Symbol Layer构成一个Symbol
    QgsSymbolLayerList layerList;
    layerList << markerSymbolLayer;
    //构造QgsMarkerSymbol并设置renderer
    auto markerSymbol = new QgsMarkerSymbol(layerList);
    singleRenderer->setSymbol(markerSymbol);
    layer->setRenderer(singleRenderer);
}

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

总结

  • 分别介绍了几何生成器(Geometry generator)在qgis软件和二次开发代码中的用法

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

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

相关文章

AR的光学原理?

AR智能眼镜的光学成像系统 AR眼镜的光学成像系统由微型显示屏和光学镜片组成&#xff0c;可以将其理解为智能手机的屏幕。 增强现实&#xff0c;从本质上说&#xff0c;是将设备生成的影像与现实世界进行叠加融合。这种技术基本就是通过光学镜片组件对微型显示屏幕发出的光线…

java项目之中学校园网站(ssm框架)

项目简介 中学校园网站实现了以下功能&#xff1a; 管理员&#xff1a;个人中心、教师管理、学生管理、校园概况管理、名师风采管理、校园公告管理、试卷管理、试题管理、校园论坛、系统管理、考试管理。教师&#xff1a;个人中心、校园概况管理、名师风采管理、校园公告管理…

PM866 3BSE050200R1 L003748-AR 3BSX108237R300

PM866 3BSE050200R1 L003748-AR 3BSX108237R300 工业自动化制造商和工业物联网工具开发商Opto 22宣布推出新版groov&#xff0c;将IIoT technologies MQTT和OPC-UA驱动程序直接嵌入其工业边缘设备。新版本添加到用于web和移动可视化的groov View软件以及开源的Node-RED开发环境…

第三方支付预付卡业务详解

第三方支付预付卡业务详解 第三方支付预付卡业务是指由第三方支付公司提供的一种预先充值后消费的支付方式。用户可以在第三方支付平台上购买预付卡&#xff0c;然后在指定的商户或者服务提供商那里进行消费。 运作模式&#xff1a; 1. 用户在第三方支付平台购买预付卡&#xf…

Django项目单字段的区间查询

在Django项目中会碰到一些需求就是查询某个表中的一些字段从某日到某日的数据&#xff0c;而且是对但字段查询这个时候我们有两两种方法解决 单字段类型是DateTimeField的 查询日期范围的 这个时候在filter.py里面重写DateTimeFromToRangeFilter&#xff0c;为什么要重写呢&am…

kubernetes部署(web界面)

基本队对象 pod 最小单位 service 跟网络相关 Volume Namespace 准备工作&#xff1a; master node1 node2 修改主机名&#xff1a; 做本地解析 10.0.0.51 master 10.0.0.56 node-1 10.0.0.186 node-2 关闭swap分区&#xff1a; swapoff -a  临时关闭 …

双点双向重发布解决方案

某公司有两张园区网络&#xff0c;分别是A园区和B园区&#xff0c;由于业务需求&#xff0c;需要将两张园区网络整合到一起&#xff0c;实现互联互通。 因此管理员将AR2-AR4、AR3-AR5通过物理线缆相连&#xff0c;并且此互联链路运行在ospf 100中。 现在要求工程师在AR2和AR3…

AD教程(三)IC类元件模型的创建

AD教程&#xff08;三&#xff09;IC类元件模型的创建 IC类元件 IC芯片&#xff08;Intergrated Circuit Chip&#xff09;是将大量的微电子元器件&#xff08;晶体管、电阻、电容等&#xff09;形成的集成电路放在一块塑基上&#xff0c;做成一块芯片。 IC类元件的创建 新…

JAVA发票管理的收货单订单创建发票详情介绍

本人详解 作者&#xff1a;王文峰&#xff0c;参加过 CSDN 2020年度博客之星&#xff0c;《Java王大师王天师》作者 公众号&#xff1a;山峯草堂&#xff0c;非技术多篇文章&#xff0c;专注于天道酬勤的 Java 开发问题、中国国学、传统文化和代码爱好者的程序人生&#xff0c;…

用十万字讲明白linux和java的零复制技术

linux I/O 读写方式 Linux提供了轮询、I/O中断以及DMA传输这3种磁盘与主存之间的数据传输机制。 轮询方式是基于死循环对 I/O 端口进行不断检测。 I/O中断方式 I/O 中断方式是指当数据到达时&#xff0c;磁盘主动向 CPU 发起中断请求&#xff0c;由 CPU 自身负责数据的传输…

10.31一些代码分析,香浓展开,移位器(桶形多位),二进制转格雷码

always的block之间&#xff0c;采用并行执行 always之内&#xff0c;采用非阻塞赋值&#xff0c;为顺序执行 一些代码分析 这个把使能信号和W信号组合在一起&#xff0c;进行case语句&#xff0c;即只有合并信号最高位为1时&#xff0c;才进行操作 always后面要写&#xff0…

springboot大学生就业推荐系统 毕业设计-附源码01535

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对学生就业管理等问题&#xff0c;对学生就业…

关于脉冲发生器,你知道多少?

01 引言 脉冲发生器&#xff08;Pulse Generator&#xff0c;PG&#xff09;是产生脉冲信号的专用仪器。它可以生成具有特定频率、幅值和脉冲宽度的脉冲信号&#xff0c;常用于各种科学、工程和技术领域中的实验、测试、通信和控制应用。 那么&#xff0c;对于一台脉冲发生器…

SDH传输分析仪有什么用? TFN D300S SDH传输分析仪详解

数字传输分析仪是数字通信中最重要、最基本的测试仪器&#xff0c;主要用于测试数字通信信号的传输质量&#xff0c;其主要测试参数包括误码、告警、开销、抖动和漂移等&#xff0c;其广泛应用于数字通信设备的研制、生产、维修和计量测试&#xff0c;还可应用于数字通信网络的…

自学VUE笔记

一、基础语法学习 1、Attribute 绑定 a、绑定单个属性&#xff1a;给这个div 增加id 属性 ​ <div v-bind:id"dynamicId"></div>简写&#xff1a; <div :id"dynamicId"></div> b、绑定多个属性值 data() {return {objectOf…

20年经典传承 | 性能圣典!火焰图发明者Brendan Gregg“神作”

20年20本经典畅销书 NO.9 豆瓣评分9.3 性能大师经典巨著 每一个学习性能优化/性能评估的工程师的必备手册 性能测量的水相当深&#xff0c;斯坦福大学的 John Ousterhout 教授在“Always Measure One Level Deeper”一文&#xff08;《ACM 通讯》杂志&#xff0c;2018 年第…

信创强国 | 安全狗荣获信创工委会技术活动单位证书

近日&#xff0c;安全狗荣获中国电子工业标准化技术协会信息技术应用创新工作委员会&#xff08;以下简称“信创工委会”&#xff09;颁发的信息技术应用创新工作委员会技术活动单位证书。 作为国内云原生安全领导厂商&#xff0c;安全狗在信息技术应用创新方面有多年的技术积累…

【教3妹学编辑-算法题】每棵子树内缺失的最小基因值

3妹&#xff1a;“太阳当空照&#xff0c;花儿对我笑&#xff0c;小鸟说早早早&#xff0c;你为什么背上炸药包” 2哥 :3妹&#xff0c;什么事呀这么开发。 3妹&#xff1a;2哥你看今天的天气多好啊&#xff0c;阳光明媚、万里无云、秋高气爽&#xff0c;适合秋游。 2哥&#x…

TypeScript之类

一、是什么 类&#xff08;Class&#xff09;是面向对象程序设计&#xff08;OOP&#xff0c;Object-Oriented Programming&#xff09;实现信息封装的基础 类是一种用户定义的引用数据类型&#xff0c;也称类类型 传统的面向对象语言基本都是基于类的&#xff0c;JavaScript …

关于我React项目热更新没起效果的问题

最近&#xff0c;我拉下来一个react项目&#xff0c;嗯&#xff0c;什么都可以运行&#xff0c;然后自己熟悉一下代码之后写一个自己页面&#xff0c;然后每修改一下代码我都要重新启动&#xff0c;然后网上搜一大串子我都没成功&#xff0c;而且人家原来代码里边也有热更新处理…