简介
本文档既可以作为教程,也可以作为参考指南。尽管它没有列出所有可能的用例,但是应该对主要功能进行了很好的概述。
在QGIS 0.9中首次引入了对Python的支持。有几种在QGIS 桌面应用中使用Python的方法(在以下各节中介绍):
-
在QGIS中的Python控制台中发布命令
-
创建和使用插件
-
QGIS启动时自动运行Python代码
-
基于QGIS API创建自定义应用程序
Python绑定也可用于QGIS Server,包括Python插件(请参阅QGIS Server Python插件)和可用于将QGIS Server嵌入Python应用程序中的Python绑定。
有完整的QGIS API参考,其中记录了QGIS库中的类。Pythonic QGIS API(pyqgis)与C ++ API几乎相同。
学习如何执行常见任务的好办法是从插件存储库下载现有插件 并阅读其代码。
Python控制台中的脚本编写
QGIS集成了Python控制台用于提供脚本编写。可以从“ 插件‣Python控制台”菜单中打开它:
上面的屏幕截图说明了如何获取当前在图层列表中选定的图层,显示其ID以及(如果是矢量图层)显示要素统计(可选)。为了与QGIS环境进行交互,有一个iface
变量,它是 QgisInterface
的实例。该接口允许访问地图画布,菜单,工具栏和QGIS应用程序的其他部分。
为了方便用户,在启动控制台时将执行以下语句(将来可能会设置其他初始命令)
from qgis.core import *
import qgis.utils
对于经常使用控制台的用户,设置用于启动控制台的快捷方式可能会很有用(方法:“设置”‣“键盘快捷方式”中设置)
Python插件
可以使用插件扩展QGIS的功能。插件可以用Python编写。与C ++插件相比,主要优点是分发简单(无需针对每个平台进行编译)和更轻松的开发。
自从引入Python支持以来,已经编写了许多涵盖各种功能的插件。插件安装程序使用户可以轻松获取,升级和删除Python插件。有关插件和插件开发的更多信息,请参见Python插件页面。
在Python中创建插件非常简单, 有关详细说明,请参见开发Python插件。
备注:Python插件也可用于QGIS服务器。有关更多详细信息,请参见QGIS Server Python插件。
QGIS启动时运行Python代码
每次QGIS启动时,都有两种不同的方法来运行Python代码。
-
创建一个startup.py脚本
-
设置
PYQGIS_STARTUP
环境变量值为运行Python文件
startup.py
文件
每次QGIS启动时,Python搜索用户的QGis主目录
-
Linux:
.local/share/QGIS/QGIS3
-
Windows:
AppData\Roaming\QGIS\QGIS3
-
macOS:
Library/Application Support/QGIS/QGIS3
搜索名为startup.py
的文件。如果该文件存在,则由嵌入式Python解释器执行。
注意
默认路径取决于操作系统。要找到适合您的路径,请打开QGis的Python控制台并运行 QStandardPaths.standardLocations(QStandardPaths.AppDataLocation)
以查看默认目录列表。
PYQGIS_STARTUP环境变量
通过设置PYQGIS_STARTUP
环境变量值为现有Python文件的路径,可以在QGIS初始化完成之前运行Python代码。
该脚本将在QGIS初始化完成之前运行。此方法对于清理sys.path中不需要的路径的或在不需要虚拟环境(例如在Mac上安装自制软件或MacPorts)的情况下隔离/加载初始环境非常有用。
Python应用程序
创建用于自动化流程的脚本通常很方便。-导入qgis.core
模块,对其进行初始化,您就可以进行处理了。
或者,您可能想创建一个使用GIS功能的交互式应用程序实现比如:执行测量,将地图导出为PDF等功能。该qgis.gui
模块提供了各种GUI组件,比如:最常见的地图画布缩放,平移的widget和任何其他自定义地图工具是可以将其添加到应用程序。
必须配置PyQGIS自定义应用程序或独立脚本来定位QGIS资源,例如投影信息和用于读取矢量和栅格图层的提供程序。通过在应用程序或脚本的开头添加几行来初始化QGIS资源。为自定义应用程序和独立脚本初始化QGIS的代码相似。下面提供了每个示例。
注意
千万不能使用qgis.py
作为脚本的名称。Python将无法导入绑定,因为脚本名称会屏蔽它们。
在独立脚本中使用PyQGIS
要启动独立脚本,请在脚本开头初始化QGIS资源:
from qgis.core import *
# Supply path to qgis install location
QgsApplication.setPrefixPath("/path/to/qgis/installation", True)
# Create a reference to the QgsApplication. Setting the
# second argument to False disables the GUI.
qgs = QgsApplication([], False)
# Load providers
qgs.initQgis()
# Write your code here to load some layers, use processing
# algorithms, etc.
# Finally, exitQgis() is called to remove the
# provider and layer registries from memory
qgs.exitQgis()
首先,我们导入qgis.core
模块并配置前缀路径。前缀路径是QGIS在系统上的安装位置。通过调用setPrefixPath
方法在脚本中对其进行配置。的第二个参数 setPrefixPath
设置为True
,指定要使用默认路径。
QGIS的安装路径因平台而异。为您的系统找到它的最简单方法是在QGIS 中使用Python控制台中的Scripting并查看运行中的输出 QgsApplication.prefixPath()
。
配置前缀路径后,我们用QgsApplication
创建对象并保存在变量qgs
中。第二个参数设置为False
,指定由于我们正在编写独立脚本,因此我们不打算使用GUI。通过QgsApplication
配置,我们通过调用qgs.initQgis()
方法来加载QGIS数据和注册层。初始化QGIS之后,我们准备编写其余脚本。最后,我们通过调用qgs.exitQgis()
从内存中删除数据和注册层完成QGis结束 。
在自定义应用程序使用PyQGIS
实例化时,在独立脚本中使用PyQGIS和自定义PyQGIS应用程序之间的唯一区别是第二个参数QgsApplication
。通过True
而不是False
表明我们计划使用GUI。
from qgis.core import *
# Supply the path to the qgis install location
QgsApplication.setPrefixPath("/path/to/qgis/installation", True)
# Create a reference to the QgsApplication.
# Setting the second argument to True enables the GUI. We need
# this since this is a custom application.
qgs = QgsApplication([], True)
# load providers
qgs.initQgis()
# Write your code here to load some layers, use processing
# algorithms, etc.
# Finally, exitQgis() is called to remove the
# provider and layer registries from memory
qgs.exitQgis()
现在,您可以使用QGIS API-加载图层并进行一些处理或使用地图画布启动GUI。
运行自定义应用程序
如果QGis库和Python模块不在加载路径中(比如:当前文件目录下,system32,path环境变量定义的路径),则需要告诉系统在哪里搜索QGIS库和适当的Python模块-否则Python会报错:
>>> import qgis.core
ImportError: No module named qgis.core
这可以通过设置PYTHONPATH
环境变量来解决。在以下命令中,<qgispath>
应将其替换为您的实际QGIS安装路径:
-
在Linux上:导出PYTHONPATH = / <qgispath> / share / qgis / python
-
在Windows上:设置PYTHONPATH = c:\ <qgispath> \ python
-
在macOS上:导出PYTHONPATH = / <qgispath> / Contents / Resources / 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库所在的目录添加到动态链接器的搜索路径来解决此问题:
-
在Linux上:export LD_LIBRARY_PATH = / <qgispath> / lib
-
在Windows:PATH = C:\ <qgispath> \ BIN; C:\ <qgispath> \应用\ <qgisrelease> \ BIN;%PATH% ,其中
<qgisrelease>
应用释放的你的目标(的类型替换例如qgis-ltr
,qgis
,qgis-dev
)
可以将这些命令放入引导脚本中,该脚本将负责启动。使用PyQGIS部署自定义应用程序时,通常有两种可能性:
-
要求用户在安装应用程序之前先安装QGIS。应用程序安装程序应查找QGIS库的默认位置,并允许用户设置路径(如果找不到)。该方法具有更简单的优点,但是它要求用户执行更多的步骤。
-
将QGIS与您的应用程序打包在一起。发布应用程序可能会更具挑战性,并且程序包会更大,但是可以避免用户下载和安装其他软件的负担。
两种部署模型可以混合使用。您可以在Windows和macOS上提供独立的应用程序,但是对于Linux,将GIS的安装留给用户及其包管理器来完成。
有关PyQt和SIP的技术说明
我们决定选择Python,因为它是脚本编写中最受欢迎的语言之一。QGIS 3中的PyQGIS绑定取决于SIP和PyQt5。使用SIP而不是使用更广泛的SWIG的原因是QGIS代码取决于Qt库。Qt(PyQt)的Python绑定是使用SIP完成的,这允许PyQGIS与PyQt无缝集成。
©版权所有2002-现在,QGIS项目 最近更新于2020年4月3日09:14。
使用Sphinx使用Read the Docs提供的主题构建。