QGis二次开发基础 -- 文字标注

本文介绍了QGIS二次开发中的文字标注功能实现,包括启用标注、QgsPalLayerSettings的使用、数据定义标注样式,以及如何复制QGIS的标注配置面板。通过设置QgsPalLayerSettings的属性,可以实现标注的动态变化,如不同大小、颜色、字体。同时,文章提供源代码示例,帮助开发者直接调用QGIS的标注配置面板。

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

Label 这个功能是为了更直观的将矢量数据的属性信息显示在地图上,方便用户在浏览地图的时候查看。几乎每个 Gis 系统都会有这个基础功能,QGis 的 Label 更是非常漂亮,不仅支持标注的轮廓缓冲区功能,还可以给标注绘制上阴影效果等。今天就来说一说 QGis 二次开发中的文字标注功能的实现。

这里写图片描述


在这里补充一点:如果你的 QGis 显示出的矢量图层中文是乱码,不论是属性表里面的乱码还是 Label 上显示的乱码,都是字符编码的问题。
照下面的图,在图层属性里面,打开“通用”面板,设置“数据源编码”为“GBK”或者“GBK2312”就可以了。

这里写图片描述


本文包含两个部分,第一是直接实现 Label 功能,第二则是教大家直接把 QGis 的 Label 配置面板拿过来用。

实现思路

首先我们注意到,QgsVectorLayer 这个类当中,有一个 enableLabels() 方法。先好奇的将它设置为 true.

QgsVectorLayer* layer = (QgsVectorlayer*)this->activeLayer(); // 替换成任何一种获取矢量图层的方式
layer->enableLabels(true);
m_mapCanvas->refresh();

发现有如下的效果:

这里写图片描述

OK,Done!谢谢阅读。


哈哈,开个玩笑。
上图所示的结果,仅仅是打开了 Label 这个功能,它非常简单,但是到现在还没有任何配置。例如,我们要显示的字段,显示出来的样子等等。

可是我们确实已经实现了标注的功能,即在地图界面中显示出了文字信息。

于是我们发现,重点应该是如何配置这个标注的显示。

QgsPalLayerSettings

如果某个对象有一大堆属性需要设置,最好的方式就是新建另一个对象,来负责设置这些属性。QgsPalLayerSettings 这个类正是这样的存在,它负责矢量图层的相关设置。看一看 API 文档,不难发现,这里面定义的几乎全都是属性。

我相信配置属性对于大家来说都不会是一个难点,无非就是给不同的属性赋上不同的值而已。下面我会通过代码注释,来直接给出使用方法。

// 首先是定义一个 QgsPalLayerSettings 变量,并启用他的属性设置
QgsPalLayerSettings layerSettings;
layerSettings.enabled = true;

// 然后就可以开始根据API文档中的属性,进行自定义配置了
layerSettings.fieldName = layer->pendingFields()[3].name(); // 设置Label图层
layerSettings.centroidWhole = true; // 设置位置参考的中心点

// Label 字体设置
layerSettings.textColor = QColor( 0, 0, 0 ); // 设置字体颜色
layerSettings.textFont = QFont( "Times", 12 ); // 设置字体和大小

// Label 轮廓buffer设置
layerSettings.bufferDraw = true;
layerSettings.bufferColor = QColor( 255, 0, 0
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值