簡介
本文檔既可以作為教程,也可以作為參考指南。盡管它沒有列出所有可能的用例,但是應該對主要功能進行了很好的概述。
- 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控制台”菜單中打開它:

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代碼。
- 建立一個startup.py腳本
- 設定
環境變量值為運作Python檔案PYQGIS_STARTUP
startup.py
檔案
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提供的主題建構。