Tipps. Tricks.

Blog

VectorTiles • 27. Mai 2021

pg_tileserv – der PostGIS TileServer

pg_tileserv ist ein leichtgewichtiger und schneller TileServer nur für PostGIS. Die Software wurde in Go programmiert und im Januar 2020 in der ersten Version veröffentlicht.

Mit pg_tileserv wurde eine Zwischenschicht zwischen Datenbank und WebGIS-Applikation geschaffen. Die Tabellen in der Datenbank können so einfach und schnell als VectorTiles veröffentlicht werden.

Seit 2017 unterstützt PostGIS mit der Funktion ST_AsMVT die Ausgabe von Mapbox Vector Tiles (MVT). Darauf baut pg_tileserv auf. Download und Dokumentation sind auf GitHub zu finden.

Leichte Konfiguration

Die Konfiguration von pg_tileserv erfolgt allein über Datenbank- und Tabellenberechtigungen. Über die Angabe von Server, Datenbank und Benutzer, die beim Start des TileServers übergeben werden, wird definiert, auf welche Daten er zugreifen darf.

Es ist möglich, dass mehrere TileServer parallel laufen und auf unterschiedliche Datenbanken zugreifen können bzw. über unterschiedliche Benutzer gestartet werden. Zur Konfiguration dienen überschaubare Konfigurationsdateien – sogenannte .toml-Dateien.

Anwendung zur visuellen Ausgabe von Daten

Nachdem pg_tileserv erfolgreich konfiguriert und gestartet wurde, bietet der TileServer eine Anwendung zur Datenvisualisierung.

Zu allen Tabellen oder Abfragen mit Geodaten, auf die der TileServer zugreifen kann, gibt es eine einfache Vorschau-Ansicht zur Visualisierung der Daten – samt Sachdaten. In der Anwendung werden Kommentare, die in PostgreSQL zur Tabelle definiert wurden (z. B. als Beschreibung), automatisch übernommen.

Übersichten und Detailinformationen per VectorTile-Requests

Aber auch andere Softwares können mit pg_tileserv kommunizieren. Dies erfolgt über spezifische VectorTile-Requests.

Mit dem Aufruf der index.json (http://0.0.0.0:7800/index.json) wird eine Übersicht der zur Verfügung stehenden Themen ausgegeben (VectorTile-Layer-Schemata). Diese richten sich nach den Tabellen/Sichten mit Geodaten, für die dem Datenbankbenutzer eine Leseberechtigung vorliegt.

Zu jedem in der Ansicht angezeigten Thema gibt es eine Detail-URL (z. B. "detailurl": http://0.0.0.0:7800/public.buildings_a.json), über die der Client Informationen zum Tile-Layer erhält. Enthalten sind Informationen wie id, Beschreibung, Geometrietyp, BoundingBox, Zoomstufen und Attributspalten. Die id setzt sich dabei aus dem Datenbankschema und dem Tabellennamen (z. B. public.buildings_a) zusammen. Als wichtigste Information ist hier die Tile-URL referenziert. Diese kann in Clients wie z. B. QGIS verwendet werden, um das Thema einzubinden.

Einbindung in QGIS

Vektor-Kachel-Layer können in QGIS ab Version 3.16 leicht integriert werden. Im QGIS-Browser kann über "VectorTiles → Neue allgemeine Verbindung…" über die Tile-URL ein Thema eingebunden werden. Die Verbindung muss nur einmal angegeben werden, QGIS speichert die Information im Profil des Benutzers. Optional kann hier auch eine Stil-URL zur Anpassung der Darstellung angegeben werden.

Über F12 können in QGIS die Diagnose-/Entwicklungswerkzeuge eingeblendet werden. Es kann bei der Navigation in der Karte verfolgt werden, welche Requests an den TileServer geschickt werden.

Schließlich können Attributinformationen zu den Objekten über die Infoabfrage ausgegeben werden.

Weitere Features von pg_tileserv

Für gefilterte Anfragen akzeptiert pg_tileserv zusätzliche Parameter im Aufruf. So können beispielsweise Standardwerte überschrieben werden. Oder es können die Attributfelder, die ausgegeben werden sollen, eingeschränkt werden.

Beispiel für einen gefilterten Aufruf:
http://localhost:7800/public.ne_50m_admin_0_countries/{z}/{x}/{y}.pbf?limit=100000&properties=name,long_name

pg_tileserv kann auch PostgreSQL-Funktionen als Layer nutzen. Diese Möglichkeit ist sehr mächtig und kann die eigentliche Datenquelle vor dem Server verstecken.

Die Funktionen können sich in der Datenbank in jedem Schema befinden, sie müssen lediglich den Datentyp MVT bytea zurückgeben. In diesem Fall werden die Kacheln von der Funktion selbst erstellt und zurückgegeben.

Beispiele dazu finden sich in der pg_tileserv-Dokumentation.

Fazit

pg_tileserv ist eine einfache Lösung, um Vektordaten aus der PostgreSQL-Datenbank als VectorTiles zu veröffentlichen. Die Software fügt sich leicht in bestehende Architekturen ein – es lohnt sich, pg_tileserv auszuprobieren!

 

Weitere Beiträge, die Dich interessieren könnten:

 

Astrid Emde

Astrid Emde befasst sich seit vielen Jahren mit Geodaten und hat zahlreiche GIS-Projekte umgesetzt. Sie ist langjähriges Mitglied des Bonner WhereGroup-Teams und Dozentin der FOSS Academy. Beruflich und privat engagiert sie sich im FOSSGIS-Bereich und ist seit einigen Jahren im Vorstand der OSGeo aktiv.

Artikel teilen: