MapToPoster: urbane Kartografie als reproduzierbare Poster
originalankur/maptoposter · 14.153★ · 1.259 forks
Alles Wissenswerte über originalankur/maptoposter: ein Python-Werkzeug, das das Straßennetz und weitere OpenStreetMap-Ebenen abruft, um Stadtposter aus der Kommandozeile zu rendern.
Was MapToPoster ist
MapToPoster verwandelt eine Stadt und ein Land in ein minimalistisches Kartografie-Poster. Das Projekt kombiniert Geokodierung, OpenStreetMap-Daten und Rendering mit Matplotlib; das Ergebnis wird als Bild in posters/ gespeichert. Das Repository präsentiert sich als programmierbarer Generator, nicht als gehosteter Dienst oder offizielle grafische Anwendung.
Das praktische Versprechen ist, dass derselbe Befehl, dasselbe Thema und derselbe Radius eine wiederholbare Komposition erzeugen. Enthalten sind 17 Themes, Straßenhierarchien, Wasser, Parks, Typografie und Unterstützung für Beschriftungen in nicht-lateinischen Schriften.

Der Ursprung: ein schneller Launch mit sofortiger Aufmerksamkeit
Das Repository wurde am 8. Januar 2026 von Ankur Gupta (originalankur) erstellt, dessen öffentliches Profil Bengaluru angibt und auf ankur.dev verlinkt. Die Projekthistorie datiert die erste Version 0.1.0 auf den 17. Januar 2026, mit 17 Themes und dem grundlegenden Stadt/Land-Ablauf; am selben Tag wurde auch v0.2 getaggt.
Der Beitrag „Map To Poster – Create Art of your favourite city” erreichte Hacker News am 17. Januar 2026. Er kam auf 296 Punkte und 70 Kommentare — bemerkenswert frühe Aufmerksamkeit für ein gerade erst erstelltes Repository. Die Resonanz offenbarte auch die zentrale Spannung des Projekts: attraktive Bilder aus öffentlichen Geodaten zu erzeugen ist über die Oberfläche einfach, aber Grenzen bei Geokodierung, Projektion und Datenvolumen zeigen sich, sobald Präzision oder eine große Stadt gefragt sind.
Philosophie und Prinzipien
- Code vor Oberfläche: Der Maintainer bittet darum, vorerst keine Web- oder Desktop-Oberflächen einzureichen und kein Docker hinzuzufügen; der erwartete Kern ist das Kommandozeilenwerkzeug.
- Deklarative Anpassung: Themes werden als JSON-Dateien in
themes/definiert, mit Farben für Hintergrund, Text, Wasser, Parks und Straßenkategorien. - Offene Daten mit visueller Ausgabe: Der Ablauf nutzt Nominatim zur Geokodierung, OSMnx zum Abrufen der Daten und Matplotlib zum Rendern.
- Überprüfbares Ergebnis: Der Contributor-Leitfaden verlangt, jede Korrektur visuell zu testen und das Poster vorher/nachher zu vergleichen.

Wie es funktioniert
Das Programm wertet Argumente aus, löst die Stadt mit Nominatim in Koordinaten auf, lädt das Netz und die Ebenen über OSMnx von OpenStreetMap herunter und zeichnet sie mit Matplotlib. Die dokumentierte Reihenfolge stapelt Hintergrund, Wasser, Parks, Straßen, Verläufe und schließlich Beschriftungen; Straßen erhalten ihre Breite und Farbe nach OSMs highway-Kategorie.

Das Werkzeug unterstützt einen Radius in Metern, ein explizites Zentrum über Breiten-/Längengrad, eine physische Größe in Zoll, ein einzelnes Theme oder alle Themes. Für internationale Texte kann es den zur Geokodierung verwendeten Namen vom auf dem Poster angezeigten Text trennen und eine Google-Fonts-Familie nach fonts/cache/ herunterladen.
Das Changelog schreibt Version 0.2.1 lokales Caching von OSM-Daten, eine Pause von 0,3 Sekunden zwischen Anfragen, Projektionskorrekturen und ein Nominatim-Timeout von 10 Sekunden zu. Der noch nicht formal veröffentlichte Branch fügt Unterstützung für uv, Python 3.11 oder neuer und das Überschreiben von Koordinaten hinzu.
Offizieller und halboffizieller Status
Es wurde kein Beleg für die Aufnahme in einen offiziellen Marktplatz, eine Unterstützung durch einen Kartenanbieter oder ein offizielles Registry-Paket bei dieser Recherche gefunden. GitHubs Feld homepage ist leer, sodass das Repository und sein README die auffindbare kanonische Dokumentation sind.
In der Praxis ist es ein Community-Open-Source-Projekt unter MIT-Lizenz, mit aktivierten Discussions, Issues und Pull Requests; seine zahlreichen Forks und Anpassungen entsprechen keiner offiziellen Zertifizierung.

