Software-Tipps

QGIS Server: Ansprechende FeatureInfo-Ausgaben dank HTML-Templates

Geodaten als WMS veröffentlichen

Wer Geodaten im Web bereitstellen möchte, nutzt dafür häufig standardisierte OGC-Geodienste. Gerade zur reinen Kartendarstellung hat sich der WMS (Web Map Service) als weit verbreiteter Standard etabliert.

An einen WMS-Dienst kann eine GetMap-Anfrage gesendet werden, um einen bestimmten Kartenausschnitt z. B. als PNG-Bild zu erhalten:

Für diesen Blogbeitrag haben wir einen Beispiel-Dienst mit den Ländern der Welt erstellt (Quelle: www.naturalearthdata.com/).

Dienst-URL (GetCapabilities): schulung.foss.academy/cgi-bin/qgis_mapserv.fcgi

Ein typischer GetMap-Request sieht folgendermaßen aus: schulung.foss.academy/cgi-bin/qgis_mapserv.fcgi

und liefert uns diese Antwort:

Darüber hinaus bietet der WMS die Möglichkeit, für einen bestimmten Punkt auf der Karte die hinterlegten Sachdaten abzufragen – mittels eines sogenannten GetFeatureInfo-Requests, welcher z. B. so aussehen kann:

schulung.foss.academy/cgi-bin/qgis_mapserv.fcgi

In diesem Fall gibt die Anfrage folgende Antwort zurück:

Im Standardfall sieht diese Antwort allerdings recht schlicht und wenig ansprechend aus. In diesem Blogartikel zeigen wir, wie sich die FeatureInfo-Antwort beim QGIS Server mithilfe von HTML individuell gestalten lässt.

Der Unterschied zum MapServer

Wer bereits mit dem MapServer gearbeitet hat, kennt die Vorgehensweise: Separate HTML-Template-Dateien werden auf dem Server abgelegt und deren Pfade in der jeweiligen Mapfile-Konfiguration referenziert.

Beim QGIS Server funktioniert das etwas anders: Es werden keine zusätzlichen Template-Dateien im Dateisystem benötigt. Stattdessen wird das HTML-Template direkt im QGIS-Projekt definiert.

Das fügt sich nahtlos in die grundsätzliche Arbeitsweise des QGIS Servers ein: Es wird ein QGIS-Projekt mit dem gewünschten Kartenstyling erstellt, der QGIS Server liest dieses Projekt aus und stellt daraus einen WMS-Dienst bereit – mit exakt derselben Darstellung wie im Desktop-Projekt.

Das HTML-Template anlegen: Der Kartenhinweis (Map Tip)

Für das FeatureInfo-Template nutzen wir eine Grundfunktionalität von QGIS, den sogenannten Kartenhinweis (englisch: Map Tip). Dieser findet sich in den Layereigenschaften (Rechtsklick auf einen Layer > Eigenschaften) im Reiter "Anzeige":

Dort gibt es ein Textfeld “HTML-Kartenhinweis”, in dem wir unseren HTML-Code hinterlegen können. Dabei verwenden wir Standard-HTML-Syntax. Um dynamisch die Werte einzelner Attributfelder des Layers einzubinden, nutzen wir die QGIS-Expression-Syntax:

<h3>[% "name_de" %]</h3>
            <p><b>Einwohner:</b> [% "POP_EST" %]</p>
            <p><b>Fläche: </b>[% round($area/1000000) %] km²</p>

→ Hinweis: Innerhalb der “[% %]”-Klammern handelt es sich um vollwertige QGIS-Expressions!

