QGIS插件开发详细教程

article/2025/8/19 16:10:31

为了提高生产力,接触到了QGIS插件开发。从相关的知识准备,到实际插件开发,断断续续大约花了一周的时间,最后也算是实现了自己的目的,感觉有必要记录一下其中遇到的坑。

1 知识准备

进行QGIS插件开发,总体上需要两个方面的知识储备

  • 熟悉QGIS提供的各种类库和函数接口

    这方面最好的资料是官方文档,内容详细而且比较有条理。如果以后经常接触到QGIS二次开发的话,建议把整个文档好好看一遍,如果时间有限,也可以根据自己的需要有针对性的阅读

  • 了解PyQt的基本使用

    QT是C++编写的跨平台GUI库,PyQt是在QT基础上进行的封装,可以用于基于Python的GUI开发。QT本身功能很强大,但由于这里只是为了开发QGIS插件,因此根据自己的需要有选择的学习即可,时间充足也可以系统学习。我是在B站找的教程,奉上链接,不想看视频的也可以看相关的这里

2 插件安装

在进行QGIS插件开发前,需要下载2个插件,方便我们后续开发,插件安装,这里不在赘述

  • Plugin Builder3

    利用这个插件可以生成一个QGIS插件模板,在生成的插件模板基础上根据我们的需要进行二次开发,此外还提供了编译和部署工具,十分方面。关于插件的使用后面会详细介绍

  • Plugin Reloader

    利用这个插件可以动态加载QGIS已经安装的插件,这样在后续开发中如果对插件进行了改动,可以直接动态重新载入插件,而不用重启QGIS

此外,QGIS官方还提供了First Aid这个插件用于插件开发Debug,不过我在实际开发中并没有用到,仅供大家参考

3 生成插件模板

接下里将详细说明,如何利用Plugin Builder3生成插件模板

3.1 点击插件图标,打开插件模板生成窗口

image-20220322211145348

image-20220322211351773

3.2 配置插件模板

image-20220322211839013

  • Class name:封装插件的类名,需要符合Python类的命名规范,驼峰命名法即可
  • Plugin name:插件名
  • Description: 插件描述,后期插件部署后,将鼠标放在插件图标上,会出现该描述
  • Module name: 插件模板中,核心的python文件名
  • Version number:插件 版本
  • Minimum QGIS version: 运行该插件,所需要的最小QGIS版本

3.3 点击next,输入插件描述,也可以直接跳过

image-20220322212534136

3.4 点击Next,选择插件模板窗口和插件在QGIS中的部署位置

image-20220322212841571

没有特别要求的话,插件模板窗口一般选择默认的Tool button with dialog,接着输入插件在QGIS中菜单项显示的文字,对应的就是Plugin Builder在QGIS菜单项中的文字,见下图

image-20220322213457977

最后选择,插件在QGIS中的部署位置,5个选项分别对应QGIS的5个菜单项

image-20220322213656714

这里要说明的是,后续插件部署配置后,插件图标也会出现在QGIS的工具条中,向其它插件一样,比如我开发的插件部署后的效果

image-20220322213824592

3.5 一路Next,最后选择生成的模板插件位置

image-20220322215032267

3.6 点击Generate生成模板插件

image-20220322215204723

第一个是生成的模板插件路径,也就是后续进行插件开发的位置,第二个是QGIS插件部署的位置,这个需要记住,当然在模板插件目录中的README.html文件和README.txt文件中也可以找到

3.7 模板插件文件目录如下

image-20220322215942084

  • _init_.py 是插件类的初始化文件
  • icon.png 是插件图标文件,也就是插件在QGIS工具条中的图标,可以根据自己的需要进行修改
  • Makefile 是make编译配置文件,如果后续利用make进行编译需要用到
  • pb_tool.cfg 编译配置文件,pb_tool(pbt)编译配置文件,后续用pbt_tool(pbt)编译的话需要用到
  • plugin_demo.py 插件核心文件,插件功能有关的开发主要在这里
  • plugin_demo_dialog.py 是利用make或pb_tool等编译工具编译QT 的ui文件生成的python文件,负责实现插件的UI界面
  • plugin_demo_dialog_base.ui 是QtDesigner的ui设计文件和qrc文件配套,后续可以利用QtDesigner打开改文件根据需要设计相应的界面,最后进行保存,再编译为对应的py文件
  • plugin_upload.py 不太清楚,可能是用于插件的加载
  • resource.py 利用make或pb_tool(pbt)编译resource.qrc生成的资源文件,主要记录了QtDesigner设计UI界面时用到的图片等数据,和.ui文件配套

