首页 > 其他分享 >8.11 矢量图层线要素单一符号使用五(标记线)

8.11 矢量图层线要素单一符号使用五(标记线)

时间:2024-06-04 12:29:01浏览次数:12  
标签:矢量图 符号 标记 QgsMarkerLineSymbolLayer mp Marker line 层线 8.11

文章目录

前言

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

标记线(Marker line)

在线条特征上绘制重复的标记符号。

在地理信息系统(GIS)和相关领域中,这种类型的线条符号可能用于表示沿着线条特征分布的一系列相同或相似的点状特征。

  • 以river.shp图层为例,在QGis中添加river图层,默认使用的符号是简单线,如下图所示
    在这里插入图片描述

QGis设置线符号为标记线(Marker line)

  • Symbol layer type设置为标记线(Marker line),可设置的属性如下图
    在这里插入图片描述
  • 可以设置其子符号为Marker符号,如下图
    在这里插入图片描述
  • 属性设置完成之后,效果如下图
    在这里插入图片描述

二次开发代码实现标记线(Marker line)

  • QgsMarkerLineSymbolLayer是标记线(Marker line),详情见文档,类图如下
    在这里插入图片描述
  • QgsHashedLineSymbolLayer有相同的父类,QgsMarkerLineSymbolLayer的子符号是Marker类型符号,而QgsHashedLineSymbolLayer是Line类型符号
  • 构造函数中默认创建了simple marker类型的符号,如下代码
QgsMarkerLineSymbolLayer::QgsMarkerLineSymbolLayer( bool rotateMarker, double interval )
  : QgsTemplatedLineSymbolLayerBase( rotateMarker, interval )
{
  setSubSymbol( new QgsMarkerSymbol() );
}
  • 代码实现设置图层符号有两种方法:构造函数和静态函数create
  • 方法一:构造函数
  1. 从图层获取渲染器
    //从图层获取渲染器
    QgsFeatureRenderer * layerRenderer= layer->renderer();
    QgsSingleSymbolRenderer *singleSymbolRenderer = QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer);
  1. 构造函数,需要修改属性调用其setxxx函数即可,如setRotateSymbols (bool rotate)函数
auto markerSymbolLayer = new QgsMarkerLineSymbolLayer(true,3);
  1. 创建符号并设置到渲染器
    //多个Symbol Layer构成一个Symbol
    QgsSymbolLayerList layerList;
    layerList << markerSymbolLayer;
    //构造QgsLineSymbol并设置renderer
    auto lineSymbol = new QgsLineSymbol(layerList);
    singleSymbolRenderer->setSymbol(lineSymbol);
    layer->setRenderer(singleSymbolRenderer);
  • 方法二
    方法一中步骤1,3不变,步骤2中使用create()成员函数
    QVariantMap mp;
    mp["rotate"] = QStringLiteral("1");
    mp["interval"] = QStringLiteral("3");
    auto markerSymbolLayer = QgsMarkerLineSymbolLayer::create(mp);
  • 完整测试代码如下
void MainWindow::lineMarkerSlot()
{
    //添加一个线图层
    QgsVectorLayer* layer = addTestShape(QStringLiteral("maps/shapefile/rivers.shp"));
    //从图层获取渲染器
    QgsFeatureRenderer * layerRenderer= layer->renderer();
    QgsSingleSymbolRenderer *singleSymbolRenderer = QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer);
#if 1
    auto markerSymbolLayer = new QgsMarkerLineSymbolLayer(true,3);
#else
    QVariantMap mp;
    mp["rotate"] = QStringLiteral("1");
    mp["interval"] = QStringLiteral("3");
    auto markerSymbolLayer = QgsMarkerLineSymbolLayer::create(mp);
#endif
    //多个Symbol Layer构成一个Symbol
    QgsSymbolLayerList layerList;
    layerList << markerSymbolLayer;
    //构造QgsLineSymbol并设置renderer
    auto lineSymbol = new QgsLineSymbol(layerList);
    singleSymbolRenderer->setSymbol(lineSymbol);
    layer->setRenderer(singleSymbolRenderer);

}
  • 效果如下图
    在这里插入图片描述
    在这里插入图片描述

