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

8.12 矢量图层面要素单一符号使用五(栅格数据填充)

文章目录

  • 前言
  • 栅格数据填充(Raster image fill)
    • QGis设置面符号为栅格数据填充(Raster image fill)
    • 二次开发代码实现栅格数据填充(Raster image fill)
  • 总结

前言

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

栅格数据填充(Raster image fill)

A class for filling symbols with a repeated raster image.

  • 以protected_areas.shp为例,图层符号为Simple Fill时显示效果如下图
    在这里插入图片描述

QGis设置面符号为栅格数据填充(Raster image fill)

  • Symbol layer type设置为Raster image fill,可设置的属性如下图
    在这里插入图片描述
  • 设置完成后,图层显示效果如下图
    在这里插入图片描述

二次开发代码实现栅格数据填充(Raster image fill)

  • QgsRasterFillSymbolLayer是Raster image fill,详细见文档,类图如下
    在这里插入图片描述
  • 创建符号层有两种方法:构造函数和create
  • 方法一
  1. 从图层获取渲染器
    //从图层获取渲染器QgsFeatureRenderer * layerRenderer= layer->renderer();QgsSingleSymbolRenderer *singleSymbolRenderer = QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer);
  1. 构造函数:修改属性可以调用setxxx函数,如下代码
    QString path = QStringLiteral("resources/eye.png");auto rasterFillSymbolLayer = new QgsRasterFillSymbolLayer(path);rasterFillSymbolLayer->setAngle(0.0);
  1. 创建符号并设置到渲染器
    //多个Symbol Layer构成一个SymbolQgsSymbolLayerList layerList;layerList << rasterFillSymbolLayer;//构造QgsFillSymbol并设置rendererauto fillSymbol = new QgsFillSymbol(layerList);singleSymbolRenderer->setSymbol(fillSymbol);layer->setRenderer(singleSymbolRenderer);
  • 方法二
    方法一中步骤1,3不变,步骤2中使用create()成员函数,颜色方案同样有两种选择
    QVariantMap mp;mp["imageFile"] = QStringLiteral("resources/eye.png");mp["angle"] = QStringLiteral("0.0");auto rasterFillSymbolLayer = QgsRasterFillSymbolLayer::create(mp);
  • 完整测试代码如下
void MainWindow::polygonRasterImageSlot()
{//添加一个线图层QgsVectorLayer* layer = addTestShape(QStringLiteral("maps/shapefile/protected_areas.shp"));//从图层获取渲染器QgsFeatureRenderer * layerRenderer= layer->renderer();QgsSingleSymbolRenderer *singleSymbolRenderer = QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer);
#if 0QString path = QStringLiteral("resources/eye.png");auto rasterFillSymbolLayer = new QgsRasterFillSymbolLayer(path);rasterFillSymbolLayer->setAngle(0.0);
#elseQVariantMap mp;mp["imageFile"] = QStringLiteral("resources/eye.png");mp["angle"] = QStringLiteral("0.0");auto rasterFillSymbolLayer = QgsRasterFillSymbolLayer::create(mp);
#endif//多个Symbol Layer构成一个SymbolQgsSymbolLayerList layerList;layerList << rasterFillSymbolLayer;//构造QgsFillSymbol并设置rendererauto fillSymbol = new QgsFillSymbol(layerList);singleSymbolRenderer->setSymbol(fillSymbol);layer->setRenderer(singleSymbolRenderer);
}
  • 效果如下图
    在这里插入图片描述
    在这里插入图片描述

总结

  • 介绍了矢量图层面要素单一符号中的栅格数据填充(Raster image fill)使用

相关文章:

  • 用自己的数据集训练TimeSformer并转ONNX用c++推理
  • 2024广东省职业技能大赛云计算赛项实战——容器云平台搭建
  • python watchdog 配置文件热更新
  • BP神经网络的反向传播(Back Propagation)
  • 方法区讲解
  • EasyExcel 导出批注信息
  • 【Go】十四、图形验证码、短信验证码、注册接口与redis的简单使用
  • 单片机练习题3
  • 每日优秀影视分享❗❗
  • WPF文本绑定显示格式StringFormat设置-特殊格式时间日期和多数据绑定
  • 原生dom操作快速写入html渲染(insertAdjacentHTML)
  • Cadence:Conformal系列形式验证工具
  • 深入解析Netty的Reactor模型及其实现:详解与代码示例
  • Pikachu靶场--XSS
  • excel数据透视
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 2017届校招提前批面试回顾
  • Angular2开发踩坑系列-生产环境编译
  • CentOS7 安装JDK
  • Javascripit类型转换比较那点事儿,双等号(==)
  • mysql外键的使用
  • Object.assign方法不能实现深复制
  • PermissionScope Swift4 兼容问题
  • PHP面试之三:MySQL数据库
  • tensorflow学习笔记3——MNIST应用篇
  • Zsh 开发指南(第十四篇 文件读写)
  • 经典排序算法及其 Java 实现
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 前端面试之闭包
  • 如何设计一个比特币钱包服务
  • 如何在GitHub上创建个人博客
  • 使用Swoole加速Laravel(正式环境中)
  • 首页查询功能的一次实现过程
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • Java总结 - String - 这篇请使劲喷我
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ### RabbitMQ五种工作模式:
  • (3)(3.5) 遥测无线电区域条例
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (day18) leetcode 204.计数质数
  • (LeetCode C++)盛最多水的容器
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (四)软件性能测试
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (转)Android学习笔记 --- android任务栈和启动模式
  • ***原理与防范
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .Net Core 生成管理员权限的应用程序
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET命令行(CLI)常用命令
  • .NET微信公众号开发-2.0创建自定义菜单
  • .net中我喜欢的两种验证码
  • [.NET]桃源网络硬盘 v7.4