Workshop "Mein erstes Python-Plugin" - HTW Dresden Fakultät Geoinformation Labor Geoinformatik

Die Seite wird erstellt Angelika Berndt
 
WEITER LESEN
Workshop "Mein erstes Python-Plugin" - HTW Dresden Fakultät Geoinformation Labor Geoinformatik
HTW Dresden                                     Stand: 2021/06/01
Fakultät Geoinformation
Labor Geoinformatik

               Workshop „Mein erstes Python-Plugin“
Workshop "Mein erstes Python-Plugin" - HTW Dresden Fakultät Geoinformation Labor Geoinformatik
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
Workshop "Mein erstes Python-Plugin" - HTW Dresden Fakultät Geoinformation Labor Geoinformatik
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
Workshop "Mein erstes Python-Plugin" - HTW Dresden Fakultät Geoinformation Labor Geoinformatik
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
Workshop "Mein erstes Python-Plugin" - HTW Dresden Fakultät Geoinformation Labor Geoinformatik
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
Workshop "Mein erstes Python-Plugin" - HTW Dresden Fakultät Geoinformation Labor Geoinformatik
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
Workshop "Mein erstes Python-Plugin" - HTW Dresden Fakultät Geoinformation Labor Geoinformatik
-   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