初探Qgis插件开发

初识QGIS插件

QGIS是一个地理数据编辑工具。除了强大的编辑功能外,也有着高度的扩展性,插件即是其中的一项。
QGIS插件
这里有很多有用的东西,比如QuickOSM(安装使用参考),官方教程里也对这外插件做了介绍,HCMGIS、OSMDownloader等也很实用。

HCMGIS导入的Bing卫星图
这些插件提供了QGIS本身没有的功能,看上去是不是很酷炫。然后就想着自己是不是能够做个插件给自己或给别人用?答案当然是可以。

并不完备的开发手册

本人写过一些Office和Visual studio的插件,利益于微软详尽的文档,开发这些小东东倒并不费劲。估摸着,QGIS的插件写起来也不会困难,但……

打开PyQGIS cookbook,找到Developing Python Plugins,翻了一下,一脸朦逼。真是书到用时方恨少啊,以前没好好学英文。好在现在翻译工具众多,借助这些工具,勉强看懂了,知道了插件的代码结构。

PYTHON_PLUGINS_PATH/
MyPlugin/
init.py --> required
mainPlugin.py --> core code
metadata.txt --> required
resources.qrc --> likely useful
resources.py --> compiled version, likely useful
form.ui --> likely useful
form.py --> compiled version, likely useful

这一堆文件,用手工一个个创建还真麻烦。难道开源的东西就这么折腾吗?又仔细翻了翻文档,原来是有这么一句话的:

There is a QGIS plugin called Plugin Builder 3 that creates a plugin
template for QGIS.

还是英文太菜,对26个字母组成的文字,实在不知道如何断句。这句话的大概意思是,QGIS有一个叫Plugin Builder 3 的插件,用于创建QGIS的插件模板。其实,没注意到这句话还有一个原因,那就是先入为主的认为,这种代码模板是IDE或独立的工具创建的,比如Visual studio或Eclipse里都相应的插件模板,即便生成一个Angular项目也可以ng new来生成,万万没想QGIS的插件,也是用插件来生成的。如此,不由得感慨,觉得写Plugin Builder 3 的人还真了不起,在没这个插件之前,硬是手工码出了这个插件。

安装完Plugin Builder 3 ,打开插件,一路向导,就生成了一个完整的代码目录。刚开始,我用Plugin Builder 3 创建一个叫做test的项目,一路Next。
test基本信息

插件说明

配置菜单
其它选项
链接
生成代码
点击Generate后,弹出来一个框。
暂时不知道什么意思
点击OK。
暂时也不知道什么意思
然后看到代码已经生成了,用VS Code打开文件夹。
项目结构

关于打包

照理说,这样就可以运行了。但一时之间,竟不知道如何打包。继续翻文档,看到了这么个东西:Releasing your plugin,Release是释放的意思,把你的插件放出来,是骡子是马拿出来溜溜,正规点说法就是发行/发表。不管它什么意思了,总之就是要打个包,放到QGIS里。不过,这里并没有像其它的技术教程那样,写出详细的步骤,而是提了一些注意事项。本人也就看到了Plugin是个插件包,想着Python又不用编译什么的,大概把这项目弄成Zip就行了(有点像Jar包,只不过Jar里的Class是编译过的,这个不用)。于是试着用zip工具,按要求打包成一个zip文件,然后Plugins菜单里安装。

在这里插入图片描述
打包方式有点原始,但很有效。试着从安装界面进行安装。
在这里插入图片描述
点击安装的时候,跳出来一个框,不管它直接Yes。
在这里插入图片描述
不幸的是,报错了。没法导入test.test。检查了一下目录结构,发现test下边还有个test,这跟主类文件test.py冲突。原来这是个测试包,都是命名惹的祸。删掉,再来一遍。
在这里插入图片描述
额,又来了。这个resources又是什么鬼?
在这里插入图片描述
翻文档。发现这地方提到了resource文件,并说明了生成resource的方法。在插件源码目录中运行如下命令:

pyrcc5 -o resources.py resources.qrc
然后便得到一个resources.py文件。
在这里插入图片描述
看不懂。暂时先不管它,把这个文件扔进zip包里,再次安装。
在这里插入图片描述
居然成功了。直接踏破铁鞋无觅处,得来全不费功夫。试着跑一下。
在这里插入图片描述
Plugins菜单下多了一个test菜单,点进去又是一个test,再点,出来一个弹框,像这个样子。
在这里插入图片描述
为了验证一下这个框是不是测试插件中的,用QT Designer打开看一下,好像是这么个窗口:
在这里插入图片描述

关于开发环境

从上边步骤来看,写个QGIS插件似乎并不难。但实际上,本人在完成这个test的时候,绕了很多弯弯。
虽然插件是用Python来写的,但实际只是用了Python语言本身,后端其实用的是QT,通过PyQT这东西作为代理,然后供Python调用。

写插件的时候,是可以不用配置环境变量的,只不过通常我们写代码会用到IDE,由于没配置环境变量,IDE会有很多错误提示,比如:

Import “qgis.PyQt.QtCore” could not be resolved

此时可以通过配置PYTHONPATH这个变量来解决这个问题。

pyrcc5在Python的scripts目录下边,QGis自带了3.7的Pyghon,可以在安装目录下边找到,然后配置到系统的PATH变量中,就可以快速启动这个脚本。

关于开发工具

IDE在cookbook中有介绍。看个人喜好进行选择。本人还是比较倾向PyCharm,使用社区版的即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值