Neue Vektor-Tiles von OpenStreetMap
(tech.marksblogg.com)- OpenStreetMap bietet seit Langem statische, PNG-basierte Raster-Tiles an, hostet nun aber auch Vektor-Tiles im Format Mapbox Vector Tiles (MVT), wodurch sich die Nutzungsmöglichkeiten von Karten erweitern
- Vektor-Tiles ermöglichen es Nutzern, Stil- und Rendering-Regeln anzupassen, Informationen aus den Tiles zu extrahieren oder Funktionen wie Umschalten der Label-Sprache umzusetzen
- Die Hauptwebsite von OSM nutzt weiterhin Raster-Tiles, die neuen Vektor-Tiles lassen sich aber direkt in einer separaten Web-Demo, in QGIS und in Leafmap ausprobieren
- Ein z14-Tile in der Nähe des Burj Khalifa zeigt: 114 KB MVT wurden in 1,4 MB JSON umgewandelt; der POI-Layer enthält 474 Datensätze und mehrere Top-Level-Layer-Keys
- Mit
tiles2columnslassen sich OSM-Vektor-Tiles für eine angegebene Bounding Box herunterladen und in GeoPackage oder Parquet umwandeln, sodass aktualisierte OSM-Daten direkt für dateibasierte Analysen nutzbar werden
Wo sich OSM-Tiles verändern
- OpenStreetMap hat Karten bislang über statische PNG-Raster-Tiles bereitgestellt, bei denen Rendering-Regeln und Stil vorab festgelegt waren
- Das neue Hosting stellt Mapbox Vector Tiles bereit, also Vektor-Tiles im MVT-Format
- Mit Vektor-Tiles können Endnutzer die Darstellung der Karte direkter steuern
- Anpassung von Stil- und Rendering-Regeln
- Extraktion der in jedem Tile enthaltenen Basisinformationen
- Darstellung schärferer Kartenbilder
- Möglichkeit zum Umschalten der Label-Sprache
- Die Hauptwebsite von OSM stellt weiterhin Raster-Tiles bereit
- Die neuen Vektor-Tiles lassen sich in einer Web-Demo auf den meisten Smartphones und Desktop-Geräten ansehen
Für die Praxis verwendete Tools
- Die Beispiele visualisieren und analysieren OSM-Daten mit Python und mehreren Geospatial-Tools
- Zu den grundlegenden installierten Tools gehören
jq,python3-pipundpython3-virtualenv - In der virtuellen Python-Umgebung werden folgende Pakete installiert
leafmap[maplibre]mapbox_vector_tilemorecantilenotebook
- DuckDB wird zusammen mit folgenden Erweiterungen verwendet
- Für das Karten-Rendering wird QGIS 3.40 verwendet
- QGIS ist eine Desktop-Anwendung für Windows, macOS und Linux
- Weltweit wird die Anwendung ungefähr 15 Millionen Mal pro Monat gestartet
Vektor-Tiles in QGIS öffnen
- In QGIS lassen sich OSM-Vektor-Tiles über
Layer Menu -> Add Layer -> Add Vector Tile Layerhinzufügen - Für die neue Verbindung wird als Style-URL folgender Wert verwendet
- Als Source-URL wird der folgende MVT-Endpunkt angegeben
- Das Stylesheet ist optional; auch ohne Stylesheet kann QGIS die Vektordaten mit zufälligen Farben rendern
- In QGIS wurde ein Problem mit fehlerhaftem Icon-Rendering festgestellt
- Andere Mapping-Tools rendern die Sprites dieses Styles korrekt
- In QGIS wirken die Icons wie unscharfe schwarze Icons
- Das zugehörige Issue ist QGIS #59492
Rendering mit Leafmap und Jupyter Notebook
- Es wird ein Konfigurationsordner für Jupyter Notebook erstellt, ein Passwort gesetzt und der Server auf
127.0.0.1gestartet - Das Notebook läuft mit den Rechten des ausführenden Nutzers und kann das aktuelle Verzeichnis sowie darunterliegende Dateien offenlegen; daher wird es in einem leeren Ordner ausgeführt
- In Leafmap wird
leafmap.maplibreglverwendet undcolorful.jsonals Style-URL angegeben, um die Umgebung des Burj Khalifa zu rendern - Beim Rendering mit Leafmap werden die POI-Icons korrekt angezeigt
MVT in analysierbare Daten umwandeln
- Als Beispiel dient ein Tile der Zoomstufe 14 in der Nähe des Burj Khalifa
- Die ungefähren Koordinaten
[55.27, 25.2]werden anmorecantile tiles 14übergeben, um die Tile-Koordinaten[10707, 7006, 14]zu erhalten - Mit diesen Werten wird das folgende Tile heruntergeladen
- Die 114-KB-MVT-Datei wird mit
mapbox_vector_tile.decodeund einer Funktion zur Koordinatentransformation in eine 1,4-MB-JSON-Datei umgewandelt - Die Top-Level-Keys des umgewandelten Tiles enthalten folgende Layer
addressesbridgesbuildingsferrieslandoceanpier_linespier_polygonsplace_labelspoispublic_transportsitesstreet_labelsstreet_polygonsstreetsstreets_labels_pointswater_polygonswater_polygons_labels
POI-Layer mit DuckDB untersuchen
- Der Layer
poiswird als separate JSON-Datei extrahiert und anschließend mitST_READin DuckDB geöffnet und analysiert - POIs mit einem
cuisine-Wert ergeben 67 Zeilen- Beispielwerte für
amenitysindrestaurant,fast_foodundcafe - Beispielwerte für
cuisinesindfrench,greek,american,lebanese,coffee_shop,asian,persian,chickenundpizza
- Beispielwerte für
- Das Ergebnis von DuckDB
SUMMARIZEzeigt, wie vollständig die POI-Daten befüllt sind- Insgesamt gibt es 474 POI-Datensätze
- Die Null-Anteile von
name,name_deundname_enliegen jeweils bei 29,96 % - Der Null-Anteil von
amenityliegt bei 31,86 % - Der Null-Anteil von
cuisineliegt bei 85,86 % - Der Null-Anteil von
geomliegt bei 0,00 %
- Nach
approx_uniquehatname258 Werte,name_de264 Werte,name_en245 Werte,amenity27 Werte undcuisine39 Werte
Bounding Box mit tiles2columns extrahieren
- Das bestehende osm_split war ein Tool, das von GeoFabrik erzeugte OSM-PBF-Dateien in benannte GeoPackage-Dateien umwandelte
- GeoFabrik-PBF-Dateien können zu dem Zeitpunkt, an dem sie verarbeitet werden können, bereits Daten von vor einigen Tagen enthalten
- Die neuen OSM-Vektor-Tiles werden aktualisiert, sobald die zugrunde liegenden Daten bearbeitet wurden
- tiles2columns ist ein Python-basiertes Utility, das OSM-Tiles für eine angegebene Bounding Box herunterlädt und in GeoPackage- oder Parquet-Dateien umwandelt
- Das Beispiel einer Bounding Box um den Norden Dubais lädt 42 Tiles herunter und erzeugt GeoPackage-Dateien im Umfang von einigen MB
streets.gpkg: 6,8 MBbuildings.gpkg: 6,2 MBpois.gpkg: 1,4 MBstreet_labels.gpkg: 1,4 MBland.gpkg: 744 KB
- Die erzeugten GeoPackage-Dateien lassen sich direkt in ein QGIS-Projekt einfügen
- Die Dateien sind nach den in den OSM-MVT-Dateien verwendeten Keys aufgeteilt, sodass sich jeder Layer leicht separat identifizieren, stylen und analysieren lässt
- Die Attribute jeder Geometrie werden in separaten Spalten gespeichert
- Eine Beispielabfrage nach POIs mit Namen in
pois.gpkgliefert 6.329 Zeilen zurück und enthält Namen wieKiku,Fujiya Restaurant,Mövenpick Grand Al Bustan DubaiundMcDonald's
2 Kommentare
Die OpenStreetMap Foundation hat offiziell damit begonnen, Vektor-Kacheln zu betreiben
Hacker-News-Kommentare
Bei Vektorkacheln habe ich ein etwas zwiespältiges Gefühl. Ich habe noch keine Kombination aus Stil und Tile-Generator-Schema gefunden, die den Detailgrad zeigt, den die bisherigen Rasterkacheln liefern.
Schon an den Screenshots im Artikel sieht man den Unterschied deutlich. Der erste enthält viele Informationen: Points of Interest wie Statuen, Geschäfte, Theater und Aussichtspunkte, Straßen, die als Brücken markiert sind, unterschiedliche Farben für Rasenflächen und Parks, unterschiedliche Linienstärken je nach Straße, Sportplätze, Gebäude- und Stadtteilnamen, Einbahnstraßenpfeile, Gebäudeteile, Treppen, Bäume und mehr.
Der zweite zeigt im Wesentlichen nur eine Trolley-Haltestelle und einen Straßennamen, und selbst dieser Straßenname wird falsch gerendert.
Ich habe viel mit OpenMapTiles-Stilen, dem Standardstil von Protomaps, Mapbox-Stilen sowie den Generatoren von Protomaps, OpenMapTiles und Mapbox gearbeitet, aber nichts war so gut lesbar und gleichzeitig so detailreich wie die OSM-Rasterkacheln.
Vektorstile bieten flüssiges Zoomen und Verschieben und lassen sich leicht anpassen, aber wenn man nicht nur eine Hintergrundkarte für eigene Daten braucht, sondern die tatsächlichen Kartendaten sehen will, reichen sie nicht aus.
Vielleicht liegt es auch an Grenzen bei den Rechenressourcen. Um den Detailgrad der OSM-Rasterkacheln darzustellen, könnte es sowohl auf Client-Seite als auch bei der Kachelgenerierung zu ressourcenintensiv werden.
Ich würde mir wünschen, dass OpenStreetMap eher versucht, den bestehenden Rasterstil genauer nachzubilden, statt noch eine kontrastarme, detailarme Hintergrundkarte anzubieten, und hoffe, dass diese öffentliche Veröffentlichung von Vektorkacheln detailliertere Vektorkarten ermöglicht.
Eine moderne Infrastruktur zur Erzeugung von Rasterkacheln zu betreiben, ist eine ziemlich große Aufgabe.
Früher habe ich lange an einem sehr detaillierten Stil für die Planung von Radreisen gearbeitet: https://stevebennett.me/2015/01/14/cycletour-org-a-better-ma...
Ich habe mehrmals versucht, ihn mit Vektorkacheln nachzubilden, aber es war ziemlich schwierig, genügend Details unterzubringen, ohne an Größenlimits zu stoßen, und die Standard-Mapbox-Kacheln enthielten viel zu wenig der nötigen Informationen.
Allerdings bieten Vektorkacheln auch Ausweichmöglichkeiten, die Rasterkacheln nicht haben. Zum Beispiel kann man unterschiedliche Layer ein- und ausschalten, während Labels trotzdem erkennen können, was darunter liegt, und so die Lesbarkeit erhalten bleibt.
Der Stil ist optisch eng an die ursprünglichen Rasterkacheln angelehnt, aber in der Vektorversion habe ich deutlich mehr Interaktivität hinzugefügt.
Aus Sicht von Stil- und Kacheldesign ist interessant, dass sich die Performance-Trade-offs völlig unterscheiden, je nachdem, wo und wie die Kacheln gerendert werden. Das ist natürlich naheliegend, wirkt sich aber auch darauf aus, was visuell auf Server und Client möglich ist.
Trotzdem ist die OSM-Karte viel angenehmer zu benutzen, weil so viele Points of Interest angezeigt werden. Schon beim Anschauen der Karte bekommt man ein Gefühl für den realen Ort; ein Park sieht wie ein Park aus, ein Krankenhaus wie ein Krankenhaus.
Google Maps mag aus Sicht eines Grafikdesigners besser aussehen. Aber zur Orientierung muss man meist die Formen von Straßen und Kreuzungen abgleichen. In Google Maps sieht alles ziemlich ähnlich aus.
Schon nach zwei Minuten Herumprobieren sieht man den Detailverlust sofort. Wirklich schade, aber ich bin optimistisch, dass das irgendwann jemand lösen wird.
Es war interessant zu beobachten, wie die Open-Source-Community Vektorkartenkacheln entwickelt hat. Als ich um 2018 an Web-GIS arbeitete, wirkten die Streaming-Vektorkarten von Google/Apple wie Magie, und wenn die Kosten tragbar gewesen wären, hätte ich sie unbedingt nutzen wollen.
Nicht lange danach wurde die Kerntechnik als Open Source verfügbar, und sogar kostenlose Hosting-Lösungen entstanden. Heute kann man in Leaflet-Karten hervorragende Vektor-Layer kostenlos verwenden. Danke, Open Source.
Ich will mich nicht über einen kostenlosen Kartendienst beschweren; der Dienst ist großartig, und ich verstehe auch, dass der Fokus stärker auf Bearbeitung und Dateneigentum liegt. Bereitstellungsinfrastruktur ist schwierig und teuer.
Ich frage mich nur, wie sehr die Dominanz von Mapbox über die Jahre andere Ansätze ausgebremst hat.
Ich frage mich, ob beim Hosting von OSM-basierten Karten die Betriebskosten sinken. Schließlich dürfte man weniger CPU fürs Rendering brauchen, und Vektoren sollten auch weniger Speicherplatz und Bandbreite verbrauchen.
Nein, weil der offizielle OSM-Tile-Layer stark von Fastly gesponsert wird. Beim letzten Stand waren es 720.000 € von Fastly, während das AWS-Rendering 40.000 € kostete.
Ja, weil technisch weniger Ressourcen verbraucht werden, was auch AWS+Fastly entlastet und Self-Hosting einfacher macht.
In einer früheren, ausführlich gelesenen Risikobewertung stand, OSM würde „bei Verlust des Fastly-Sponsorings wahrscheinlich den gesamten Drittanbieterzugriff auf den Standard-Tile-Layer kappen und nur noch eine kleine Zahl von Varnish-Servern betreiben“.
Nach meinem Verständnis lag die Hauptmotivation für Vektoren weniger in Kostensenkungen, sondern eher in besserer Internationalisierung, darin, Rendering-Entscheidungen clientseitig treffen zu können, und im Aufbau eines modernen Toolings, aus dem sich viele Folge-vorteile ergeben.
Es dürfte aktuellere Informationen geben; relevante Unterlagen stehen unter 1 und 2.
Allerdings stimmt es insofern, als man einen Teil der Verarbeitung auf den Client verlagern kann und, wichtiger noch, viele Style-Entscheidungen vom Client treffen lassen kann. Natürlich nicht alle.
Statische oder selten aktualisierte Vektortiles lassen sich mit verschiedenen Tools aus OSM-Daten erzeugen; die derzeit beliebtesten sind https://github.com/systemed/tilemaker und https://github.com/onthegomap/planetiler.
Das eigentlich Neue ist, dass Vektortiles dank der Arbeit, die Paul für die OSMF gemacht hat, sofort aktualisiert werden können, also innerhalb weniger Minuten. Das ist als Feedback-Mechanismus für OSM-Beitragende wichtig und auch der Hauptgrund, warum die OSMF derzeit den Rastertile-Dienst betreibt.
Derzeit ist noch offen, welche Einschränkungen für die Nutzung des Vektortile-Dienstes gelten werden. Wie beim Rastertile-Dienst ist nicht beabsichtigt, mit Drittanbieterdiensten zu konkurrieren oder sie zu ersetzen, aber der Vektortile-Dienst könnte das potenziell tun.
Beispiele sind https://protomaps.com/, https://openmaptiles.org/, https://versatiles.org/.
Auch die gzip-Komprimierung ist bereits innerhalb der Tiles erledigt.
Ein weiteres Problem ist, dass arabische Schriftarten in der Vektorversion nicht korrekt gerendert werden. Sie werden von links nach rechts statt von rechts nach links gerendert, und die Buchstaben erscheinen getrennt statt verbunden.
Daher liegt der sichtbare Fehler am Style oder an der Bibliothek, die die Inhalte lokal rendert.
Ebenfalls sehenswert: OpenFreeMap — kostenloses Hosting von OpenStreetMap-Vektortiles
https://openfreemap.org/
https://github.com/hyperknot/openfreemap?tab=readme-ov-file#...
Ich frage mich, ob es ebenfalls auf demselben Vektor-Technologiestack basiert oder ob es eine komplett separate Entwicklung ist.
Der Teil, dass „die Bilder viel schärfer werden und auch ein Wechsel der Label-Sprache möglich sein wird“, dürfte weniger gut funktionieren als erhofft.
Wenn man die Sprache ändert, gibt es keinerlei Garantie, dass die Label-Größe gleich bleibt, und die Label-Größe interagiert mit dem Kartenlayout und beeinflusst auch, was angezeigt wird.
Werden Labels größer, können sie zu viel von der Karte verdecken oder sich gegenseitig überlappen. Werden Labels kleiner, könnten Nutzer sich fragen, warum eine Stadt, die zuvor aus Platzgründen weggelassen wurde, nicht im neu entstandenen freien Raum erscheint.
Zeigt einfach alle Straßennamen an. Wenn es dicht wird, ist mir das egal. An einer Kreuzung zu stehen und auf eine Karte ohne Namen zu schauen, ist eine nutzlose Karte.
Das war auch bei den seit Jahren genutzten Rastertiles so.
Eine sehr erfreuliche Neuerung. Ich freue mich auf besser aussehende Karten.
Allerdings wundert mich der Abschnitt „my workstation“ etwas. Er scheint nicht viel mit dem Rest des Artikels zu tun zu haben, und die danach behandelte Arbeit scheint auch keine hohen Systemanforderungen zu stellen.
Wenn „die Bilder deutlich schärfer werden und auch das Umschalten der Label-Sprache möglich wird“, heißt das dann zum Beispiel, dass Stadtform-Vektoren – genauer gesagt Polygone – die Metadaten der Städtenamen in allen definierten Sprachen mit sich führen?
Wie nützlich das Umschalten der Sprache ist, hängt natürlich davon ab, ob Übersetzungen vorhanden sind. Es könnte auch Editoren dazu motivieren, mehr Übersetzungen von Ortsnamen hinzuzufügen.
Ein Beispiel dafür, wie so etwas aussieht, sieht man unter https://americanamap.org. Es nutzt OSM-Daten, zielt aber im Gegensatz zu den Tiles in diesem Beitrag nicht auf nahezu Echtzeit ab.
Es wäre schön, wenn das bedeuten würde, dass OSMAnd und OrganicMaps endlich ihre Kräfte bündeln und die ultimative freie Open-Source-Karten-App herausbringen.
Vektor-Tiles im MVT-Format sind für Navigation oder Suche überhaupt nicht geeignet. Das heißt nicht, dass man es nicht irgendwie zusammenfrickeln könnte, aber es wäre ziemlich erzwungen.
OSMAnd hat zum Beispiel viele Power-User-Funktionen, die für Menschen, die zu OSM beitragen, sehr nützlich sind, in einer App für normale Nutzer aber nur die Oberfläche überladen könnten.
https://marble.kde.org/ hatte schon vor neun Jahren eine eigene Implementierung für einen gestreamten Vektor-OSM-Layer, und ich habe ziemlich lange darauf gewartet, dass Ähnliches auch in anderen OSM-Karten-Apps auftaucht.
Bei Android-OSM-Apps war es immer ein Speicherproblem, Karten in großen Brocken für ganze Länder mit Hunderten von Megabytes herunterzuladen. Ich freue mich sehr, dass sich endlich ein Standard herausbildet, und hoffe, dass er von vielen Apps übernommen und weiter verfeinert wird. Großartige Arbeit.