8.8 矢量图层点要素点聚合(Point cluster)使用

本文介绍了如何在QGIS中使用Pointcluster插件处理密集点数据,展示了如何通过C++代码实现点的符号聚合,并以myplaces.shp文件为例,详细讲解了设置渲染器和符号的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

点聚合(Point cluster)

点要素过于密集时,将距离近的符号聚合,提高地图的可读性。

  • 以下以myplaces.shp为例,分别介绍QGis和二次开发中如何使用点分布

QGis

  • 以myplaces.shp为例,图层包含的点在缩放情况下会聚集在一起,如下图
    在这里插入图片描述
  • 设置符号渲染方式为点聚合(Point cluster),如下图
    在这里插入图片描述
  • 将符号标记图层的字符通过表达式设置为“@cluster_size”,即可显示聚合点中的点数量。
    在这里插入图片描述
  • 设置之后可见聚集在一起的点聚合在了一起,如下图
    在这里插入图片描述

代码实现

  • QgsPointClusterRenderer是点聚合(Point cluster)渲染器,详情见文档,类图如下
    在这里插入图片描述
  • 以下是实现点聚合渲染的步骤
  1. 从图层获取渲染器
    QgsFeatureRenderer * layerRenderer= layer->renderer();
    QgsPointClusterRenderer *pointClusterRenderer = QgsPointClusterRenderer::convertFromRenderer(layerRenderer);
  1. 设置点符号
    //设置clusterSymbol,其实以下代码都不用写,默认就是这个效果。
    //这里写出来只是演示
#if 0
    auto markerSymbol = new QgsMarkerSymbol();
    markerSymbol->setSize( 4 );
    markerSymbol->setColor( QColor( 245, 75, 80 ) );

    QgsFontMarkerSymbolLayer *fm = new QgsFontMarkerSymbolLayer();
    fm->setFontFamily( QFont().defaultFamily() );
    fm->setColor( QColor( 255, 255, 255 ) );
    fm->setSize( 3.2 );
    fm->setOffset( QPointF( 0, -0.4 ) );
    fm->setDataDefinedProperty( QgsSymbolLayer::PropertyCharacter, QgsProperty::fromExpression( QStringLiteral( "@cluster_size" ) ) );
    markerSymbol->insertSymbolLayer( 1, fm );
    pointClusterRenderer->setClusterSymbol(markerSymbol);
#else
    //设置渲染器
    QVariantMap mp;
    mp[QString("name")] = QStringLiteral("circle");
    mp[QString("color")] = QStringLiteral("red");
    mp[QString("size")] = QStringLiteral("6.0");
    auto simpleSymbolLayer = QgsSimpleMarkerSymbolLayer::create(mp);
    QVariantMap mp1;
    mp1[QString("font")] = QStringLiteral("Mukti");
    mp1[QString("color")] = QStringLiteral("white");
    mp1[QString("offset")] = QStringLiteral("0, -0.8");
    auto fontSymbolLayer = QgsFontMarkerSymbolLayer::create(mp1);
    fontSymbolLayer->setDataDefinedProperty( QgsSymbolLayer::PropertyCharacter, QgsProperty::fromExpression( QStringLiteral( "@cluster_size" ) ) );
    QgsSymbolLayerList layerList;
    layerList << simpleSymbolLayer << fontSymbolLayer;
    auto markerSymbol = new QgsMarkerSymbol(layerList);
    pointClusterRenderer->setClusterSymbol(markerSymbol);
#endif
  1. 设置点图层渲染器
layer->setRenderer(pointClusterRenderer);

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

总结

  • 分别使用QGis软件和C++ Api二次开发演示了点聚合的使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

雷动软件工作室

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

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

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

打赏作者

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

抵扣说明:

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

余额充值