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

文章目录

  • 前言
  • [单一符号(Single symbol)渲染](#单一符号(Single symbol)渲染)
  • 总结

前言

  • 上一篇教程对矢量图层符号化做了一个整体介绍,并以点图层为例介绍了可以使用的渲染器:
    • 无符号(No symbols)
    • 单一符号(Single symbol)
    • 分类(Categorized)
    • 分级(Graduated)
    • 基于规则(Rule-based)
    • 点分布(Point displacement)
    • 点聚合(Point cluster)
    • 热度图(Heatmap)
  • 本篇介绍如何使用单一符号
  • 说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps

单一符号(Single symbol)渲染

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

简单标记(Simple Marker)

Simple marker symbol layer, consisting of a rendered shape with solid fill color and an stroke.

  • 简单标记是指使用一些简单的几何形状作为标记,并可以设置其填充颜色和画笔颜色

QGis

  • 将Symbol layer type设置为简单标记图层(Simple marker Layer),属性设置见下图

代码实现

  • QgsSimpleMarkerSymbolLayer类是简单标记图层(Simple marker Layer),类图如下
  • 其构造函数如下,构造函数的参数是其对应的参数
cpp 复制代码
QgsSimpleMarkerSymbolLayer (Qgis::MarkerShape shape=Qgis::MarkerShape::Circle, double size=DEFAULT_SIMPLEMARKER_SIZE, double angle=DEFAULT_SIMPLEMARKER_ANGLE, Qgis::ScaleMethod scaleMethod=DEFAULT_SCALE_METHOD, const QColor &color=DEFAULT_SIMPLEMARKER_COLOR, const QColor &strokeColor=DEFAULT_SIMPLEMARKER_BORDERCOLOR, Qt::PenJoinStyle penJoinStyle=DEFAULT_SIMPLEMARKER_JOINSTYLE)
  • 设置点符号为简单标记的步骤如下
  1. 首先从图层获取renderer,并转换为Single Symbol Renderer代码如下
cpp 复制代码
QgsFeatureRenderer * layerRenderer= layer->renderer();
QgsSingleSymbolRenderer *singleRenderer = QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer);
  1. 构造简单标记层(Simple Marker SymbolLayer),代码如下
cpp 复制代码
auto markerSymbolLayer = new QgsSimpleMarkerSymbolLayer(Qgis::MarkerShape::Heart,4.0);
QgsSymbolLayerList layerList;
    layerList << markerSymbolLayer;
  1. 构造Marker Symbol,并为renderer设置symbol 代码如下
cpp 复制代码
    auto markerSymbol = new QgsMarkerSymbol(layerList);
    singleRenderer->setSymbol(markerSymbol);
    layer->setRenderer(singleRenderer);


SVG标记(SVG marker)

provides you with images from your SVG paths to render as marker symbol.

Each SVG file colors and stroke can also be adapted.

  • svg标记是指使用svg图片作为标记,可以设置svg的填充颜色和画笔颜色

QGis

  • 将Symbol layer type设置为SVG标记(SVG marker),属性见下图

代码实现

  • QgsSvgMarkerSymbolLayer类是SVG标记图层(SVG marker layer),类图如下
  • 其构造函数如下,构造函数的参数是其对应的参数
cpp 复制代码
QgsSvgMarkerSymbolLayer (const QString &path, double size=DEFAULT_SVGMARKER_SIZE, double angle=DEFAULT_SVGMARKER_ANGLE, Qgis::ScaleMethod scaleMethod=DEFAULT_SCALE_METHOD)
  • 设置点符号为svg标记的步骤如下
  1. 首先从图层获取renderer,并转换为Single Symbol Renderer代码如下
cpp 复制代码
QgsFeatureRenderer * layerRenderer= layer->renderer();
QgsSingleSymbolRenderer *singleRenderer = QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer);
  1. 构造Svg标记层(Svg Marker SymbolLayer),代码如下
cpp 复制代码
    //构造Svg标记层(Svg Marker SymbolLayer)方法一
    //作为示例,用到了path和size两个参数,其他参数使用类似
    QString path = QStringLiteral("resources/plane.svg");
    auto markerSymbolLayer = new QgsSvgMarkerSymbolLayer(path,4.0);
  1. 构造Marker Symbol,并为renderer设置symbol 代码如下
cpp 复制代码
	//QgsMarkerSymbol构造函数中需要传入QgsSymbolLayerList
    //多个Symbol Layer构成一个Symbol
    QgsSymbolLayerList layerList;
    layerList << markerSymbolLayer;
    auto markerSymbol = new QgsMarkerSymbol(layerList);
    singleRenderer->setSymbol(markerSymbol);
    layer->setRenderer(singleRenderer);


总结

  • 分别介绍了点图层使用单一符号,设置为简单标记和svg标记的方法
相关推荐
长沙红胖子Qt7 小时前
Qt+TiePieHS3开发笔记(二):HS3发送器发出内置波形、直连示波器,示波器检测内置波形Demo
qt·示波器·tiepiehs3·发生器·同步发射和示波器采集
总要学点什么10 小时前
第55篇:空间分析-剖面分析——红线走大圆,剖面却按经纬直线采样
前端框架·gis·webgl·cesium·空间分析
陈年老古董10 小时前
PyQt5 入门指南:环境搭建、PyCharm 外部工具配置与登录界面实战
开发语言·qt·pycharm
zhanghaha131411 小时前
Qt 类完整例程【逐词拆解 + 逐步骤执行保姆教程】
开发语言·qt
Cx330❀15 小时前
Qt 界面美化指南:从零掌握 QSS 核心机制与工程实践
开发语言·qt·ui·性能优化·图形渲染
zx_7414848116 小时前
PyQt5 环境搭建保姆级教程:PyCharm + QtDesigner + PyUIC 完整配置
开发语言·qt·pycharm·pyqt
Python图像识别19 小时前
46-【2027毕设】YOLO11田间杂草检测识别系统 - Python完整源码+PyQt5界面+训练模型+数据集
python·qt·课程设计
沫璃染墨1 天前
《Qt从零入门系列(十三):QSS样式表详解——从选择器与层叠规则到控件美化实战》
开发语言·css·c++·qt·ui·qt6.3·qss
好好学习O(∩_∩)O1 天前
[QT] 多线程moveToThread 和易踩的8个坑
开发语言·qt
总要学点什么1 天前
第51篇:数据分析-热力图——笔刷画的是圆,落到地上却成了椭圆
3d·数据挖掘·数据分析·前端框架·gis·webgl·cesium