8.3 矢量图层点要素单一符号使用六(矢量字段标记)

前言

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

单一符号(Single symbol)渲染

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

矢量字段标记(Vector field marker)

The vector field marker is used to display vector field data such as earth deformation, tidal flows, and the like. It displays the vectors as lines (preferably arrows) that are scaled and oriented according to selected attributes of data points. It can only be used to render point data; line and polygon layers are not drawn by this symbology.
The vector field is defined by attributes in the data, which can represent the field either by:

  • cartesian components (x and y components of the field)
  • or polar coordinates: in this case, attributes define Length and Angle. The angle may be measured either clockwise from north, or Counterclockwise from east, and may be either in degrees or radians.
  • or as height only data, which displays a vertical arrow scaled using an attribute of the data. This is appropriate for displaying the vertical component of deformation, for example.
  • 矢量场标记用于显示矢量场数据,如地球变形、潮汐流等。它以线(最好箭头)的形式显示矢量,并根据选定数据点的属性进行缩放和定向。
  • 它只能用于渲染点数据;线和多边形图层不使用此符号绘制。
  • 矢量场由数据中的属性定义,可以代表以下领域的矢量场:
    • 笛卡尔分量(场的x和y分量)
    • 极坐标:在这种情况下,属性定义长度和角度。角度可以以北方向为基准顺时针测量,也可以以东方向为基准逆时针测量,可以是度数或弧度。
    • 仅高度数据,显示一个垂直箭头,使用数据的一个属性进行缩放。例如,这对于显示变形的垂直分量是适当的。

QGis

矢量字段标记用于显示矢量场数据,例如地震变形、潮汐流等。它以线(最好是箭头)的形式显示矢量,这些线根据数据点的选定属性进行缩放和定向。它只能用于渲染点数据;该符号不绘制线条和多边形图层。

  • 将Symbol layer type设置为矢量字段标记(Vector field marker),属性见下图
    在这里插入图片描述
  • X attribute和Y attribute分别是图层中的数据,如下图
    在这里插入图片描述
    在这里插入图片描述

代码实现

  • QgsVectorFieldSymbolLayer类是矢量字段标记图层(Vector field marker layer),类图如下
    在这里插入图片描述
  • QgsVectorFieldSymbolLayer成员函数setXAttribute setYAttribute成员函数用于设置字段名称
  • 代码实现设置图层符号步骤如下
  1. 首先从图层获取renderer,并转换为Single Symbol Renderer代码如下
QgsFeatureRenderer * layerRenderer= layer->renderer();
QgsSingleSymbolRenderer *singleRenderer = QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer);
  1. 构造函数创建矢量字段标记图层(Vector field marker layer),设置属性
    auto markerSymbolLayer = new QgsVectorFieldSymbolLayer();
    markerSymbolLayer->setXAttribute(QStringLiteral("IN_SWD"));
    markerSymbolLayer->setYAttribute(QStringLiteral("IS_TOWN"));
    markerSymbolLayer->setScale(10.0);
  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);

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

总结

  • 分别介绍了矢量字段标记(Vector field marker)在qgis软件和二次开发代码中的用法
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雷动软件工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值