16.3. python与PyQGIS¶
16.3.1. 了解Python控制台¶
与QGIS API交互(应用程序编程接口的缩写)的最直接方法是通过Python控制台,可以通过转到插件打开它Python控制台。 如下面的屏幕截图所示,Python控制台显示在地图下方的新面板中,如 图 16.3 。此技术也很有用:

图 16.3 Python控制台新面板¶
QGIS集成了用于编写脚本的python控制台。打开QGIS,打开控制台,如 图 16.4 。

图 16.4 Python控制台¶
使用前可以打开一个shp文件进行测试,如 图 16.5 。

图 16.5 文件测试¶
上面的屏幕截图说明了如何获取当前在图层列表中选定的图层,显示其ID以及显示要素计数。为了与QGIS环境进行交互,有一个iface 变量,它是的实例QgisInterface。该界面允许访问地图画布,菜单,工具栏和QGIS应用程序的其他部分。
16.3.2. Python应用程序¶
创建用于自动化流程的脚本通常很方便。使用PyQGIS,这是完全可能的-导入qgis.core模块,对其进行初始化,可以进行处理了。 打开控制台后建议直接导入量个库。
from qgis.core import *
import qgis.utils
必须配置PyQGIS定制应用程序或独立脚本来定位QGIS资源,例如投影信息和用于读取矢量和栅格图层的提供程序。 通过在应用程序或脚本的开头添加几行来初始化QGIS资源。为自定义应用程序和独立脚本初始化QGIS的代码相似。 需要注意的是千万不能使用qgis.py作为脚本的名称。Python将无法导入绑定,因为脚本名称会屏蔽它们。
16.3.3. 在自定义应用程序使用PyQGIS¶
实例化时,在独立脚本中使用PyQGIS和自定义PyQGIS应用程序之间的唯一区别是第二个参数QgsApplication。 通过True而不是False表明我们计划使用GUI。
from qgis.core import *
QgsApplication.setPrefixPath("/dir/qgis/installation", True)
qgs = QgsApplication([], True)
qgs.initQgis()
qgs.exitQgis()
运行¶
在第一行如果没有找到 qgis.core,就会有错误信息输出。
>>> import qgis.core ImportError: No module named qgis.core
解决的一种方法是修改环境变量。设置PYTHONPATH环境变量来解决。在以下命令中,应将其替换为您的实际QGIS安装路径:
export PYTHONPATH=/<qgispath>/share/qgis/python
现在,PyQGIS模块的路径是已知的,但是它们依赖于qgis_core和qgis_gui库(Python模块仅用作包装器)。这些库的路径对于操作系统可能是未知的, 然后您将再次收到导入错误(该消息可能因系统而异):
>>> import qgis.core
ImportError: libqgis_core.so.3.2.0: cannot open shared object file:
No such file or directory
通过将QGIS库所在的目录添加到动态链接器的搜索路径来解决此问题:
export LD_LIBRARY_PATH = / <qgispath> / lib
再次测试,如 图 16.6 。

图 16.6 测试¶
API文档¶
api是使用软件程序组件的门。随着程序的发展,api会发生变化,在我们的例子中,影响到所有直接使用它们的插件。
最大的QGIS API更改追加了从1.8版到2.0版的跳转,并将从2版跳转x到3x 但是,从一个版本移动到另一个版本时,会添加新的api,而其他的api则由于复杂软件的正常开发生命周期而被弃用。通常,为了启用新功能(例如,在版本2.4中添加的多线程可视化或在版本2.6中添加的更新的图例引擎)或由于代码重构(请参阅 http://en.wikipedia.org/wiki/Code_refactoring) .
因此,根据API的变化和想要将代码集成到哪个QGIS版本中,您应该使用一个或另一个API集,或者更好地编写可以在多个QGIS版本中执行的代码。
API文档是从QGIS代码自动生成的,可以在 http://qgis.org/api/, 在那里你可以找到你需要的课程。
例如,如果您需要知道 QgsVectorLayer 类,它是一个长期版本,您可以参考 http://qgis. org/api/2.8/classQgsVectorLayer.html, 或者对于最新的开发版本, http://qgis.org/api/classQgsVectorLayer.html.
应该指出的是,QGIS主要是用C++编写的,API文档遵循C++注释。QGIS类的大多数方法都可用作Python绑定。发现方法是否导出到Python的方法是在QGIS Python控制台中对其进行测试,或者在QGIS Python控制台中阅读其类文档