首页 > 其他分享 >8.11 矢量图层线要素单一符号使用七(爆炸线)

8.11 矢量图层线要素单一符号使用七(爆炸线)

时间:2024-06-12 16:32:37浏览次数:14  
标签:QStringLiteral 矢量图 color Lineburst 35 mp 层线 8.11 lineBurstSymbolLayer

文章目录

前言

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

爆炸线(Lineburst)

沿着一条线垂直绘制渐变图案。
在地理信息系统(GIS)和相关领域中,这种类型的线条符号可能用于表示某种渐变的线性特征,例如地形高度变化、光照强度变化或人口密度变化等。通过在线条上绘制渐变图案,可以更直观地展示这些特征的变化趋势和分布情况。

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

QGis设置线符号为爆炸线(Lineburst)

  • Symbol layer type设置为Lineburst,可设置的属性见下图
    在这里插入图片描述
  • 符号颜色有两种选择:两种颜色(Two color)和渐变色(Color ramp)
  • 属性设置为Tow color效果如下
    在这里插入图片描述
  • 设置为Color ramp效果如下
    在这里插入图片描述

二次开发代码实现爆炸线(Lineburst)

  • QgsLineburstSymbolLayer是Lineburst,详情见文档,类图如下
    在这里插入图片描述
  • 符号颜色有两种,函数setGradientColorType设置颜色方案,参数代码如下
enum class GradientColorSource 
{
  SimpleTwoColor, //!< Simple two color gradient
  ColorRamp, //!< Gradient color ramp
};
  • 构造函数中默认是SimpleTwoColor,代码如下
QgsLineburstSymbolLayer::QgsLineburstSymbolLayer( const QColor &color, const QColor &color2 )
  : QgsAbstractBrushedLineSymbolLayer()
  , mColor2( color2 )
{
  setColor( color );
}
  • 代码实现设置图层符号有两种方法:构造函数和静态函数create
  • 方法一
  1. 从图层获取渲染器
    //从图层获取渲染器
    QgsFeatureRenderer * layerRenderer= layer->renderer();
    QgsSingleSymbolRenderer *singleSymbolRenderer = QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer);
  1. 构造函数:设置颜色方案为SimpleTwoColor或者ColorRamp
//    auto lineBurstSymbolLayer = new QgsLineburstSymbolLayer(QColor(35,35,35),Qt::white);
//    lineBurstSymbolLayer->setGradientColorType(Qgis::GradientColorSource::SimpleTwoColor);
//    lineBurstSymbolLayer->setWidth(2.0);
    auto lineBurstSymbolLayer = new QgsLineburstSymbolLayer();
    lineBurstSymbolLayer->setGradientColorType(Qgis::GradientColorSource::ColorRamp);
    QgsGradientColorRamp *ramp = new QgsGradientColorRamp(QColor( 0, 255, 0 ), QColor( 0, 20, 0 ));
    lineBurstSymbolLayer->setColorRamp(ramp);
    lineBurstSymbolLayer->setWidth(2.0);
  1. 创建符号并设置到渲染器
    //多个Symbol Layer构成一个Symbol
    QgsSymbolLayerList layerList;
    layerList << rasterSymbolLayer;
    //构造QgsLineSymbol并设置renderer
    auto lineSymbol = new QgsLineSymbol(layerList);
    singleSymbolRenderer->setSymbol(lineSymbol);
    layer->setRenderer(singleSymbolRenderer);
  • 方法二
    方法一中步骤1,3不变,步骤2中使用create()成员函数,颜色方案同样有两种选择
    QVariantMap mp;
//    mp["color_type"] = QStringLiteral("0");
//    mp["color"] = QStringLiteral("35,35,35");
//    mp["gradient_color2"] = QStringLiteral("250,250,250");

    mp["color_type"] = QStringLiteral("1");
    mp["color1"] = QStringLiteral("0, 255, 0");
    mp["color2"] = QStringLiteral("0, 20, 0");
    mp["line_width"] = QStringLiteral("2.0");
    auto lineBurstSymbolLayer = QgsLineburstSymbolLayer::create(mp);
  • 完整测试代码如下
void MainWindow::lineBurstSlot()
{
    //添加一个线图层
    QgsVectorLayer* layer = addTestShape(QStringLiteral("maps/shapefile/rivers.shp"));
    //从图层获取渲染器
    QgsFeatureRenderer * layerRenderer= layer->renderer();
    QgsSingleSymbolRenderer *singleSymbolRenderer = QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer);
#if 0
//    auto lineBurstSymbolLayer = new QgsLineburstSymbolLayer(QColor(35,35,35),Qt::white);
//    lineBurstSymbolLayer->setGradientColorType(Qgis::GradientColorSource::SimpleTwoColor);
//    lineBurstSymbolLayer->setWidth(2.0);
    auto lineBurstSymbolLayer = new QgsLineburstSymbolLayer();
    lineBurstSymbolLayer->setGradientColorType(Qgis::GradientColorSource::ColorRamp);
    QgsGradientColorRamp *ramp = new QgsGradientColorRamp(QColor( 0, 255, 0 ), QColor( 0, 20, 0 ));
    lineBurstSymbolLayer->setColorRamp(ramp);
    lineBurstSymbolLayer->setWidth(2.0);

#else
    QVariantMap mp;
//    mp["color_type"] = QStringLiteral("0");
//    mp["color"] = QStringLiteral("35,35,35");
//    mp["gradient_color2"] = QStringLiteral("250,250,250");

    mp["color_type"] = QStringLiteral("1");
    mp["color1"] = QStringLiteral("0, 255, 0");
    mp["color2"] = QStringLiteral("0, 20, 0");
    mp["line_width"] = QStringLiteral("2.0");
    auto lineBurstSymbolLayer = QgsLineburstSymbolLayer::create(mp);
#endif
    //多个Symbol Layer构成一个Symbol
    QgsSymbolLayerList layerList;
    layerList << lineBurstSymbolLayer;
    //构造QgsLineSymbol并设置renderer
    auto lineSymbol = new QgsLineSymbol(layerList);
    singleSymbolRenderer->setSymbol(lineSymbol);
    layer->setRenderer(singleSymbolRenderer);

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

总结

  • 介绍了矢量图层线要素单一符号中爆炸线(Lineburst)的使用

标签:QStringLiteral,矢量图,color,Lineburst,35,mp,层线,8.11,lineBurstSymbolLayer
From: https://blog.csdn.net/richie12/article/details/139629990

相关文章

  • Affinity Designer for Mac(强大的矢量图设计软件)v2.5.2版
    AffinityDesigner中文版是一款专为设计师打造的强大矢量图形设计软件,它以无与伦比的迅捷、流畅和精确性赢得了设计师们的广泛赞誉。无论您是专注于广告设计、网页设计、图标设计还是用户界面(UI)设计,AffinityDesignerMac版都能为您带来前所未有的高效体验。这款软件将彻底革新......
  • 8.11 矢量图层线要素单一符号使用五(标记线)
    文章目录前言标记线(Markerline)QGis设置线符号为标记线(Markerline)二次开发代码实现标记线(Markerline)总结前言本章介绍矢量图层线要素单一符号中标记线(Markerline)的使用说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps标记线(Markerline)在线条特征上绘制......
  • 微信、支付宝小程序引入阿里巴巴矢量图库
    阿里巴巴矢量图标库: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......