Protomaps als Open-Source-Alternative zu Mapbox und Konsorten
Protomaps ist ein Open-Source-Ökosystem zum Erstellen, Speichern und Ausliefern maßgeschneiderter digitaler Karten, dessen Fähigkeiten deutlich über die der teuren kommerziellen Konkurrenz hinausgehen. Den Markt für digitale Kartendienste dominieren bislang proprietäre Anbieter wie Mapbox – mit hohen Lizenzgebühren, eingeschränkter Kontrolle über die Daten und einem starken Vendor-Lock-in. Doch mit Protomaps (Abbildung 1) gibt es längst eine leistungsfähige Open-Source-Alternative, die zahlreiche Anwendungsfälle abdeckt. Im Folgenden führen wir Sie kurz in das Dateiformat Protomaps [1] sowie die wichtigsten Unterschiede zu herkömmlichen Raster- oder proprietären Tile-Diensten ein. Anschließend sehen wir uns den kompletten Tool-Stack von Protomaps näher an. Das reicht von den Open-Source-Datensätzen von OpenStreetMap [2] über das Erstellen effizienter Tiles bis hin zu der Bereitstellung und der Integration in gängige Frontend-Bibliotheken wie MapLibre [3] und Leaflet [4]. Anhand praktischer Beispiele demonstrieren wir, wie Sie eigene Tiles generieren und selbst hosten können. Außerdem stellen wir Ihnen sinnvolle Anwendungsfälle für Protomaps vor, die die wichtigsten Vorteile gegenüber Mapbox verdeutlichen: Kostenfreiheit, Datenkontrolle und Offline-Fähigkeit. Außerdem nennen wir Alternativen für Anwendungsfälle, die keine großen, webbasierten Karten erfordern. Abschließend bieten wir einen kurzen Ausblick auf weitere Entwicklungen im Ökosystem der Open-Source-Karten. Was ist Protomaps? Protomaps ist ein Open-Source-Ökosystem zum Erstellen, Speichern und Ausliefern von Vector Tiles, dem modernen Standard für digitale Karten. Während herkömmliche Kartendienste wie Mapbox [5] ihre Daten als proprietären Service vermarkten, liefert Protomaps eine komplette Lösung, um Karten selbst bereitzustellen. Die Rohdaten werden aus OpenStreetMap (OSM [6]) eingelesen, in das effiziente PMTiles-Format transformiert und die Resultate über einen leichtgewichtigen HTTP/2-Server an Endgeräte verteilt. Das Protomaps-Projekt wurde von Brandon Liu (@bdon [7]) ins Leben gerufen, der auch weiterhin die Hauptverantwortung für die Pflege trägt. Die Finanzierung des Projekts übernahm der NGI0 Core Fund [8]. Heute trägt Github Sponsors die Kosten für die Infrastruktur, wie den Betrieb der API und des Cloud-Speichers. Ein Protomaps-Service besteht aus drei Hauptkomponenten, die das Generieren, Speichern und Ausliefern des Kartenmaterials übernehmen (siehe Tabelle „Hauptkomponenten eines Protomaps-Service“). Dabei setzt Protomaps das Unix-Paradigma „Mache nur eine Sache und mache sie gut“ um. Als zentrales Element dient das PMTiles-Format, für Speicher und Webserver kommen andere bekannte Technologien zum Einsatz. Komponente Zweck PMTiles erstellen Einlesen von Geodaten und Generieren der Tiles, beispielsweise in einer CI/CD-Pipeline. PMTiles Store Persistente Speicherung der »*.pmtiles«-Dateien etwa auf einer S3-kompatiblen Speicherplattform, die HTTP Range Requests [48] und Cross-Origin Resource Sharing (CORS [49]) unterstützt. PMTiles-Server HTTP/2-basierter Webserver, der Caching und Range Requests unterstützt, beispielsweise Caddy oder Nginx. Datengrundlage PMTiles ist ein Einzeldatei-Archivformat für Pyramiden aus gekachelten Daten. Bei den gekachelten Daten, die sich über Z/X/Y-Koordinaten adressieren lassen, kann es sich um kartografische Basiskarten, Fernerkundungsdaten, JPEG-Bilder oder anderes handeln. PMTiles arrangiert die Kacheln und Verzeichnisse so, dass das Verschieben und Zoomen mit minimalem Aufwand gelingt. Da es sich jedoch um ein schreibgeschütztes Format handelt, ist es nicht möglich, ein Archiv zu aktualisieren, ohne die gesamte Datei neu zu schreiben. Die bereitgestellten Basiskarten [9] verwenden Daten von OSM und Natural Earth [10] zum Generieren der »*.pmtiles«-Dateien. Das Format enthält jedoch nicht alle Daten und Tags aus OSM. Es versucht, für eine Verwendung als allgemeine Karte ein Gleichgewicht zwischen Kachelgröße und Vollständigkeit herzustellen. Werkzeuge Mit Protomaps Basemaps [11]