PyQGisCookbook--简介(二)


简介

本文档既可以作为教程,也可以作为参考指南。尽管它没有列出所有可能的用例,但是应该对主要功能进行了很好的概述。

在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控制台”菜单中打开它:

../../_images/console.png

QGIS 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代码。

  1. 创建一个startup.py脚本

  2. 设置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_coreqgis_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-ltrqgisqgis-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提供的主题构建。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值