Das Ökosystem
Ableger, Ports und Oberflächen
cedgeek/maptoposter-dockerist ein von der API erkannter Fork und kündigt eine Docker-Variante an: 26 Sterne und 5 Forks. Es ist eine Community-Anpassung, obwohl das Hauptprojekt Docker vorerst nicht akzeptiert.rramboer/OpenCartographist ein weiterer Fork aus der API; er wird als Kartografie-Generator umbenannt, mit 4 Sternen und 3 Forks.frohman04/maptoposter-rsbeschreibt sich als Rust-Version von MapToPoster; undfezcode/CartoGoerklärt, ästhetische Parität mit dem Original-Generator anzustreben — von Go aus. Beides sind von ihren Autoren selbst erklärte Ports, keine offiziellen Komponenten.simongrossi/maptoposter-web,s4chdev/maptoposter-webuiundmsamuslim101/maptoposterguibeschreiben sich als Web- oder Desktop-Schichten, die auf der ursprünglichen Idee oder dem Skript aufbauen. Die explizite Einschränkung im Haupt-README schließt aus, sie als akzeptierte Erweiterungen darzustellen.ianho7/maptoposter-onlineist eine angrenzende Online-App mit 891 Sternen;dimartarmizi/map-to-posterist eine clientseitige Web-App mit 1.050 Sternen, Themes, Layouts und Export. Die Suche gibt sie als verwandt zurück, aber nicht als offizielle GitHub-Forks.
Es wurde keine vollständige Community-Übersetzung des Repositorys identifiziert. Internationalisierung existiert jedoch im Produkt selbst: Das README zeigt Beispiele auf Japanisch, Koreanisch, Arabisch, Chinesisch, Thailändisch und Khmer über Anzeigenamen und passende Schriftarten.

Vergleichbare Projekte
| Projekt | Nachweisbare Beziehung |
|---|---|
anvaka/city-roads | Visualisiert die Straßen einer Stadt; konzentriert sich auf diese eine Ebene, während MapToPoster ein Poster mit Themes und Beschriftungen komponiert. |
yousifamanuel/terraink | Präsentiert sich als anpassbare Engine für Kartografie-Poster. |
chrieke/prettymapp | Eine Streamlit-App zum Erstellen künstlerischer Karten aus OSM-Daten. |
koenderks/rcityviews | Ein R- und Shiny-Paket für stilisierte Stadtkarten. |
dimartarmizi/map-to-poster | Eine clientseitige Web-Alternative für Standort-Poster. |
Die Repositories und Beschreibungen in dieser Tabelle wurden über GitHub-Suchen abgerufen; es wird weder Kompatibilität noch Zugehörigkeit noch eine unabhängige vergleichende Bewertung behauptet.
Zahlen des Repos
Messung: 9. August 2026, GitHub-API.
| Metrik | Wert |
|---|---|
| Sterne | 13.901 |
| Forks | 1.249 |
| Echte Abonnenten | 45 |
| Von der API zurückgegebene Contributor | 16 |
| Von der API gemeldete offene Issues | 63 |
| Hauptsprache | Python |
| Lizenz | MIT |
| Erstellung | 8. Januar 2026 |
| Letzter registrierter Push | 6. August 2026 |
| Letzte Metadaten-Aktualisierung | 9. August 2026 |
| Letzte Changelog-Version | 0.3.0, 27. Januar 2026 |
| Formale GitHub-Releases | keine; es gibt ein v0.2-Tag |