注意:

根据官方文档的说明,每次在对.ui文件和.qrc文件进行修改后,都需要重新利用pb_tool或make进行编译,但根据实际开发经验来看,如果只对ui文件进行了修改,而没有引入新的资源文件如图片之类的,则不需要再次编译直接部署即可,但如果qrc文件也发生了变动,则必须要重新编译qrc文件,在利用pb_tool进行编译时,需要先删除之前已经编译好的文件,再在终端中输入pbt compile进行编译如果提示没有pb_tool,pip手动安装即可

4 环境配置

进行QGIS插件开发首推的IDE还是PyCharm,免费的社区版就可以了。其实我一开始用的是vscode,但实际使用体验很差,Qt部分的代码没有办法补全,所以换到了PyCharm。注意第一次用PyCharm打开插件工程目录,选择好解释器后,需要等待一段时间,期间PyCharm会对各种python库建立索引,索引建立完成后,代码补全功能就可以正常使用了,如果很长时间索引建立还没有结束,可以重启一下PyCharm

这里放上我的PyCharm配置文件,是一个Windows批处理文件,每次点击运行这个批处理文件就可以了,第一次打开PyCharm需要设置解释器

@echo off 
set OSGEO4W_ROOT=F:\Program Files\QGIS 3.16.14
set path=%OSGEO4W_ROOT%\bin;%WINDIR%\system32;%WINDIR%;%WINDIR%\system32\WBemcall o4w_env.bat 
call qt5_env.bat
call py3_env.bat@echo off
path %PATH%;%OSGEO4W_ROOT%\apps\qgis-ltr\bin
path %PATH%;%OSGEO4W_ROOT%\apps\grass\grass78\lib
path %PATH%;%OSGEO4W_ROOT%\apps\Qt5\bin
path %PATH%;%OSGEO4W_ROOT%\apps\Python39\Scriptsset QGIS_PREFIX_PATH=%OSGEO4W_ROOT:\=/%/apps/qgis-ltr
set GDAL_FILENAME_IS_UTF8=YES
set VSI_CACHE=TRUE
set VSI_CACHE_SIZE=1000000
set QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\qgis-ltr\qtplugins;%QT_PLUGIN_PATH%
set PYTHONPATH=%OSGEO4W_ROOT%\apps\qgis-ltr\python;%PYTHONPATH%set PYCHARM="F:\Program Files\JetBrains\PyCharm 2020.1\bin\pycharm64.exe"
@echo on
start "PyCharm with QGIS knowledge!" /B %PYCHARM% %*

上述配置文件需要根据自己的QGIS和PyCharm安装路径进行修改,保存为bat文件即可

在这里插入图片描述

5 开发部署

5.1 Link Shell Extension下载

有关Link Shell Extension的说明见下图:

image-20220323094755337

使用Link Shell Extension在QGIS插件安装目录下为我们自己开发的QGIS插件建立硬链接,这样每次在开发目录下对插件进行的修改会自动同步到QGIS插件安装目录,而不用我们去手动删除已部署的插件在重新部署,十分方便。Link Shell Extesion下载

硬链接的建立步骤如下:

  • 在插件目录单击鼠标右键,再单击选择资源连接点

image-20220323095249308

  • 在QGIS插件安装目录下,鼠标右键创建为,选择目录连接点,即可

image-20220323095649322

5.2 插架部署

  • 首先将自己开发的插件工程目录拷贝到QGIS插件安装目录下,如果已经用上述Link Shell Extension建立了硬链接,则此步骤跳过
  • 打开QGIS插件管理窗口,在已安装列表中,找到我们自己开发部署的插件,勾选上对应的复选框,启用插件

image-20220323100342328

  • 插件查看

由于之前创建插件模板时,选择插件的部署位置为Plugins,因此在插件菜单项下可以看到我们部署的插件,此外插件图标也会出现在QGIS工具条上

image-20220323100452239

image-20220323100734958

  • 单击工具条按钮,打开开发部署的插件

image-20220323100826450

5.3 PluginReloader 重载插件

在开发中,会经常对部署的插件进行修改,此时可以利用PluginReloader动态重载部署的插件,而不用每次重启QGIS

  • PluginReloader 配置要重载的插件

