当前位置: 首页 > news >正文

8.12 矢量图层面要素单一符号使用一(简单填充)

文章目录

  • 前言
  • 简单填充(Simple fill)
    • QGis设置面符号为简单填充(Simple fill)
    • 二次开发代码实现简单填充(Simple fill)
  • 总结

前言

  • 本章介绍矢量图层线要素单一符号中简单填充(Simple fill)的使用
  • 说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps

简单填充(Simple fill)

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

QGis设置面符号为简单填充(Simple fill)

  • 在“Symbol layer type”中选择“Simple fill”,图层的设置选项包括填充颜色(Fill color)、填充样式(Fill style)、边框颜色(Stroke color)、边框宽度(Stroke width)、边框样式(Stroke style)、连接样式(Join style)、偏移量(Offset)、是否启用该图层(Enable layer)、绘制选项(Draw effects)等,如下图
    在这里插入图片描述
  • 设置完成后,图层效果如下图
    在这里插入图片描述

二次开发代码实现简单填充(Simple fill)

  • QgsSimpleFillSymbolLayer是简单填充(Simple fill),详情见文档,类图如下
    在这里插入图片描述
  • QgsSimpleFillSymbolLayer构造函数如下,可以看到和QGis设置界面一一对应
QgsSimpleFillSymbolLayer::QgsSimpleFillSymbolLayer( const QColor &color, Qt::BrushStyle style, const QColor &strokeColor, Qt::PenStyle strokeStyle, double strokeWidth,
    Qt::PenJoinStyle penJoinStyle )
  : mBrushStyle( style )
  , mStrokeColor( strokeColor )
  , mStrokeStyle( strokeStyle )
  , mStrokeWidth( strokeWidth )
  , mPenJoinStyle( penJoinStyle )
{
  mColor = color;
}
  • 创建Simple fill layer有两种方法:构造函数和静态函数create
  • 方法一
  1. 从图层获取渲染器
    //从图层获取渲染器
    QgsFeatureRenderer * layerRenderer= layer->renderer();
    QgsSingleSymbolRenderer *singleSymbolRenderer = QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer);
  1. 构造函数:修改属性可以调用setxxx函数,如setFillColor
auto simplefillSymbolLayer = new QgsSimpleFillSymbolLayer();
simplefillSymbolLayer->setFillColor(QColor("red"));
  1. 创建符号并设置到渲染器
    //多个Symbol Layer构成一个Symbol
    QgsSymbolLayerList layerList;
    layerList << simplefillSymbolLayer;
    //构造QgsFillSymbol并设置renderer
    auto fillSymbol = new QgsFillSymbol(layerList);
    singleSymbolRenderer->setSymbol(fillSymbol);
    layer->setRenderer(singleSymbolRenderer);
  • 方法二
    方法一中步骤1,3不变,步骤2中使用create()成员函数,颜色方案同样有两种选择
    QVariantMap mp;
    mp["color"] = QStringLiteral("red");
    auto simplefillSymbolLayer = QgsSimpleFillSymbolLayer::create(mp);
  • 完整测试代码如下
void MainWindow::polygonSimplefillSlot()
{
    //添加一个线图层
    QgsVectorLayer* layer = addTestShape(QStringLiteral("maps/shapefile/water.shp"));
    //从图层获取渲染器
    QgsFeatureRenderer * layerRenderer= layer->renderer();
    QgsSingleSymbolRenderer *singleSymbolRenderer = QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer);
#if 1
    auto simplefillSymbolLayer = new QgsSimpleFillSymbolLayer();
    simplefillSymbolLayer->setFillColor(QColor("red"));
#else
    QVariantMap mp;
    mp["color"] = QStringLiteral("red");
    auto simplefillSymbolLayer = QgsSimpleFillSymbolLayer::create(mp);
#endif
    //多个Symbol Layer构成一个Symbol
    QgsSymbolLayerList layerList;
    layerList << simplefillSymbolLayer;
    //构造QgsFillSymbol并设置renderer
    auto fillSymbol = new QgsFillSymbol(layerList);
    singleSymbolRenderer->setSymbol(fillSymbol);
    layer->setRenderer(singleSymbolRenderer);
}
  • 效果如下图
    在这里插入图片描述
    在这里插入图片描述

总结

  • 介绍了矢量图层面要素单一符号中的简单填充(Simple fill)使用

相关文章:

  • python基础面试器(其一)
  • 为什么要学习这么多“没用”的知识
  • 持续总结中!2024年面试必问 20 道设计模式面试题(一)
  • 倩女幽魂手游攻略:云手机自动搬砖辅助教程!
  • Python学习从0开始——Kaggle深度学习002
  • Java多线程设计模式之不可变对象(Immutable Object)模式
  • [深度学习]基于C++和onnxruntime部署yolov10的onnx模型
  • Swift开发——元组
  • 一篇搞定Spring,IOC容器,Bean管理,3.AOP底层原理和实现(收下吧,真的很详细)
  • Linux之逻辑控制符
  • 【Linux】使用 iptables 验证访问HDFS 所使用到的端口
  • Warning: `ReactDOMTestUtils.act` is deprecated in favor of `React.act`.
  • Linux远程访问及控制
  • MySQL的卸载
  • 如何修改倍福CX7000PLC IP地址
  • python GUI开发: tkinter事件处理的几种方式详解与应用实战
  • 使用node写脚本生成小说
  • eslint 使用单引号,Prettier使用双引号冲突
  • CCF 矩阵重塑
  • Web前端学习网:深度探索前端技术的四维、五域、六技与七法
  • 竞彩湃|新科冠军利物浦留力?纽卡斯尔全力冲击欧冠
  • “五一”假期客流增加,多地提升铁路运力并强化服务
  • 释新闻|新加坡大选今日投票:除了黄循财首次挂帅,还有哪些看点
  • 出口管制不能将民用技术泛安全化,也不能破坏全球供应链稳定
  • 消息人士称以色列政府初步同意扩大对加沙军事行动
  • CMG亚太总站:没有邀请韩国偶像团体举办巡回演出