Die im API-Ergebnis führenden Contributor sind originalankur (17 Beiträge), lorenzofratus (9) und Saibamen (4). GitHubs Feld open_issues_count kann offene Pull Requests einschließen; es sollte nicht als reine Issue-Zahl gelesen werden. watchers_count verdoppelt die Sterne in dieser Antwort, weshalb subscribers_count für die 45 echten Abonnenten verwendet wird.
Wie man beiträgt
Im Root-Verzeichnis wurde keine CONTRIBUTING.md gefunden; die Anleitung steht im README. Sie akzeptiert Fehlerkorrekturen, verlangt einen visuellen Vorher-Nachher-Test des Ergebnisses und bittet darum, vor einer größeren Funktion Discussions oder Issues zu konsultieren. Als aktuelle Grenzen legt sie außerdem fest: keine Web-/Desktop-UI und kein Docker.
Der Verzeichnisbaum enthält test/, und das Changelog vermerkt Pull-Request-Prüfungen über GitHub Actions seit 0.3.0.
Es gibt sichtbare Discussions, Issues und Pull Requests, sodass der praktische Ablauf darin besteht, die Änderung in den Kanälen des Repositorys vorzuschlagen, sie in einem Fork umzusetzen und einen Pull Request mit visuellem Nachweis zu eröffnen.
Wie die Community reagierte
Der Hacker-News-Thread 46656834 erhielt 296 Punkte und 70 Kommentare. Nutzer stephenlf lobte die Ergebnisse und bezeichnete das README als Beispiel für hohe Qualität im Open-Source-Bereich; das ist eine individuelle Meinung, kein Beleg für allgemeine Qualität. mft_ bat um SVG-Ausgabe, während Helmut10001 mögliche Projektionsprobleme in Beispielen anmerkte. Kwpolska und mvdwoord forderten manuelle Koordinaten und erwähnten Schwierigkeiten bei der Geokodierung; Footprint0521 berichtete von extremer Langsamkeit beim Erzeugen von PDF/SVG für eine große Stadt. Diese Einwände decken sich mit den später im Changelog hinzugefügten Koordinaten-, Cache- und Projektionskontrollen.

