9 Punkte von GN⁺ 2026-01-19 | 3 Kommentare | Auf WhatsApp teilen
  • Python-basiertes Open-Source-Tool, mit dem sich Stadtpläne aus aller Welt in minimalistische Kunstposter umwandeln lassen
  • Nutzt OpenStreetMap(OSMnx)-Daten, um Straßen, Wasserwege, Parks und andere topografische Elemente zu visualisieren, und rendert sie mit matplotlib
  • Bietet 17 Theme-Stile (z. B. neon_cyberpunk, blueprint, japanese_ink) und erlaubt das Hinzufügen benutzerdefinierter Themes per JSON-Datei
  • Erstellt und speichert Poster automatisch über die Kommandozeile, indem Stadtname, Land, Radius und Theme angegeben werden
  • Ein Tool, das Design und Datenvisualisierung verbindet, damit Entwickler und Designer Stadtstrukturen auf künstlerische Weise erkunden können

Projektüberblick

  • MapToPoster ist ein Python-Skript, das auf Basis der Karte einer vom Nutzer angegebenen Stadt Poster in minimalistischem Design erzeugt
    • Die erzeugten Poster werden automatisch im Verzeichnis posters/ gespeichert
    • Veröffentlicht unter der MIT-Lizenz und frei für Änderungen und Weiterverbreitung
  • Das Repository hat rund 2,7k Stars und 164 Forks

Hauptfunktionen

  • Über die Kommandozeilenschnittstelle (CLI) können Stadtname (--city), Land (--country), Theme (--theme) und Distanz (--distance) eingegeben werden, um Poster zu erzeugen
  • Mit der Option --list-themes lässt sich eine Liste aller verfügbaren Themes anzeigen
  • Je nach Distanzwert (distance) lässt sich ein passender Radius für verschiedene Stadtgrößen festlegen
    • 4.000–6.000 m: kleine Städte
    • 8.000–12.000 m: mittelgroße Städte
    • 15.000–20.000 m: Großstädte

Theme-Struktur

  • Im Verzeichnis themes/ sind 17 Theme-JSON-Dateien enthalten
    • Beispiele: noir, blueprint, neon_cyberpunk, warm_beige, forest, terracotta usw.
  • Jedes Theme definiert Farbeigenschaften für Hintergrund, Straßen, Wasserflächen, Parks usw.
  • Nutzer können neue Themes direkt selbst hinzufügen im JSON-Format
    • Beispiel: "bg": "#FFFFFF", "road_primary": "#1A1A1A" usw.

Anwendungsbeispiele

  • Poster lassen sich mit verschiedenen Kombinationen aus Städten und Themes erzeugen
    • python create_map_poster.py -c "Tokyo" -C "Japan" -t japanese_ink -d 15000
    • python create_map_poster.py -c "Barcelona" -C "Spain" -t warm_beige -d 8000
    • python create_map_poster.py -c "Dubai" -C "UAE" -t midnight_blue -d 15000
  • Beispielposter enthalten Städte wie San Francisco, Venice, Marrakech und Singapore

Interne Struktur und Architektur

  • Die Hauptkomponenten sind CLI Parser, Geocoding(Nominatim), Data Fetching(OSMnx) und Rendering(matplotlib)
  • Die Rendering-Reihenfolge (z-order) ist Hintergrund → Wasserflächen → Parks → Straßen → Farbverlauf → Text
  • Wichtige Funktionen
    • get_coordinates(): Ruft Breiten- und Längengrad über den Stadtnamen ab
    • create_poster(): Gesamte Rendering-Pipeline
    • get_edge_colors_by_type(): Legt Farben nach Straßentyp fest
    • get_edge_widths_by_type(): Legt Linienstärken nach Straßenbedeutung fest
    • load_theme(): Lädt JSON-Themes

Erweiterung und Anpassung

  • Um neue Karten-Layer (z. B. Bahnlinien) hinzuzufügen, können innerhalb von create_poster() OSMnx-Daten geladen und gerendert werden
  • Wenn neue Theme-Eigenschaften ergänzt werden, müssen sie sowohl im JSON als auch im Code (load_theme()) definiert werden
  • Regeln für die Textplatzierung
    • Stadtname: y=0.14
    • Ländername: y=0.10
    • Koordinaten: y=0.07
    • Quellenangabe: y=0.02

Tipps zur Performance-Optimierung

  • Bei einem dist-Wert von 20 km oder mehr sinken Download-Geschwindigkeit und Speichereffizienz
  • Koordinaten-Caching hilft, Request-Limits von Nominatim zu umgehen
  • Mit der Einstellung network_type='drive' verbessert sich die Rendering-Geschwindigkeit
  • Für schnelle Vorschauen kann dpi auf 150 reduziert werden

Tech-Stack und Lizenz

  • Zu 100 % in Python geschrieben
  • Zentrale Bibliotheken: OSMnx, matplotlib, argparse
  • Veröffentlicht unter der MIT License, kommerzielle Nutzung und Änderungen sind möglich

Zusammenfassung

  • MapToPoster ist ein codebasiertes Tool zur künstlerischen Darstellung von Stadtplänen, das Datenvisualisierung und Design in einem Open-Source-Projekt verbindet
  • Ein nützliches Tool für Entwickler, Designer und Experten für Datenvisualisierung, um Stadtstrukturen in künstlerischer Form zu erkunden

3 Kommentare

 
kunggom 2026-01-20

In den Kommentaren auf Hacker News wurde auch city-roads erwähnt; das wurde hier früher schon einmal vorgestellt.

 
xguru 2026-01-20

Ich habe testweise einmal etwas für Seoul/Busan erstellt, und weil es ganz gut geworden ist, habe ich es dem GeekNews-Twitter-Account angehängt.
Seoul: https://x.com/GeekNewsHada/status/2013410000031395905
Busan: https://x.com/GeekNewsHada/status/2013412083749265695

 
GN⁺ 2026-01-19
Hacker-News-Kommentare
  • Ich habe schon mehrfach ein ähnliches Projekt genutzt, nämlich city-roads (GitHub). Es unterstützt SVG-Ausgabe und lässt sich auch direkt online ausprobieren. Anvaka, der Entwickler, hat außerdem viele andere großartige Datenvisualisierungsprojekte gemacht.
  • Wirklich ein tolles Projekt. Allerdings ist es etwas knifflig, die Straßenparameter anzupassen. Als Verbesserungsidee könnte man statt des Stadtnamens eine Koordinateneingabe akzeptieren, damit sich ein bestimmter Punkt als Zentrum festlegen lässt, und mehrere Stile auf einmal ausgeben, damit man visuell auswählen kann. Trotzdem großartige Arbeit.
  • Das San-Francisco-Bild sieht gut aus, aber bei einigen Beispielen scheint es ein Problem mit der Projektionsmethode zu geben. Es sieht eher nach einer globalen Kugelprojektion als nach UTM aus und ist daher für lokales Rendering nicht geeignet. Dass das README keine Projektion erwähnt, wirkt etwas verdächtig.
    • Das ist ein Kunstprojekt, das unterhaltsame und künstlerische Poster erstellt, daher ist die Projektion nicht so wichtig. Da es außerdem Open Source ist, wäre es vielleicht sinnvoll, mit deiner Erfahrung in der Kartenerstellung per Pull Request einen Verbesserungsvorschlag einzubringen.
    • Im finalen Bild gibt es einen Vignettierungseffekt, sodass die Ecken weich ausblenden. Vermutlich wurden OSM-Kacheln geladen und das Bild anschließend nachbearbeitet. Das Ergebnis sieht ziemlich gut aus.
  • Ich habe den Code kurz angesehen, und dank matplotlib scheint mit nur kleinen Änderungen SVG-Ausgabe möglich zu sein. Ich frage mich, ob es einen besonderen Grund gibt, warum PNG der Standard ist.
    • Guter Hinweis. Das lässt sich mit plt.savefig(output_file, format='svg', facecolor=THEME['bg']) lösen. Ich werde einen --format-Parameter hinzufügen und das übernehmen.
    • Wenn man große Städte als PDF/SVG exportiert, ist es extrem langsam. Schon bei einer Stadt mit 500.000 Einwohnern dauert es sehr lange.
  • Ich frage mich, was die beste Methode wäre, um solche Bilder tatsächlich als Poster zu drucken.
    • El-co Color in New Jersey druckt 20x30-Zoll-Poster günstig. El-co Color Poster Special
    • Früher gab es auch einmal einen Dienst, der solche Karten als Reliefkarten aus dem 3D-Drucker gemacht und eingerahmt hat.
    • Ich nutze Vistaprint. Ich habe nicht besonders viele Vergleiche angestellt, aber Preis und Qualität sind ordentlich.
    • Wenn du es selbst ausprobieren willst, kannst du mit Rasterbator.net mehrere Blätter zusammenfügen und ein DIY-Poster erstellen. Ist allerdings ziemlich aufwendig.
    • In den USA war die Druckqualität von Staples ziemlich gut.
  • Dieses Repository ist wirklich großartig. Das README taugt als Best Practice für OSS, und die Ergebnisse sind erstaunlich schön.
  • Es lohnt sich auch, prettymapp anzusehen.
  • Ich frage mich, was passiert, wenn es mehrere Städte mit demselben Namen gibt, zum Beispiel Salem (OR/MA), Portland (OR/ME), Springfield (IL/MO) oder Dallas (TX/GA).
    • Wenn man einfach nur "Salem" eingibt, wird eine beliebige Stadt ausgewählt. Gibt man "Salem, Oregon" oder "Salem, MA" ein, bekommt man das gewünschte Ergebnis, und der eingegebene Text wird als Bildunterschrift verwendet.
    • In den USA gibt es auch viele nach Weltstädten benannte Orte wie Paris, London oder Athens.
    • Daran hatte ich gar nicht gedacht. Wahrscheinlich sollte eine Funktion hinzugefügt werden, die auch die Ländereingabe entgegennimmt.
  • Ich frage mich, ob dieses Projekt auf einem graphbasierten Ansatz beruht oder eher klassische Bilderzeugung ist. Ich habe bei Picxstudio schon einmal ähnliche Ergebnisse gesehen; dort handelt es sich um eine AI-Bilderzeugungsplattform.
  • Ich wollte einmal eine Straßenkarte von Sydney als Puzzle machen, um beim Spielen die Straßenführung zu lernen. So könnte ich meine Abhängigkeit von Navigations-Apps verringern und wie ein Fahrer von früher werden.
    • Es gibt einen Grund, warum Where 2 in Sydney zu Google Maps wurde. Dort gibt es extrem viele Einbahnstraßen, und Hafen- sowie Tunnelstruktur sind so komplex, dass das Erlernen der Straßen in Sydney eine Lebensaufgabe ist.