天天看點

PyQGisCookbook--簡介(二)

簡介

本文檔既可以作為教程,也可以作為參考指南。盡管它沒有列出所有可能的用例,但是應該對主要功能進行了很好的概述。

  • Python控制台中的腳本
  • Python插件
  • QGIS啟動時運作Python代碼
    • startup.py

      檔案
    • PYQGIS_STARTUP環境變量
  • Python應用程式
    • 在獨立腳本中使用PyQGIS
    • 在自定義應用程式中使用PyQGIS
    • 運作自定義應用程式
  • 有關PyQt和SIP的技術說明

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

PyQGisCookbook--簡介(二)

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_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提供的主題建構。