Workshop "Mein erstes Python-Plugin" - HTW Dresden Fakultät Geoinformation Labor Geoinformatik
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
HTW Dresden Stand: 2021/06/01 Fakultät Geoinformation Labor Geoinformatik Workshop „Mein erstes Python-Plugin“
Inhaltsverzeichnis Inhaltsverzeichnis ....................................................................................................... 2 1 Ziel des Workshops ......................................................................................... 3 2 Allgemeiner Hinweis ........................................................................................ 3 3 Python-Integration in QGIS ............................................................................. 3 3.1 Die Python-Konsole ........................................................................................... 3 3.2 QGIS-Plugins ..................................................................................................... 4 3.2.1 Nutzung und Eigenschaften ............................................................................... 4 3.2.2 Installieren von Plugins in der QGIS-Oberfläche ................................................ 4 3.2.3 Installationspfade (Windows) ............................................................................. 4 4 Plugin erstellen ................................................................................................ 5 4.1 Der Plugin Builder .............................................................................................. 5 4.2 Workflow für Plugin Template ............................................................................ 6 4.3 Die Plugin Dateien ........................................................................................... 11 4.4 Anpassen der Ressourcen ............................................................................... 11 4.4.1 Compilieren des Resource-Files ...................................................................... 11 4.4.2 Erstellen der Plugin-Oberfläche ....................................................................... 12 4.5 Plugin Quelltext ................................................................................................ 14 Links …………………………………………………………………………………………..16 2
1 Ziel des Workshops Ziel ist die Erstellung eines (einfachen) QGIS Python-Plugins für eine Abfrage des freien No- minatim Suchdienstes. Das Plugin soll nicht im öffentlichem Plugin Repository veröffentlicht werden. Es sollen die folgenden Inhalte vermittelt werden: - Erstellung eines Plugin-Templates mit dem Plugin Builder - Erstellen einfacher Oberflächenelemente mit dem QT-Designer - Integration des Plugin-Quelltextes in das Template - Ansprache der erstellten Oberflächenelemente im Plugin - Senden eines Requests an die Nominatim API - Verarbeitung der Nominatim-Antwort - Erstellen eines Punkt-Layers - Darstellung von Punkten als Ergebnis der Nominatim-Anfrage 2 Allgemeiner Hinweis • Die in diesem Script verwendeten Verzeichnisnamen, Versionsnummern u.ä. sind den jeweiligen Gegebenheiten anzupassen. • Ist nach der QGIS-installation das Start-Menü unvollständig, kann QGIS über folgen- des Kommando gestartet werden (Installationspfad von QGIS muss angepasst wer- den, Anführungszeichen sind erforderlich): "C:\Program Files\QGIS 3.16\bin\qgis-ltr-bin.exe" 3 Python-Integration in QGIS Folgende Möglichkeiten zur Nutzung von Python in QGIS gibt es: - Nutzung der Python-Konsole zur Ausführung von Kommandos oder Scripts - Plugins - Python-Script, welches beim QGIS Start ausgeführt wird - Eigenständige Anwendungen, welche die QGIS Python API (PyQGIS) einbindet 3.1 Die Python-Konsole Limitationen: - Einzelbefehle oder zu ladende Scripts mit der Einschränkung - keine Oberflächenelemente wie z.B. Buttons, Eingabefelder usw. nutzbar 3
Nutzung: - Tastenkombination + + alternativ Menü Erweiterungen > Python-Konsole - Ist die Konsole geöffnet, kann mittels Schaltfläche Editor anzeigen ein Editorfenster geöffnet werden: Abbildung 1: QGIS Python-Konsole mit geöffnetem Editor 3.2 QGIS-Plugins 3.2.1 Nutzung und Eigenschaften - Erweiterung der QGIS-Funktionalität - Bedarfsweise inkl. Oberfläche - besteht aus mehreren Dateien (siehe 4.3 Die Plugin Dateien) 3.2.2 Installieren von Plugins in der QGIS-Oberfläche Über Menü Erweiterungen > Erweiterungen verwalten und installieren kann aus dem (vorein- gestellten) zentralen öffentlichen Plugin-Repository das entsprechende Plugin ausgewählt und installiert werden. Das hinzugefügte Plugin erscheint dann in als eigenes bzw. in einem vorhandenen QGIS-Menü oder als vorgefertigte Schaltfläche. Die Installation erfolgt hierbei im Windows Profil (siehe nächster Abschnitt, Punkt 1.). 3.2.3 Installationspfade (Windows) Jedes Plugin wird in einem eigenen Verzeichnis abgelegt. Dieses liegt jeweils unter 1. Für einen Nutzer im Windows-Profil unter C:\Benutzer\\ AppData\Roaming\QGIS\QGIS3\profiles\default\py- thon\plugins 4
2. Für mehrere Nutzer unter \apps\qgis\python\plugins Analog hierzu werden hier auch Plugins, welche nicht im zentralen Plugin-Repository von QGIS enthalten sind, abgelegt. 4 Plugin erstellen 4.1 Der Plugin Builder Der Plugin Builder unterstützt bei der Erstellung von QGIS-Plugins, indem er ein Template für alle zum Plugin gehörigen Dateien erstellt, welches dann nur noch mit eigenem Pro- grammcode angereichert und bei Bedarf angepasst werden muss. Der Plugin Builder ist selbst ein Plugin und muss zunächst installiert werden (siehe 3.2.2 Installieren von Plugins in der QGIS-Oberfläche). Zusätzlich ist das Plugin Plugin Reloader zu empfehlen, welches das erneute Laden des ei- genen Plugins nach Änderungen des Quellcodes vereinfacht. Der Plugin Reloader ist ein ex- perimentelles Plugin. Diese sind zunächst im Einstellungsdialog des Fensters Erweiterungen anzuschalten. Im Anschluss empfiehlt es sich, das Repositorium neu zu laden und dann kann der Plugin Reloader ebenfalls installiert werden. Abbildung 2: Einstellungsdialog für Erweiterungen Werden die beiden Plugins anschließend im QGIS-Menü Erweiterungen nicht angezeigt, sollte QGIS neu gestartet werden. 5
Hinweis: Kann generell das Plugin-Repository nicht angezeigt werden liegt dies sehr wahr- scheinlich an den Proxy-Einstellungen des Systems oder von QGIS. Folgende Lösungsmög- lichkeiten gibt es: - An der HTW: Kontrollieren Sie, ob der HTW-Proxy im QGIS konfiguriert ist, wenn nicht holen Sie dies nach: https://geoinformatik.htw-dresden.de/uebungen/v2021/vek- toranalyse/beginn_qgis/#proxy-server-konfigurieren-falls-noch-nicht-voreingestellt (QGIS-Neustart evtl. erforderlich). - Zuhause: Hier sollte weder in QGIS (siehe Link oben) noch im System ein Proxy ein- gestellt sein. Die Systemeinstellungen kontrollieren/ändern Sie mit Windows Suche > Eingabe: Proxyeinstellungen > bis Manuelle Proxyeinrichtung scrollen und diese aus- schalten. 4.2 Workflow für Plugin Template Nachzulesen sind die hier beschriebenen Schritte jeweils unter [3]. Die einzugebenden Parameter und Texte im Plugin-Builder sind den Gegebenheiten des je- weiligen Plugins anzupassen! - Start des Plugin Builders: Menü Erweiterungen > Plugin Builder > Plugin Builder - Eingabe des Plugin-Namens und der erforderlichen Informationen zum Plugin. Abbildung 3: Informationen zum Plugin 6
- Eingabe der ausführlichen Beschreibung zum Plugin (ist anzupassen!) Abbildung 4: Eingabe Beschreibung - Wahl des Plugin Typs und der Platzierung des Templates in der QGIS-Oberfläche Abbildung 5: Wahl Plugin Typ 7
- Wahl zusätzlicher Komponenten. Diese werden hier nur aus Zeitgründen abgewählt. Abbildung 6: Wahl Zusatzkomponenten - Eingabe der Informationen für die Veröffentlichung Abbildung 7: Angaben zur Veröffentlichung - Wahl des Ausgabeverzeichnisses. Hier ist jedes beliebige Verzeichnis, in welchem man Schreibrechte hat, wählbar. Das Plugin müsste dann evtl. in eines der Plugin- Verzeichnisse kopiert werden (siehe 3.2.3 Installationspfade (Windows)). Wir wählen daher direkt das QGIS-Plugins-Verzeichnis. 8
Abbildung 8: Auswahl Speicherort - Plugin-Pfad: C:\Users\\AppData\Roaming\QGIS\QGIS3\profi- les\default\python\plugins Abbildung 9: Plugin-Template generieren => Unter dem oben angegebenen Pfad wird das Plugin-Verzeichnis nominatim_demo (entspricht angegebenem Namen des Python-Moduls, siehe Abbildung 3) mit den er- forderlichen Plugin-Dateien als Template angelegt. - Im Anschluss wird das Resource-File resource.qrc compiliert. In diesem sind externe Ressourcen, hier nur das genutzte Plugin-(Standard)-Icon, angegeben. 9
Unter Windows läuft dieser Schritt teilweise jedoch auf einen Fehler, welcher das ma- nuelle Compilieren erforderlich macht (siehe 4.4.1 Compilieren des Resource-Files). Abbildung 10: Fehler beim Compilieren des Resource-Files - Im Folgenden Fenster sind alle wesentlichen Informationen und nächsten Schritte noch einmal zusammengefasst: Abbildung 11: Zusammenfassung 10
4.3 Die Plugin Dateien Abbildung 12: Übersicht Plugin-Dateien 4.4 Anpassen der Ressourcen Werden Media-Ressourcen wie z.B. das Plugin-Icon geändert, muss das Resource-File re- sources.grc neu compiliert werden. Dieser Schritt ist ebenso erforderlich, wenn beim Erstel- len des Plugins mit dem Plugin Builder eine entsprechende Fehlermeldung ausgegeben wurde. Zunächst tauschen wir das Standard-Plugin-Icon icon.png aus, behalten aber den Namen bei: Kopieren Sie von D:\\gdi\python die Datei osm.png in Ihr Plugin-Verzeichnis. Benennen Sie die Datei in icon.png um. Alternativ können Sie ein eigenes Bild wählen, welches als Plugin- Icon Verwendung finden soll (optional). 4.4.1 Compilieren des Resource-Files Schritte 1. Im Datei-Explorer Wechsel in das Plugin-Verzeichnis. 2. Öffnen einer Windows Eingabeaufforderung an dieser Stelle mittels + , alternativ + => cmd und anschließend mittels cd in das Plugin-Verzeichnis wechseln. 11
Abbildung 13: Windows Eingabeaufforderung im Plugin-Verzeichnis öffnen 3. Ausführen der folgenden Kommandos, wobei der Pfad C:\Program Files\QGIS 3.16 durch das jeweilige QGIS-Installationsverzeichnis zu ersetzen ist: a. "C:\Program Files\QGIS 3.16\bin\o4w_env.bat" b. "C:\Program Files\QGIS 3.16\bin\qt5_env.bat" c. "C:\Program Files\QGIS 3.16\bin\py3_env.bat" d. pyrcc5 -o resources.py resources.qrc Hinweis: Die Anführungszeichen sind erforderlich. Alternativ können Sie per Doppelklick die folgende Batch-Datei ausführen, in welcher die ge- nannten Kommandos bereits enthalten sind, müssen jedoch auch hier die Pfade anpassen: \\KFS1\Lehre\Lehrgebiete_Bachelor\6.Semester\G573_GI-Applikationsentwicklung\Py- thon\compile_resources_4_qgis_plugin.bat. 4.4.2 Erstellen der Plugin-Oberfläche Oberflächenelemente werden mit der Qt5-Bibliothek und dem entsprechenden QT Desingner erstellt. Schritte: 1. Start des QT.Designers: Windows Startmenü > Programme > QGIS 3.x.x > Qt Desig- ner with QGIS 3.x.x custom widgets (die Programmversion ist jeweils anzupassen). Alternativ: QGIS-Programmverzeichnis\bin\qgis-ltr-designer.bat 12
2. Öffnen der vorhandenen UI-Datei nominatim_demo_dockwidget_base.ui aus dem Plugin-Verzeichnis Abbildung 14: Startdialog des QT-Designers 3. Vorhandenes Label entfernen Abbildung 15: Platzhalter-Label entfernen 13
4. Element Line Edit hinzufügen > object name: tfAddress Abbildung 16: Qt Designer - Texteingabefeld erstellen 5. Push Button hinzufügen > objectName: btnStart, Beschriftung: Suche Adresse Abbildung 17: Qt Designer - Button erstellen 6. Qt-Datei speichern. 7. QGIS neu starten, Plugin installieren => Plugin sollte in der Iconleiste bzw. im Erwei- terungen-Menü erscheinen, sonst evtl. noch einmal neu starten. 8. Plugin testweise starten => Nominatim Demo Widget mit Eingabefeld und Button muss unten links erscheinen. 4.5 Plugin Quelltext Im nächsten Schritt wird aus dem Plugin-Verzeichnis die Datei nominatim_demo.py editiert. Hierzu öffnen Sie in QGIS Erweiterungen > Python-Konsole > Editor anzeigen > Script öff- nen > nominatim_demo.py auswählen. 14
Abbildung 18: Python-Editor im QGIS öffnen In dieser Python-Datei programmieren Sie nun die Funktionen Ihres Plugins. 1. Scrollen Sie zunächst ans Ende der Datei bzw. der Methode run(self). 2. Fügen Sie hier den folgenden Quelltext ein, welcher a. einen EventListener für den Klick auf den Button btnStart hinzufügt, damit die- ser eine Methode aufruft (hier: self.onSearchClicked) und b. das im Qt-Designer erzeugte Widget sichtbar macht. Achten Sie auf die erfor- derlichen Einrückungen: self.dockwidget.btnStart.clicked.connect(self.onSearchClicked) self.dockwidget.show() 3. Die eigentliche Funktionalität kommt dann in die Methode self.onSearchClicked. Die Deklaration der Methode erfolgt mit: def onSearchClicked(self): Auch die Einrückung beachten. 4. Es folgen die Funktionsaufrufe entsprechend der Aufgabenstellung. Hinweis: Eine Konsolenausgabe im Protokollfenster von QGIS, z.B. für Variablenwerte, reali- sieren Sie mittels des Kommandos QgsMessageLog.logMessage('Plugin gestartet','AddressSearchPlugin') => 'Plugin gestartet' … auszugebender Text, kann alternativ eine Variable sein (ohne '') => 'AddressSearchPlugin' … Name des Protokollfensters, frei definierbar. Nach jeder Änderung muss das Plugin mittels des Plugin Reloaders (Menü Erweiterungen oder ) neu geladen werden, damit alle Änderungen verfügbar sind. 15
Links [1] PyQGIS Kochbuch: https://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/in- dex.html [2] PyQGIS API: https://qgis.org/pyqgis/master/ [3] Homepage Plugin Builder: https://g-sherman.github.io/Qgis-Plugin-Builder/ 16
Sie können auch lesen