- MapLibre Tile (MLT) ist ein neues Vektor-Kachelformat der nächsten Generation, das als Ersatz für das bisherige Mapbox Vector Tile (MVT) entwickelt wurde, um die Effizienz bei der Verarbeitung großer Geodatenmengen zu steigern
- Es bietet eine bis zu 6-fach bessere Komprimierung und schnelle, SIMD-basierte Decoding-Performance, wodurch Speicherbedarf, Latenz und Cache-Effizienz verbessert werden
- Künftig ist es für 3D-Koordinaten (Höhe), GPU-basierte Verarbeitung, komplexe Datentypen, lineare Referenzierung und m-values erweiterbar
- Es kann derzeit sofort in MapLibre GL JS und MapLibre Native verwendet werden; unterstützt werden Demo-Kacheln, ein Konvertierungsserver und die Erzeugung über Planetiler
- Das Format wurde in Zusammenarbeit von Open-Source-Community, Unternehmen und Wissenschaft entwickelt und mit Förderung von Microsoft und AWS fertiggestellt
Einführung in MapLibre Tile
-
MapLibre Tile (MLT) ist ein Nachfolgeformat von [Mapbox Vector Tile(MVT)] und wurde von Grund auf neu entwickelt, um die stark wachsende Menge an Geodaten und komplexe Quellformate der nächsten Generation zu bewältigen
- Es ist darauf ausgelegt, die Leistung moderner Hardware und Grafik-APIs zu nutzen, sodass 2D- und 2.5D-Basiskarten im Planetenmaßstab mit hoher Performance verarbeitet und gerendert werden können
- Die aktuelle Implementierung ist funktional gleichwertig zu MVT, wurde jedoch bei Leistung und Effizienz verbessert
-
Wichtige technische Verbesserungen
- Verbesserte Komprimierung: bei großen Kacheln bis zu 6-fach besser, durch ein spaltenorientiertes Layout und rekursive leichtgewichtige Kodierung
- Verbesserte Decoding-Performance: schnelle und schlanke Kodierungsstruktur, die sich mit SIMD-/Vektorisierungsbefehlen kombinieren lässt
- Dadurch ergeben sich geringere Latenz, niedrigere Speicher- und Übertragungskosten und eine bessere Cache-Nutzung
Zukünftige Erweiterbarkeit
-
MLT wurde mit Blick auf die Unterstützung folgender künftiger Funktionen entworfen
- Erweiterte Unterstützung für 3D-Koordinaten (Höhe)
- Optimierung von Speicher- und In-Memory-Formaten für effiziente Verarbeitung auf CPU und GPU
- Unterstützung für lineare Referenzierung (linear referencing) und m-values, um mit Formaten der nächsten Generation wie Overture Maps (GeoParquet) kompatibel zu sein
- Unterstützung für komplexe Typen wie verschachtelte Attribute, Listen und Maps
-
Die weitere Entwicklung von MLT richtet sich nach den Anforderungen der Community, und verschiedene Erweiterungsideen und Beiträge sind willkommen
- Als weiterführende Materialien werden die FOSS4G-2024-Präsentationsfolien von Markus Tremmel, ein YouTube-Vortrag und eine ACM-Publikation bereitgestellt
Verfügbarkeit und Integration
-
MLT ist ab sofort einsatzbereit
- Sowohl MapLibre GL JS als auch MapLibre Native unterstützen MLT-Quellen
- In der Style-JSON kann dazu der Wert
mltin der Eigenschaftencodinggesetzt werden
-
Ausprobieren und Entwicklung
- Verwendung des MLT-basierten Demo-Kachelstils
- Über den Encoding server lassen sich bestehende MVT-Stile in Echtzeit in MLT umwandeln
- Planetiler soll MLT-Erzeugung in der nächsten Version unterstützen
- Der Integrationsstand ist auf der offiziellen Seite zum Implementierungsstatus einsehbar
-
Zum Austausch über Erfahrungen mit MLT wird die Teilnahme am Slack-Kanal
#maplibre-tile-formatoder an GitHub-Issues/-Discussions empfohlen
Dank und Zusammenarbeit
- MLT wurde durch mehrjährige Zusammenarbeit zwischen Wissenschaft, Open Source und Unternehmen entwickelt
- Markus Tremmel entwarf das Format, Yuri Astrakhan leitete das Projekt
- Tim Sylvester verantwortete die C++-Implementierung, Harel Mazor, Benedikt Vogl und Niklas Greindl die JavaScript-Implementierung
- Microsoft und AWS stellten die Finanzierung der Entwicklung bereit
Anmerkung
- Im Unterschied zu MVT unterstützt MLT keine Layer, in denen sich der Typ von Werten innerhalb einer Spalte je nach Feature unterscheidet
1 Kommentare
Hacker-News-Kommentare
Ich empfehle, den MapLibre-Vortrag im Geospatial-Devroom auf der FOSDEM am Samstag zu besuchen
Link zum Veranstaltungsplan
Ich habe mir ein paar Beispielseiten angesehen und ein Beispiel zur Kartenanzeige mit MLT mit dem bestehenden Beispiel zur Kartenanzeige verglichen
Laut den Konsolen-Logs hat sich die Kompressionseffizienz um etwa 10 % verbessert. Ziemlich beeindruckend
Das MLT-Format hat verschiedene leichtgewichtige Encodings eingebaut, und Kacheln können jeweils unterschiedlich codiert werden
Deshalb ist ein heuristischer Ansatz nötig, um die beste Kombination zu finden, und es gibt einen Trade-off zwischen Kachelgröße und Decoding-Performance
Es ist noch früh, aber AWS fördert auch dieses Jahr wieder die Arbeit an der MLT-Optimierung, daher gibt es noch viel Raum für Verbesserungen
Beim Benchmarking ist es wichtiger, reale Nutzungsmuster zu betrachten als die Gesamtgröße aller Kacheln — niemand zoomt mitten im Ozean hinein 😉
Ich habe vor Kurzem eine pmtiles-basierte Lösung ausgerollt und bin wirklich sehr zufrieden
Siehe die PMTiles-Dokumentation
pmtiles verwendet MVT, aber ich hoffe, dass künftig Tools erscheinen, die nach MLT konvertieren können
MapLibre ist die beste JS-Bibliothek zur Darstellung von Karten im Browser, die ich bisher verwendet habe
Ich freue mich auf den Umstieg auf das neue Format
Planetiler kann MLT mit der CLI-Option
--tile-format=mlterzeugenDerzeit nur im main-Branch, aber eine Veröffentlichung steht bald an
Tests haben gezeigt, dass sich die Größe des OpenMapTiles-Archivs in der Standardkonfiguration um etwa 10 % reduziert hat. Weitere Optimierungen laufen bereits
Leider hat Tilemaker mittelfristig keine Pläne für MLT-Unterstützung
Deshalb könnte ein Teil der Community beim Umstieg außen vor bleiben
Zur Diskussion siehe den Issue-Thread
Es ist interessant, dass Vektor-Dateiformate immer noch neu erfunden werden
Verbesserungen bei Kompressionsrate oder Decoding-Geschwindigkeit verstehe ich, aber mich würde interessieren, welche neuen Ideen oder Einsichten dieses Design angetrieben haben
Ich beobachte dieses Projekt schon eine Weile und bin wirklich gespannt
Aus Sicht von Nutzern des MapLibre-Stacks ist die letzte große Aufgabe aus meiner Sicht, dass PostGIS eine As_MLT()-Funktion bekommt
Hostet hier jemand Karten selbst? Mich würden Vor- und Nachteile sowie die verwendeten Tools interessieren
Der Server muss lediglich statische Dateien per Range Request ausliefern können (mit Caddy oder Nginx geht beides)
Die Karte ist eine einzelne große Datei, daher lässt sie sich auch leicht zwischen mehreren Servern teilen
Nachteile gibt es fast keine, aber clientseitig muss eine Bibliothek für die Unterstützung eines benutzerdefinierten Protokolls ergänzt werden
Das Bearbeiten von Styles ist etwas knifflig, aber man kann Protomaps-Styles im Maputnik-Editor laden und anpassen
Siehe die Anleitung
Ich habe eine weltweite Karte mit niedriger Auflösung (50 MB) und eine hochauflösende Karte für Australien (900 MB) separat erstellt und nach S3 hochgeladen
Ich brauche keine aktuellen Daten, deshalb lasse ich sie einfach so liegen, und es funktioniert hervorragend
Kommerzielle APIs waren entweder bei der Erzeugung von Rastergrafiken mit 300 dpi zu teuer oder hatten Beschränkungen beim Weiterverkauf
Ich speichere und liefere Vektor-Kacheln mit PostGIS aus und speichere Rasterdaten als GeoTiff-COGs in AWS S3
Wir bauen aus OSM das pbf für unser Interessengebiet (Colorado), starten dann den openstreetmap-tile-server-Container, wenden Styles an und rendern mit renderd
MLT ist zwar cool, aber ich würde mir solche Fortschritte auch bei 3D-Kachelformaten wünschen
Derzeit sind Cesiums 3D Tiles faktisch die einzige Wahl, aber die Performance ist nicht so schnell wie erhofft