初识QGIS插件
QGIS是一个地理数据编辑工具。除了强大的编辑功能外,也有着高度的扩展性,插件即是其中的一项。
这里有很多有用的东西,比如QuickOSM(安装使用参考),官方教程里也对这外插件做了介绍,HCMGIS、OSMDownloader等也很实用。
这些插件提供了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。
点击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,使用社区版的即可。
如果觉得《初探Qgis插件开发》对你有帮助,请点赞、收藏,并留下你的观点哦!