总结

  • 介绍了矢量图层线要素单一符号中标记线(Marker line)的使用

标签:矢量图,符号,标记,QgsMarkerLineSymbolLayer,mp,Marker,line,层线,8.11
From: https://blog.csdn.net/richie12/article/details/139439241

相关文章

  • 微信、支付宝小程序引入阿里巴巴矢量图库
    阿里巴巴矢量图标库:https://www.iconfont.cn/第一步:生成fontclass地址将喜欢的icon加入购物车将购物车中的图标添加至项目获取项目的Fontclass地址,打开连接,并复制内容第二步:引入字体将Fontclass内容粘贴到微信小程序项目中assets/iconfont/iconfont.axss  (后缀名根据项......
  • 科技感矢量图
    https://90sheji.com/png/kejiganshiliangtu.html     ......
  • 超实用又简单的像素图转矢量图方法
    今天发现了一个超级牛的像素图转矢量图方法,觉得很有必要分享给大家!随着AIGC的发展,现在很多很厉害的AI工具如雨后春笋一般涌现,今天被网友疯狂安利了这款超棒的AI工具网站: 赶紧打开网站看了看,好家伙,79.99港币一个月!!! 看到这个价格以后,我连尝试的欲望都没有了!因为我刚好就......
  • 【转载】PPT上作图转化为矢量图 —— 论文写作必备技能
    原文地址:https://www.cnblogs.com/scandit/p/15112138.htmlPPT作出的图本身就为矢量图(可以插入到Word中),另存为PDF后,再通过PDF专业工具适当剪裁即可满足需求,插入到LaTex论文中将做好图的PPT文件另存为PDF文档用AcrobatPro打开转换好的PDF文档,找到:编辑PDF→剪裁页面→框......
  • VectSharp一个C#轻量级矢量图形库
    VectSharp是一个功能强大的C#库,专门用于创建矢量图形,包括文本,不依赖任何第三方,支持跨平台运行,包括Mac、Windows和Linux。使得开发者可以更容易地在他们的项目中集成矢量图形的生成和处理。https://github.com/arklumpus/VectSharp特点:内置字体:包含了14种标准字体,这些字体......
  • 大厂设计师都在使用各种矢量图标
    好用的产品离不开设计视觉规范的图标,一个图标是正确传达所表达的信息极其的重要,以下整理UI产品日常工国外图标网址:网址一:TablerIcons网址二:https://remixicon.com/网址三:https://feathericons.com/国内:网址一:https://iconpark.oceanengine.com/home网址二:https:......
  • SVG描边 - CSS3实现动画绘制矢量图
    使用SVG的stroke-dasharray及stroke-dashoffset,结合CSS3animation实现画笔绘制矢量图的动画效果,如下:html<svgxmlns="http://www.w3.org/2000/svg"pointer-events="none"class="leaflet-zoom-animated"width="1452"heigh......
  • CorelDRAW2024专业的平面设计软件,专注于矢量图形编辑与排版
    CorelDRAW2024是一款专业的平面设计软件,专注于矢量图形编辑与排版。它可以提供无缝的图形、版面、插图、照片编辑、摹图、网络图像、印刷项目、美术作品、排版等设计体验,并可应用于商标设计、标志制作、模型绘制、插图描画、排版及分色输出等领域。CDR2024绿色版下载链接:ht......
  • Python基于Excel生成矢量图层及属性表信息:ArcPy
      本文介绍基于Python中ArcPy模块,读取Excel表格数据并生成带有属性表的矢量要素图层,同时配置该图层的坐标系的方法。1任务需求  首先,我们来明确一下本文所需实现的需求。  现有一个记录北京市部分PM2.5浓度监测站点信息的Excel表格数据,格式为.xls;文件内包含站点编号、X......
  • leaflet频繁切换mapbox矢量图层-短暂空白问题
    leaflet加载mapbox矢量图层-最佳方案推荐闪烁问题比如现在有卫星图和mapboxgl矢量图层,两者有时常常需要切换,但在切换回矢量图层时,会出先短暂的空白问题(就是初始化图层),那有什么办法,可以实现平滑过渡切换呢解决思路大概讲一下思路,就是在切换卫星图时,矢量图层不要立刻移除,通过......