Feldnamen werden dabei in Anführungszeichen gesetzt. Es können hier aber nicht nur einfache Feldwerte ausgegeben, sondern auch Berechnungen durchgeführt oder Bedingungen formuliert werden – wie im oben gezeigten Beispiel “[% round($area/1000000) %]” für die Berechnung der Landesgröße in Quadratkilometern. Da es sich um vollwertiges HTML handelt, lassen sich so auch Links zu Webseiten ("[%'<a href="https://en.wikipedia.org/... </a>'%]") oder auch ganze Bilder ("[%'<image src="https://www.countryflags.com/... >'%]") einfügen.

Sobald gültiges HTML eingegeben wurde, erscheint rechts neben dem Eingabefeld eine Live-Vorschau des Templates:

Das HTML kann nun so lange angepasst werden, bis die Darstellung den eigenen Wünschen entspricht.

→ Tipp: Die Kartenhinweise lassen sich auch direkt im QGIS-Desktop testen, ohne den Server bemühen zu müssen. Dazu muss in der Attributwerkzeugleiste die kleine Sprechblase („Kartenhinweise anzeigen“) aktiviert werden. Anschließend wird bei der Mausbewegung über ein Objekt der konfigurierte Kartenhinweis als kleines Popup eingeblendet.

Das QGIS-Projekt muss nun gespeichert und auf den Server gelegt werden, sodass der QGIS Server die Projektdatei auslesen kann.

Den Kartenhinweis per GetFeatureInfo abrufen

Damit der QGIS Server den konfigurierten Kartenhinweis auch tatsächlich als FeatureInfo-Antwort ausliefert, muss ein zusätzlicher Parameter im GetFeatureInfo-Request angegeben werden: “WITH_MAPTIP”

Dieser Parameter weist den QGIS Server an, den Kartenhinweis zur Darstellung des FeatureInfo-Ergebnisses zu verwenden oder auch nicht. Die drei möglichen Werte im Überblick:

- “WITH_MAPTIP=FALSE” → Der Kartenhinweis wird ignoriert. Es wird die Standard-Ausgabe mit allen Attributen geliefert (ungestylt, Standardwert).

- “WITH_MAPTIP=TRUE” → Es wird eine kombinierte Ausgabe geliefert: alle Attribute und zusätzlich der Kartenhinweis.

- “WITH_MAPTIP=HTML_FI_ONLY_MAPTIP” → Es wird nur der Kartenhinweis geliefert – ideal für eine vollständig selbst gestaltete Darstellung.

Für unseren Anwendungsfall – ein sauber gestyltes FeatureInfo-Ergebnis – empfiehlt sich die Verwendung von “WITH_MAPTIP=HTML_FI_ONLY_MAPTIP”.

Weitere Details zu diesem und weiteren Parametern finden sich in der offiziellen QGIS Server-Dokumentation: docs.qgis.org/3.44/de/docs/server_manual/services/wms.html

Den Parameter im GIS-Client hinterlegen

Damit der Parameter nicht bei jeder Anfrage manuell angegeben werden muss, kann er als sogenannter vendor-specific Parameter im jeweiligen GIS-Client hinterlegt werden:

Beispiel: Mapbender
In der Mapbender Administration kann ein WMS für eine Anwendung konfiguriert werden. Unter Vendor specifics können hier zusätzliche Parameter definiert werden, die bei jedem Request an den Dienst mitgeschickt werden. In unserem Fall ist das der Schlüssel “WITH_MAPTIP” mit dem Wert “HTML_FI_ONLY_MAPTIP”, wobei das Format der GetFeatureInfo-Anfrage auf “text/html” gesetzt werden muss:

Ergebnis in der Mapbender-Kartenansicht:

Im QGIS können wir solche vendor-specifics direkt in der Datenquellenverwaltung als angehängten Parameter mit angeben, wenn wir die Verbindung zu einem WMS-Dienst konfigurieren. Zusätzlich müssen wir dabei die Checkbox “Gemeldete GetFeatureInfo-URI ignorieren” setzen:

Um die manuelle Eingabe solcher vendor-specific Parameter im GIS-Client zu vermeiden, können wir auch eine Anzeige-URL direkt in unserem QGIS Server-Projekt setzen, in welcher wir diesen Parameter direkt mit anhängen. Die Einstellung ist unter Projekt > Eigenschaften > QGIS Server > WMS zu finden:

In diesem Fall setzen wir dort unsere URL ein als: schulung.foss.academy/cgi-bin/qgis_mapserv.fcgi;

Wird der so konfigurierte Dienst nun z. B. selbst im QGIS als WMS-Dienst geladen, wird direkt der Map Tip als Objektinformation ausgegeben:

Bekannte Einschränkungen und Hinweise

1: Mindestversion: Der Wert “HTML_FI_ONLY_MAPTIP” wurde erst mit QGIS 3.36 eingeführt. Siehe dazu den Changelog QGIS 3.36.

Bitte stellen Sie sicher, dass Ihre QGIS Server-Version mindestens 3.36 oder neuer ist.

2: Versionskompatibilität: Es kann zu Problemen kommen, wenn die QGIS-Desktop-Version, mit der das Projekt erstellt wurde, stark von der QGIS Server-Version abweicht. Versuchen Sie nach Möglichkeit, gleiche oder ähnliche Versionen zu verwenden.

3: Projektkonfiguration prüfen: In QGIS können Sie unter Projekt > Eigenschaften > QGIS Server > WMS > Testkonfiguration "Starten“ prüfen, ob Ihr Projekt korrekt für die Verwendung als Dienst konfiguriert ist. Die Meldung "Projekt ist gültig." zeigt an, dass alles in Ordnung ist.

Fazit

Mit dem Kartenhinweis-Feature des QGIS Servers lassen sich ansprechend gestaltete FeatureInfo-Antworten erstellen, ohne separate Template-Dateien zu definieren. Das entsprechende HTML wird komfortabel direkt im QGIS-Projekt gepflegt und kann dank der Live-Vorschau schnell überprüft und angepasst werden. In Kombination mit dem Parameter “WITH_MAPTIP=HTML_FI_ONLY_MAPTIP” beim FeatureInfo-Request erscheint die individuell konfigurierte HTML-Ausgabe.

Für alle, die es selbst ausprobieren möchten – das hier ist der vollständige HTML-Code, der in diesem Blogartikel verwendet wurde:

<style>
.feature-info {
    font-family: Arial, sans-serif;
    font-size: 0.9em;
    padding: 10px;
    background-color: #f9f9f9;
    border-left: 4px solid #b11e40;
}
.feature-info h3 {
    margin: 0 0 10px 0;
    color: #b11e40;
}
.feature-info p {
    margin: 5px 0;
}
</style>
<div class="feature-info">
            <h3>[% "name_de" %]</h3>
            <p><b>Einwohner:</b> [% "POP_EST" %]</p>
            <p><b>Fläche: </b>[% round($area/1000000) %] km²</p>
</div>

Über den Autor

Steckbrief

Während ihres Studiums der Geophysik und Geoinformatik an der TU Bergakademie Freiberg lernte Annika Fröde den Umgang mit vielfältigen Geodaten kennen. Seit 2022 ist sie bei der WhereGroup am Standort Berlin als GIS-Expertin angestellt, wo sie an umfangreichen GIS-Projekten für verschiedene Kunden arbeitet.

Annika Fröde WhereGroup