赞
踩
为了提高生产力,接触到了QGIS插件开发。从相关的知识准备,到实际插件开发,断断续续大约花了一周的时间,最后也算是实现了自己的目的,感觉有必要记录一下其中遇到的坑。
进行QGIS插件开发,总体上需要两个方面的知识储备
熟悉QGIS提供的各种类库和函数接口
这方面最好的资料是官方文档,内容详细而且比较有条理。如果以后经常接触到QGIS二次开发的话,建议把整个文档好好看一遍,如果时间有限,也可以根据自己的需要有针对性的阅读
了解PyQt的基本使用
QT是C++编写的跨平台GUI库,PyQt是在QT基础上进行的封装,可以用于基于Python的GUI开发。QT本身功能很强大,但由于这里只是为了开发QGIS插件,因此根据自己的需要有选择的学习即可,时间充足也可以系统学习。我是在B站找的教程,奉上链接,不想看视频的也可以看相关的这里
在进行QGIS插件开发前,需要下载2个插件,方便我们后续开发,插件安装,这里不在赘述
Plugin Builder3
利用这个插件可以生成一个QGIS插件模板,在生成的插件模板基础上根据我们的需要进行二次开发,此外还提供了编译和部署工具,十分方面。关于插件的使用后面会详细介绍
Plugin Reloader
利用这个插件可以动态加载QGIS已经安装的插件,这样在后续开发中如果对插件进行了改动,可以直接动态重新载入插件,而不用重启QGIS
此外,QGIS官方还提供了First Aid这个插件用于插件开发Debug,不过我在实际开发中并没有用到,仅供大家参考
接下里将详细说明,如何利用Plugin Builder3生成插件模板
没有特别要求的话,插件模板窗口一般选择默认的Tool button with dialog,接着输入插件在QGIS中菜单项显示的文字,对应的就是Plugin Builder在QGIS菜单项中的文字,见下图
最后选择,插件在QGIS中的部署位置,5个选项分别对应QGIS的5个菜单项
这里要说明的是,后续插件部署配置后,插件图标也会出现在QGIS的工具条中,向其它插件一样,比如我开发的插件部署后的效果
第一个是生成的模板插件路径,也就是后续进行插件开发的位置,第二个是QGIS插件部署的位置,这个需要记住,当然在模板插件目录中的README.html文件和README.txt文件中也可以找到
注意:
根据官方文档的说明,每次在对.ui文件和.qrc文件进行修改后,都需要重新利用pb_tool或make进行编译,但根据实际开发经验来看,如果只对ui文件进行了修改,而没有引入新的资源文件如图片之类的,则不需要再次编译直接部署即可,但如果qrc文件也发生了变动,则必须要重新编译qrc文件,在利用pb_tool进行编译时,需要先删除之前已经编译好的文件,再在终端中输入pbt compile进行编译,如果提示没有pb_tool,pip手动安装即可。
进行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\WBem call 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\Scripts set 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文件即可
有关Link Shell Extension的说明见下图:
使用Link Shell Extension在QGIS插件安装目录下为我们自己开发的QGIS插件建立硬链接,这样每次在开发目录下对插件进行的修改会自动同步到QGIS插件安装目录,而不用我们去手动删除已部署的插件在重新部署,十分方便。Link Shell Extesion下载
硬链接的建立步骤如下:
由于之前创建插件模板时,选择插件的部署位置为Plugins,因此在插件菜单项下可以看到我们部署的插件,此外插件图标也会出现在QGIS工具条上
在开发中,会经常对部署的插件进行修改,此时可以利用PluginReloader动态重载部署的插件,而不用每次重启QGIS
最后放上自己开发的插件,仅做参考
由于自己是做遥感的,InSAR方向,经常需要查看某一点在时序影像中对应的时间序列并进行分析,GAMMA(InSAR处理软件)虽然提供了时序查看功能,但并不好用,也无法与ArcGIS或QGIS配套使用,所以索性自己开发了一个,类似于ArcGIS中的多只提取至点工具。
至于为什么不在ArcGIS基础上进行开发,科技无国界…………,还是早点拥抱开源以防万一比较好
大概长这样,第一接触Qt做的很丑,但基本功能算是实现了
可以将该时序曲线保存为图片,还可以将该点的时序记录添加到时序记录选项卡中,批量导出。
在时序记录选项卡中可以批量导出时序记录,导出格式可以为**.csv,xls,.shp**,默认格式是shp文件
在QGIS中打卡导出的时序采样点,属性表中记录了采样点的时间序列数值
插件的源码已经放到GitHub中了,如果需要的话可以自行下载,自己水平有限,仅供参考
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。