image-20220323101131649

image-20220323101203309

  • 单击PluginReloader图标重载插件

image-20220323101237566

6 示例

最后放上自己开发的插件,仅做参考

由于自己是做遥感的,InSAR方向,经常需要查看某一点在时序影像中对应的时间序列并进行分析,GAMMA(InSAR处理软件)虽然提供了时序查看功能,但并不好用,也无法与ArcGIS或QGIS配套使用,所以索性自己开发了一个,类似于ArcGIS中的多只提取至点工具。

至于为什么不在ArcGIS基础上进行开发,科技无国界…………,还是早点拥抱开源以防万一比较好

大概长这样,第一接触Qt做的很丑,但基本功能算是实现了

  • 选择时序影像目录,批量添加时序影像,后续可以对影像的顺序进行调整,也可以增加额外的影像(不要求所有的影像在同一目录下)或删除不需要的影像

image-20220323102607597

  • 切换到时序曲线选项卡,单击地图上某一点,即可提取该点在时序影像中对应的时间序列并绘制时序曲线,下方表格也记录了时间序列的数值。如果时序影像有多个波段,可以事先选择要查看的波段

image-20220323103119863

可以将该时序曲线保存为图片,还可以将该点的时序记录添加到时序记录选项卡中,批量导出。

  • 批量导出时序记录

image-20220323103529416

在时序记录选项卡中可以批量导出时序记录,导出格式可以为**.csv,xls,.shp**,默认格式是shp文件

在QGIS中打卡导出的时序采样点,属性表中记录了采样点的时间序列数值

image-20220323103724599

image-20220323103757742

7 源代码

插件的源码已经放到GitHub中了,如果需要的话可以自行下载,自己水平有限,仅供参考

源码连接


http://chatgpt.dhexx.cn/article/WStkY6qH.shtml

相关文章

QGIS的部分使用流程

qgis 工具下载 https://qgis.org/en/site/forusers/download.htmlqgis 教程 https://docs.qgis.org/3.10/zh_Hans/docs/user_manual/index.html其他参考 https://zhuanlan.zhihu.com/p/363964644准备工作 1. 新建一个文件夹 e.g.qgis,方便以后可以将相关文件都…

QGIS 3.10 制图手把手教程

GIS的主要用途之一是制作用于打印或出版的地图。QGIS提供了名为“打印布局(Print Layout)”的制图利器,通过组合各种图层进行地图制作。 任务概览 本教程使用QGIS 3.10 为您演示怎样创建一幅包含各种标准地图元素的地图,如地图插…

如何在云服务器搭建虚拟主机,如何在云服务器搭建虚拟主机

如何在云服务器搭建虚拟主机 内容精选 换一换 GaussDB(DWS) 提供的gsql命令行客户端,它的运行环境是Linux操作系统,在使用gsql客户端远程连接GaussDB(DWS) 集群之前,需要准备一个Linux主机用于安装和运行gsql客户端。如果通过公网地址访问集群,也可以将gsql客户端安装在用户…

搭建云服务器实现内网穿透

# 前言 由于公司业务需要,搭建一组外网访问内网服务的一套链接关系,通过外网ip访问公司内网 # 技术采用frp docker # 环境客户端,服务端皆为 Ubuntu 18 # 实现原理公网服务器作为服务端,内网服务器作为客户端,服务器端…

云服务器搭建MQTT服务器

文章目录 前言一、通过宝塔面板登录服务器,拉取emqx/emqx镜像二、使用宝塔远程工具后台运行镜像三、访问emqt的web管理页面四、编写消息发布端和订阅端,python实现1.发布端publish2.订阅端subscribe 总结 前言 既然有了云服务器,可以搭建一个…

阿里云服务器如何搭建MQTT服务器

1.开通阿里云服务器 入门教程:链接 将系统配置成Ubuntu18的(因为我只会用这个系统) 在实例处停止当前系统的运行,然后依次选择2,下拉菜单找到3进行更换系统,更换完成以后重启就好了…

ESC云服务器搭建自己的图床

文章目录 前言一、整体思路二、具体步骤1.在picgo中添加插件2.在本地新建一个json文件(配置文件)3.填写插件信息4.开始上传图片 前言 在搭建个人博客时使用了markdown语法作为编写博客的主要语言。但由于本地编写时加入的图片只能在本地显示&#xff0c…

泰拉瑞亚云服务器的搭建

申请虚拟机 无论是阿里云,华为云,还是腾讯云都行,申请一台云服务器,以腾讯云为例 连接云服务器 我推荐使用win10自带的远程桌面连接 计算机名就是公网ip,密码是你在申请虚拟机时设置的密码,如果忘记了&…

从零开始配置搭建云服务器(Linux系统、简明详细教程)

一、首先购买云服务器 先选购云服务器,个人推荐选用腾讯云,价格便宜适合学生党或者程序员自用。 1、以购买腾讯云为例,点击官方腾讯云购买地址:购买链接,进入腾讯云连接,进入腾讯云 2、选择自己想要的服务…

阿里云搭建 ftp 服务器

安装 vsftpd yum install -y vsftpd 进入 /etc/vsftpd cd /etc/vsftjpd /etc/vsftpd/vsftpd.conf 是核心配置文件。 /etc/vsftpd/ftpusers 是黑名单文件,此文件里的用户不允许访问 FTP 服务器。 /etc/vsftpd/user_list 是白名单文件,是允许访问 FTP 服…

办公系统服务器搭建,搭建云桌面办公服务器

搭建云桌面办公服务器 内容精选 换一换 传统的HPC使用中存在如下问题:投资成本高,扩容部署复杂,重复利用已有投资十分困难。应用复杂,资源预测困难,灵活性差,亟待提升效率。效率低下导致决策缓慢,失去市场、以及开发研究成果的良机。应用计算量快速膨胀,对性能要求越来…

搭建云服务器

在阿里云、百度云、或者腾讯云购置一台云服务器。我这里买的是阿里云的,而且操作系统选择的是Linux。 购买了之后,我们回到阿里云的首页,点击右上角的控制台,然后在左侧的导航栏中找到云服务器,点击进入,就…

怎么用虚拟机搭建云服务器,利用虚拟机搭建云服务器

利用虚拟机搭建云服务器 内容精选 换一换 虚拟私有云(Virtual Private Cloud)是用户在华为云上申请的隔离的、私密的虚拟网络环境。用户可以自由配置VPC内的IP地址段、子网、安全组等子服务,也可以申请弹性带宽和弹性公网IP搭建业务系统。 云备份和镜像服务有很多功能交融的地…

云服务器搭建

云服务器购买 进入阿里云官网 -- 下拉点击 若是新手 可直接点击 新用户使用 否则则点击立即购买 进行选购自己的云服务器 云服务器配置 购买完服务器 便可通过 阿里云官网 进入控制台 点击左边目录选择云服务器ECS 在左侧目录点击 网络与安全 下的 安全组 注意:…

怎么部署个人云服务器?保姆级教程

折腾云服务器也有几个月了,从选平台开始,购域名、买服务器、部署项目,再到备案、部署SSL证书。 整个流程走下来,各种各样、五花八门的问题,层出不穷,虽没有掉层皮,但苦头却没少吃。 说到服务器…

一步步教你搭建自己的云服务器,(鉴于网上一大堆文章,看这一篇就够了)

笔者以前一直想搭建个自己的服务器,无奈一搜百度都是阿里云或者腾讯云或者其他云,一看服笔者早就有搭建服务器的想法了,鉴于网上云务器价格动不动几百,还限带宽,网速也不会太快,于是就有了自己搭建服务器的…

如何快速搭建自己的阿里云服务器(宝塔、Xshell、Xftp配置)

目录 一、前言 二、准备工作 1、新手申请 2、安全组设置 3、修改实例 4、下载Xshell和Xftp 5、安装并配置Xshell 6、本地连接云服务器 7、安装并配置Xftp 三、搭建环境 1、安装宝塔服务器运维面板 2、登录宝塔Linux面板 3、查看宝塔主页 4、测试环境 一、前…

利用阿里云短信验证码登录

这段时间准备做一个电商网站的小项目,在登录这方面,我想跟现在主流的登录想做成相似的功能,比如利用手机验证码登录,或者是扫描二维码登录,然后就在就在网站找了点资料今天来分享下,一来是给自己做个笔记&a…

阿里云短信验证码+Java开发

使用阿里云短信验证码 准备1.注册账号2.免费试用 一些设置1.测试一下2.添加自己的签名和模板3.添加用户&用户组 代码1.使用示例2.导jar包2.写代码最后 准备 1.注册账号 2.免费试用 连接: [link]https://free.aliyun.com/ntms/free/personal.html?handletrue. 之后会有一…