Im letzten Artikel unserer Serie über den Druck von Online-Karten wollen wir den aktuellen Stand des Open-Source Tools MapFish Print beleuchten und einige Einblicke in die Funktionalitäten und zugrundeliegenden Technologien geben.

MapFish Print ist eine in Java geschriebene Backend-Lösung für verschiedene Anwendungsfälle, die vom Druck einzelner Karten bis hin zur Erstellung komplexer Berichte reichen. MapFish Print in der aktuellen Version 3.28.1 stellt eine der umfassendsten Drucklösungen im Web dar, die sich leicht in ein WebGIS integrieren lässt. Die aktuelle Version 3.28.1 von MapFish Print, die mehrere Runden von Bug Fixing durchlaufen hat, baut auf GeoTools für die Integration und das Styling von Geodaten mit JasperReports als Reporting Engine auf. Das Integrationsframework Spring macht die Anwendung leicht erweiterbar für neue Funktionen (“pluggable architecture”), während es GeoTools erlaubt, bei Bedarf zusätzliche Datentypen einzubinden. 

Um sicherzustellen, dass MapFish Print auf die bevorzugte Art und Weise betrieben werden kann, bieten wir insgesamt vier verschiedene Optionen für das Deployment von MapFish Print an. Für Testzwecke können wir das Deployment via Kommandozeile empfehlen, da die Anwendung so einfach und schnell zu bedienen ist. Für den Betrieb wird MapFish Print in der Regel als WAR Datei deployed, was einen stabilen Einsatz in Java-Servlet Umgebungen (z.B. Tomcat) ermöglicht. Zudem bieten wir ein Docker Image für die Einbindung von MapFish Print in Cloud-Umgebungen (z. B. Kubernetes) an, was insbesondere dann sinnvoll ist, wenn eine hohe Skalierbarkeit gefordert ist. Schließlich kann MapFish Print auch auf Quellcode-Ebene als Java-Bibliothek in ein Softwareprojekt integriert werden.

Um das Layout für einen Bericht zu konfigurieren, bietet MapFish Print maximale Flexibilität durch die JasperReports jrxml Datei (genaue Position aller Kartenelemente im Bericht) und durch weitere Parameter (z. B. Breite, Höhe, DPI usw.), die in einer auf dem Anwendungsserver gespeicherten yaml Datei festgelegt werden. Die Druckanforderung wird dann vom Client als JSON Objekt erzeugt und an den Server gesendet, der das PDF oder PNG rendert. 

MapFish Print - under the hood | © Camptocamp

 

Das Styling der Geodaten wird von GeoTools durchgeführt und entspricht dem SLD-Styling (Styled Layer Descriptor), dem offiziellen XML-Schema für das Styling von Geodaten, das vom Open Geospatial Consortium (OGC) herausgegeben wurde.
Alternativ dazu wird in MapFish Print auch ein benutzerdefiniertes JSON Styling angeboten, das mit dem von OpenLayers verwendeten Styling vergleichbar ist. Für JSON Styles steht eine bedingte Formatierung zur Verfügung, die es dem Anwender ermöglicht, schnell Regeln zu implementieren, um Teile der Daten unterschiedlich zu formatieren. 

Was die Datentypen betrifft, so unterstützt MapFish Print eine wachsende Anzahl häufig verwendeter Datentypen und Datendienste, die sowohl Vektordaten (GML, GeoJSON, WFS) als auch Rasterdaten (XYZ-Kacheln wie OSM, WMS, WMTS und GeoTIFF) umfassen. Alle Geodaten, die in Form eines Kartendienstes (WFS oder WMS) vorliegen, können einfach durch Laden des Dienstes in den Bericht integriert werden. Durch die Integration der JasperReports Engine ist es auch möglich, externe Datensätze aus separaten Datenbanken einzubinden. 

Am Ende dieser Serie über den Druck von Online-Karten können wir festhalten, dass MapFish Print eine Komplettlösung für das Erstellen von Ausdrucken einfacher Karten oder umfangreicher Berichte ist. MapFish Print unterstützt die gängigen Formate von geographischen Daten und bietet ein hohes Maß an Anpassungsmöglichkeiten. Abschließend möchten wir noch auf die aktuelle Dokumentation (http://mapfish.github.io/mapfish-print-doc/) und das Code-Repository von MapFish Print verweisen, das auf Github (https://github.com/mapfish/mapfish-print) verfügbar ist.

MapFish Print - under the hood | © Amt für Geoinformationen-Kanton Basel (Screenshot)

Karriere

Sie sind daran interessiert, in einer inspirierenden Umgebung zu arbeiten und sich unseren motivierten und multikulturellen Teams anzuschliessen?