Als externes praktisches Material wurde ein Video von Blueprint Bytes gefunden, „How to Create Custom Map Posters with Mapbox and Python: maptoposter Guide”: 4 Minuten 45 Sekunden, veröffentlicht am 24. Januar 2026, mit 610 Aufrufen zum Zeitpunkt der Abfrage. Es ist ein unabhängiges Tutorial; seine Existenz stellt keine technische Prüfung dar.
Von Reddit wurde wegen einer Zugriffsprüfung der Seite keine auffindbare Evidenz gewonnen, ebenso wenig von X, da eine Anmeldung erforderlich ist. Product Hunt zeigte eine Anti-Bot-Prüfung; DEV lieferte eine leere Liste für das Tag maptoposter, Hashnode zeigte keine Beiträge in seiner Suche, und iTunes lieferte keine exakten Episoden. Diese Einschränkungen belegen keine Abwesenheit von Konversation auf diesen Plattformen.
Kurzanleitung zur Nutzung
Installation und erster Start
Für das aktuelle Projekt ist Python 3.11 oder neuer erforderlich. Der empfohlene Weg ist, uv zu installieren und aus dem Klon auszuführen:
uv run ./create_map_poster.py --city "Paris" --country "France"
Bei der ersten Nutzung erstellt und verwaltet uv run die Umgebung und installiert Abhängigkeiten. Als reproduzierbare Alternative uv sync --locked vor demselben Befehl ausführen. Mit pip .venv erstellen und aktivieren, requirements.txt installieren und python create_map_poster.py ... ausführen. Das erste Ergebnis wird unter posters/{stadt}_{theme}_{JJJJMMTT_HHMMSS}.png gespeichert.
Übliche Arbeitsabläufe
# Ein Poster mit dem Standard-Theme erzeugen.
python create_map_poster.py -c "Paris" -C "France"
# Komposition und Theme für ein bestimmtes Gebiet anpassen.
python create_map_poster.py -c "Barcelona" -C "Spain" -t warm_beige -d 8000
# Eine mehrdeutige Geokodierung mit einem expliziten Zentrum korrigieren.
python create_map_poster.py --city "New York" --country "USA" -lat 40.776676 -long -73.971321 -t noir
# Alle visuellen Optionen durchsehen oder rendern.
python create_map_poster.py --list-themes
python create_map_poster.py -c "Tokyo" -C "Japan" --all-themes
Wesentliche Konfiguration
--cityund--country: erforderlich, werden zur Geokodierung verwendet.--themeundthemes/*.json: wählen einen Stil aus oder erlauben es, einen mit Farben für Ebenen und Straßen zu erstellen.--distance: steuert den Radius, standardmäßig 18.000 m; das README schlägt 4–6 km für kleine, dichte Gebiete, 8–12 km für Stadtzentren und 15–20 km für Metropolregionen vor.--widthund--height: gemessen in Zoll, mit einem Maximum von 20; sie dienen dazu, die Druck- oder Bildschirmauflösung auszurichten.--display-city,--display-countryund--font-family: ermöglichen lokale Beschriftungen und laden die Schriftart nachfonts/cache/herunter/cachen sie.
Häufige Fallstricke und Lösungen
- Falsche Stadt oder ein wenig hilfreiches Zentrum: Stadt und Land für die Beschriftungen beibehalten, aber
--latitudeund--longitudegemeinsam nutzen, um das Zentrum festzulegen. Das Changelog vermerkt, dass diese Funktion speziell für die präzise Kontrolle existiert. - Langsames Rendering oder hoher Speicherverbrauch: Das README warnt, dass Radien über 20 km langsamere Downloads und mehr Speicher bedeuten.
--distancereduzieren,network_type='drive'beim Bearbeiten des Codes für schnelle Vorschauen verwenden und die DPI für Vorschauen von 300 auf 150 senken. - Grenzen der Geokodierung: Der Leitfaden empfiehlt lokales Koordinaten-Caching, um Nominatim-Grenzen zu vermeiden; das Projekt wendet bereits OSM-Daten-Caching und eine Pause zwischen Anfragen an.
- Ebenen, die Straßen verdecken: Das Changelog vermerkt eine Korrektur der Ebenenreihenfolge, damit Straßen über Wasser und Parks liegen. Bei einem älteren Checkout auf den aktuellen Code aktualisieren, falls dieser Fehler auftritt.
Integrationen und Migration
Die native Integration erfolgt mit OpenStreetMap-Daten über OSMnx, Nominatim-Geokodierung, Matplotlib und Google Fonts; eine offizielle Integration mit MCP, Editoren, CI oder Messaging ist nicht dokumentiert.
Für eine containerisierte Bereitstellung oder eine Oberfläche sind die Community-Forks und -Oberflächen im Ökosystem Ausgangspunkte, doch der Hauptmaintainer akzeptiert sie nicht als Beiträge.
Anwendungsfälle und wem dieses Repository helfen kann
- Designer, Kartografen und Personen, die Drucke oder Hintergrundbilder vorbereiten, können dieselbe Stadt mit explizitem Radius, Theme und Größe erzeugen und PNG-Dateien mit einem nachvollziehbaren Namen in
posters/erhalten. - Wer lokale Beschriftungen oder Beispiele für internationale Städte benötigt, kann den Suchnamen in lateinischer Schrift beibehalten und Japanisch, Arabisch, Chinesisch, Koreanisch, Thailändisch oder Khmer mit einer passenden Schriftart anzeigen.
- Entwickler, die OpenStreetMap-Daten erkunden, können die Theme-JSON-Dateien, die Ebenen von
create_poster()oder die Straßenhierarchie ändern, um eine eigene Visualisierung hinzuzufügen, gestützt auf dokumentierte Architektur und Schlüsselfunktionen. - Teams, die eine Web-App, Docker oder eine Produktionspipeline benötigen, sollten zunächst die Community-Anpassungen oder vergleichbaren Projekte prüfen: Diese Anwendungsfälle fallen nicht in den vom Hauptrepository akzeptierten Beitragsumfang.

Ressourcen
- Repository: https://github.com/originalankur/maptoposter
- Dokumentation und Einrichtung: https://github.com/originalankur/maptoposter#readme
- Changelog: https://github.com/originalankur/maptoposter/blob/main/CHANGELOG.md
- Community und Beiträge: https://github.com/originalankur/maptoposter/discussions, https://github.com/originalankur/maptoposter/issues, https://github.com/originalankur/maptoposter/pulls
- Rezension und Konversation: https://news.ycombinator.com/item?id=46656834
- Video-Tutorial: https://www.youtube.com/watch?v=8vBIeVSLzzI
- Releases und Tag: https://github.com/originalankur/maptoposter/releases, https://github.com/originalankur/maptoposter/tags
Hinweis: Dieser Artikel kombiniert Dokumentation, Changelog und die GitHub-API sowie Community-Quellen, abgerufen am 9. August 2026. Zahlen ändern sich mit der Zeit.
Kommentare