Protomaps – kostenlose Open-Source-Weltkarte
(protomaps.com)- Bietet Teams, für die Serverbetrieb und Karten-API-Kosten bei der Bereitstellung von Webkarten eine Belastung sind, eine Alternative zum Self-Hosting als einzelne statische Datei
- Frontend-Entwickler können Vektor-Kartentiles allein mit Cloud Storage und HTTP range requests einfach und kostengünstig bereitstellen
- PMTiles ist ein offenes Format für Raster- und Vektor-Basemaps sowie Custom Layers und unterstützt MapLibre-Plugin, CLI und CDN-Integrationen
- Protomaps pflegt Basemap-Tilesets auf Basis von OpenStreetMap und weiteren Open-Data-Quellen, damit sich OSM einfach in interaktiven Webkarten einsetzen lässt
- Nichtkommerzielle Nutzung ist kostenlos; für kommerzielle Nutzung oder eine verwaltete Basemap-Tile-API ist die Teilnahme als GitHub Sponsor erforderlich
Karten per Self-Hosting als einzelne Datei
- Protomaps ist eine kostenlose, anpassbare Karte, mit der sich Weltkarten als einzelne statische Datei bereitstellen lassen
- Sie kann in Cloud Storage hochgeladen und genutzt werden; wer Erfahrung mit S3 hat, kann interaktive Karten im globalen Maßstab veröffentlichen
- Entwickelt, damit Frontend-Entwickler Karten ohne separate Serverkonfiguration selbst hosten können
- Vektor-Kartentiles werden mithilfe von HTTP range requests einfach und günstig bereitgestellt
- Als Einstiegsmaterial stehen Get Started und ein quick start tutorial bereit
PMTiles und der Aufbau von Karten
- Die Beispiele zeigen eine Minimalkonfiguration, mit der sich nur mit HTML + JS eine Basemap und Daten-Overlays erstellen lassen
- PMTiles ist eine Spezifikation für ein Tile-Pyramidenarchiv in Hilbert-Reihenfolge und kann Geodaten wie Raster- und Vektor-Basemaps sowie Custom Layers enthalten
- Bietet ein MapLibre plugin, ein command line interface und CDN integrations
- Details zum Format finden sich in der PMTiles-Dokumentation
Basemaps auf Basis von OpenStreetMap
- Protomaps pflegt Basemap-Tilesets, die aus OpenStreetMap und weiteren Open-Data-Quellen erstellt werden
- Sie können als einfacher Weg dienen, OSM in interaktiven Webkarten einzusetzen
- Die vollständige Planet-Datei kann kostenlos heruntergeladen werden, oder per CLI lässt sich nur die gewünschte Region extrahieren
- Unter Download your area kann die Extraktion einer Region gestartet werden
- Nutzer, die große Dateien nicht selbst verwalten möchten, können eine CDN-Cache-basierte Basemap-Tile-API verwenden
- Nichtkommerzielle Nutzung ist kostenlos
- Kommerzielle Nutzung erfordert GitHub Sponsor
- Die Maps API kann im Code verwendet werden
Nutzungsszenarien
- Unternehmen können mit bestehendem Cloud Storage Full-Stack-Kontrolle über eingebettete Karten auf ihren Websites erhalten und monatliche Kartenkosten von mehreren hundert Dollar auf Cent-Beträge senken
- Newsrooms können interaktive Storys mit langlebigen, individuell angepassten Karten erstellen, ohne von Drittanbieter-APIs abhängig zu sein
- In der Wissenschaft lassen sich mit PMTiles Klima- und Umweltdaten im globalen Maßstab visualisieren und mit Open-Source-Tools sowie Karten-Frontends Daten-Explorer bauen
- Behörden können die Abhängigkeit von Big Tech reduzieren, Bürger-Privatsphäre und DSGVO-Compliance wahren und eine kostenlose Alternative zu proprietären GIS nutzen
2 Kommentare
Protomaps - Mein eigenes Kartensystem mit OpenStreetMap erstellen
Protomaps - Serverless-Karten als Open Source veröffentlicht
Meinungen auf Hacker News
Ich habe mit dem pmtiles-Tool von Protomaps eine Karte erstellt, die nur den Bereich um Half Moon Bay südlich von San Francisco ausschneidet.
Das aktuelle Go-Binary für macOS habe ich von https://github.com/protomaps/go-pmtiles/releases heruntergeladen, und die ungefähre Bounding Box habe ich über http://bboxfinder.com/#37.373977,-122.593346,37.570977,-122.... ermittelt.
Der ausgeführte Befehl war
pmtiles extract https://build.protomaps.com/20231023.pmtiles hmb.pmtiles \ --bbox=-122.593346,37.373977,-122.400055,37.570977, und als ich die entstandene 2 MB große hmb.pmtiles in die „Drop Zone“ auf https://maps.protomaps.com/ gezogen habe, erhielt ich eine detaillierte Karte, die sich bis auf die Ebene von OpenStreetMap-Metadaten und Gebäudeumrissen hineinzoomen ließ.Dass das mit 2 MB möglich ist, ist wirklich beeindruckend; die Datei liegt hier: https://gist.githubusercontent.com/simonw/3c1a5358ca8f782f13...
Normalerweise bettet man Google Maps ein, aber oft reicht eine Karte der näheren Umgebung, und das dürfte in vielen Fällen günstiger sein.
Da Nutzer ohnehin nie die gesamte Datei herunterladen müssen, ist das ziemlich cool, und ich freue mich darauf, eine Karte in eine statische Website einzubauen.
Die verlinkte pmtile-Datei funktioniert, meine selbst erstellte kleinere Datei aber nicht. Trotzdem ist das Grundkonzept, eine Karte für ein Projekt zu bekommen, hervorragend.
Ich nutze Mapbox intensiv, seit ich Alpha-Zugang zu Tilemill bekommen habe, und aus meiner Sicht ist das der wichtigste Beitrag im Bereich offener Karten seit Vektorkacheln und Mapbox GL / Map GL.
Mapbox hatte mit MTS zwar die Tür zum Tile-Backen offengelassen, aber es war zwar leistungsfähig, zugleich aber zu kompliziert und zu teuer. Mit Tippecanoe konnte man Tiles backen, doch das Hosting von Vektorkacheln blieb ein Ärgernis; mit PMTiles kann Vektorkachel-Hosting einfacher und bequemer als bei Mapbox werden und um mindestens eine Größenordnung günstiger sein.
Das gilt besonders, wenn man keine ausgefallenen Projektionen oder 3D-Unterstützung braucht und MapLibre ausreicht. Felt scheint ebenfalls einer der größeren Dienste zu sein, die intern einen PMTile-Ansatz verwenden, und es ist großartig, dass weiter in Tippecanoe investiert wird. Da sich der Fokus von Mapbox offenbar in Richtung Fahrzeugnavigation verlagert, ist es erfreulich, dass disruptive Innovation aus einer neuen Ecke kommt; noch erstaunlicher ist, dass sie von einem Ein-Personen-Team stammt.
Das Aufkommen von PMTiles dürfte zusammen mit der Unterstützung räumlicher Abfragen in DuckDB viele Innovationen ermöglichen. Wenn man große GeoParquet-Dateien abfragen und verarbeiten und sie dann als schnell gebackene PMTiles streamen kann, eröffnet das ziemlich leistungsfähige Anwendungsszenarien.
gpq convert Cairo_Governorate.parquet --to=geojson | tippecanoe Cairo.geojson -o Cairo.pmtileshttps://cloudnativegeo.org/blog/2023/10/where-is-cog-for-vec...
https://github.com/planetlabs/gpq
Ich lese in einer Online-Community von Entwicklerinnen und Entwicklern im Journalismus mit; dort sehen einige in PMTiles eine Möglichkeit, die Kosten für das Selbsthosten von Karten-Tiles mit eigenen Styles zu senken.
Als Beispiel lohnt sich „How The Post is replacing Mapbox with open source solutions“ https://www.kschaul.com/post/2023/02/16/how-the-post-is-repl....
Für alle, die es interessiert: Die Größe der aus OSM abgeleiteten Beispiel-PMTile-Datei
protomaps-basemap-opensource-20230408.pmtilesbeträgt 103 GB.https://docs.protomaps.com/basemaps/downloads
Es wäre schön, wenn man für tägliche, wöchentliche und monatliche Basisdateien nur die Änderungen herunterladen und anwenden könnte.
Interessant ist der Punkt: „Die Google Maps API hat zwar ein großzügiges kostenloses Kontingent, aber sobald man 30.000 Kartenaufrufe überschreitet, werden die Gebühren hoch. Protomaps wurde von Anfang an als selbst betriebene Lösung konzipiert und läuft als 100 % statisches Backend auf Cloud Storage, sodass nur Speicher- und Übertragungskosten anfallen. Bei mittlerer Nutzung kann das im Bereich weniger Cent liegen.“
Ich würde gern die empfohlene Hosting-Konfiguration, einen Kostenvergleich mit Google Maps und den Punkt sehen, an dem sich die Kostenlinien schneiden.
Wenn die Karte nicht zu 100 % aktuell sein muss und nur in einer bestimmten Region genutzt wird, wirkt das wie ein wirklich attraktiver Ansatz fürs Self-Hosting. Einmal im Jahr die Datei „neu kompilieren“ und ins statische Datei-Hosting hochladen – das wäre wohl ein einfacher Ablauf mit kaum externen Abhängigkeiten.
Nachtrag: Ich habe den offiziellen Download-Link[1] für die ganze Welt gefunden; er liegt bei etwas über 100 GB. Damit lautet die Antwort auf meine Frage wohl „einige hundert MB bis ein paar GB“, und das scheint völlig in Ordnung zu sein.
[1] https://docs.protomaps.com/basemaps/downloads
Wenn man die Protomaps-Dokumentation liest, wird dort beschrieben, wie man Requests im Cloudflare CDN cached; damit bezahlt man jeden Tile-Request nur einmal pro Cache-Zeitraum. Ziemlich günstig.
Der Titel einer früheren Protomaps-Einreichung lautete „Serverless maps at 1/700 the cost of Google Maps API“.
Protomaps-Gründer Brandon war vor ein paar Monaten im Geomob-Podcast zu Gast: https://thegeomob.com/podcast/episode-176
Für mich ist der interessanteste Teil PMTiles.
„PMTiles ist ein Ein-Datei-Archivformat für Pyramiden aus Tile-Daten. PMTiles-Archive können auf Storage-Plattformen wie S3 gehostet werden und ermöglichen kostengünstige, wartungsfreie Kartenanwendungen.“
„PMTiles ist ein universelles Format für Tile-Daten, die über Z/X/Y-Koordinaten adressiert werden. Es kann unterschiedliche Daten enthalten, etwa Vektor-Tiles für Basemaps, Fernerkundungsbeobachtungen oder JPEG-Bilder.“
„PMTiles-Reader verwenden HTTP-Range-Requests, um nur die benötigten Tiles oder Metadaten aus einem PMTiles-Archiv bei Bedarf abzurufen.“
„Die Anordnung von Tiles und Verzeichnissen ist so gestaltet, dass beim Verschieben sowie beim Hinein- und Herauszoomen die Zahl zusätzlicher Requests minimiert wird.“
https://docs.protomaps.com/pmtiles/
Ich habe täglich eine CSV-Datei abgerufen, sie in Vektor-Tiles umgewandelt, mit S3 synchronisiert und dann auf einer mapbox-gl-Karte angezeigt; der größte Kostenfaktor waren dabei die S3-Dateioperationen. Um die Kosten zu senken, habe ich stark geclustert und die Zahl der Tiles auf etwa 75.000 reduziert, aber bei der gewünschten Aktualisierungsfrequenz lagen allein die S3-Operationskosten bei 500 $ pro Monat.
Jetzt verarbeite ich die Dateien zu einer einzigen PMTiles-Datei und verteile nur noch diese eine Datei, wodurch die Kosten auf wenige Cent gesunken sind.
Das hat die Möglichkeiten für öffentliche Karten enorm erweitert; falls es dich interessiert, findest du hier die gesamten kanadischen Hotspot-Daten für 2023: https://lens.pathandfocus.com
Der frühere Ansatz auf der Vektorseite bestand entweder aus sehr vielen kleinen Dateien oder aus einer großen Datei, die ein Frontend zum Ausliefern einzelner Tiles brauchte.
Jetzt kann man auf solider Hardware einen OSM-Dump in wenigen Minuten in eine Basemap auf Länderebene und in wenigen Stunden auf Kontinentebene umwandeln und sie anschließend mit einem eigenen Stylesheet direkt über einen normalen Webserver hosten.
Die Kombination aus Maplibre[1] + PMTiles + tippecanoe[2] von Felt ist hervorragend für selbst gehostete Webkarten, wenn man damit leben kann, an die Web-Mercator-Projektion gebunden zu sein.
Fast alle Geodaten-Quellen lassen sich mit GDAL[3] und tippecanoe in
.pmtilesumwandeln:(.shp .gpkg ...) | ogr2ogr -> .geojson | tippecanoe -> .pmtilesFür OpenStreetMap-Daten gibt es planetiler[4], außerdem openmaptiles[5]-Styles, die man zusammen mit Maplibre verwenden kann.
Mit dieser Kombination hat man einen guten Ausgangspunkt für eine Open-Source-Datenpipeline, die sich für ein paar Cent auf AWS S3+CloudFront oder Cloudflare R2 hosten lässt.
[1] https://maplibre.org/
[2] https://github.com/felt/tippecanoe
[3] https://gdal.org/
[4] https://github.com/onthegomap/planetiler
[5] https://openmaptiles.org/styles/
Nebenbei: Ich finde die Dokumentation zu GDAL/ogr2ogr ziemlich schwer lesbar; als Einstiegsbeispiel kann man sich einen Befehl wie diesen ansehen:
ogr2ogr -f GeoJSON counties.json -t_srs EPSG:4326 -nln counties -sql "SELECT STATEFP, COUNTYFP, NAME FROM tl_2022_us_county" /vsizip/tl_2022_us_county.ziphttps://census.gov/geographies/mapping-files/…
Ich habe schon zu diesem Projekt beigetragen und wir nutzen es im Unternehmen auch in Produktion.
Es ist wirklich gut, Brandon ist sehr freundlich, und ich bin dankbar für all die Arbeit, die bisher hineingeflossen ist.
Mit der Bereitstellung serverloser Karten auf Basis von PMTiles habe ich ziemlich gute Ergebnisse erzielt.
Wenn ihr an einem Deployment auf AWS CloudFront/Lambda@Edge/S3 interessiert seid, schaut euch https://github.com/serverlessmaps/serverlessmaps an.