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

news/2025/2/14 5:23:23/

文章目录

  • 前言
  • 单一符号(Single symbol)渲染
    • 填充标记(Filled marker)
      • QGis
      • 代码实现
  • 总结

前言

  • 上一篇教程介绍了矢量图层点要素单一符号中椭圆形标记(Ellipse marker)和字符标记(Font marker)
  • 本章继续介绍单一符号中各种标记的用法
  • 说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps

单一符号(Single symbol)渲染

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

填充标记(Filled marker)

similar to the simple marker symbol layer, except that it uses a fill sub symbol to render the marker.
This allows use of all the existing QGIS fill (and stroke) styles for rendering markers, e.g. gradient or shapeburst fills.

  • 填充标记和简单标记类似,不同点是填充标记使用子符号作为标记符号,这样设计的目的是可以复用已有的填充类型,如下图
    在这里插入图片描述
  • 填充符号(Fill)一般用于面类型的填充,如下图
    在这里插入图片描述
  • 点类型的Filled Marker复用了填充符号(Fill),这样使得点类型的符号更加丰富,如下图
    在这里插入图片描述

QGis

  • 将Symbol layer type设置为填充(圆形)标记(Filled marker),可以设置的属性见下图
    在这里插入图片描述
  • Filled marker设置为了Fill符号,而Fill符号的Symbol layer type设置为了Simple Fill,Fill符号还可用于面要素的符号化,可设置的属性见下图
    在这里插入图片描述
    在这里插入图片描述

代码实现

  • QgsFilledMarkerSymbolLayer类是填充(圆形)标记图层(Filled marker layer),类图如下
    在这里插入图片描述
  • QgsFilledMarkerSymbolLayer类中包含成员变量: std::unique_ptr< QgsFillSymbol > mFill;
  • 还有一个成员函数:bool setSubSymbol( QgsSymbol *symbol SIP_TRANSFER ) override;
  • 即在Filled marker layer对象中,可以调用函数setSubSymbolFilled marker layer设置二级符号,从而实现QGis中的效果
  • 代码实现设置图层符号的步骤如下
  1. 首先从图层获取renderer,并转换为Single Symbol Renderer代码如下
QgsFeatureRenderer * layerRenderer= layer->renderer();
QgsSingleSymbolRenderer *singleRenderer = QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer);
  1. 构造Fill标记层(Fill Marker SymbolLayer),代码如下
    //构造Fill标记层(Fill Marker SymbolLayer)方法一auto markerSymbolLayer = new QgsFilledMarkerSymbolLayer(Qgis::MarkerShape::Trapezoid,6.0);markerSymbolLayer->setColor(QColor("pink"));//上边两行已经能够实现功能,因为在QgsFilledMarkerSymbolLayer构造函数中,默认会创建QgsFillSymbol//这里是为了演示如何使用setSubSymbol和QgsFillSymbolauto fillSymbolLayer = new QgsSimpleFillSymbolLayer(QColor("pink"));QgsSymbolLayerList fillLayerList;fillLayerList << fillSymbolLayer;auto fillSymbol = new QgsFillSymbol(fillLayerList);markerSymbolLayer->setSubSymbol(fillSymbol);
  1. 构造Marker Symbol,并为renderer设置symbol 代码如下
	//QgsMarkerSymbol构造函数中需要传入QgsSymbolLayerList//多个Symbol Layer构成一个SymbolQgsSymbolLayerList layerList;layerList << markerSymbolLayer;auto markerSymbol = new QgsMarkerSymbol(layerList);singleRenderer->setSymbol(markerSymbol);layer->setRenderer(singleRenderer);

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

总结

  • 介绍了如何使用填充标记(Filled Marker)

http://www.ppmy.cn/news/1186868.html

相关文章

《HelloGitHub》第 91 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

excel求差公式怎么使用?

利用excel求差&#xff0c;可能有许多的小伙伴已经会了&#xff0c;不过还是存在一些不太熟悉的朋友们&#xff0c;所以这里有必要讲解一下。其实求差的实现主要就是一个公式&#xff0c;就是用一个单元格中的数字“减去”另一个单元格中的数字“等于”第三个单元格。此公式掌握…

医疗安全不良事件管理系统源码(PHP+ vue+laravel)

医疗安全不良事件管理系统全套源码 不良事件上报系统源码 不良事件管理系统帮助医院梳理建立不良事件上报与管理的一体化解决方案&#xff0c;包含上报内容、归口科室、上报流程及管理办法。提供面向医院的不良事件全过程管理平台&#xff0c;包含事件上报、事件处理、事件追踪…

力扣每日一题75:颜色分类

题目描述&#xff1a; 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的…

Python学习——Day12

目录 一、实例方法、类方法、静态方法 1.1实例方法 1.2类方法 1.3静态方法 1.4实例 二、 __slots__ 三、错误和异常 3.1语法错误 3.2异常 3.3异常处理 一、实例方法、类方法、静态方法 1.1实例方法 实例方法入参第一个值&#xff0c;默认self指代当前调用的对象,不建…

Leetcode.275 H 指数 II

题目链接 Leetcode.275 H 指数 II mid 题目描述 给你一个整数数组 c i t a t i o n s citations citations &#xff0c;其中 c i t a t i o n s [ i ] citations[i] citations[i] 表示研究者的第 i i i 篇论文被引用的次数&#xff0c; c i t a t i o n s citations citat…

电子电器架构 —— 车载网关初入门(二)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 PS:小细节,本文字数5000+,详细描述了网关在车载框架中的具体性能设置。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他…

一个macOS上用的swift文件脚本的模版:输入文件文本转换后输出到文件

本文介绍一种简单的swift脚本实现方案和执行方法。脚本可以读取文件内容&#xff0c;需要读者自行实现内容转换&#xff0c;然后脚本将结果输出到指定输出文件。 脚本模版 其中getResult函数需要读者按照自己需要实现。 import Foundationfinal class TestOnlySwift {//入参为…