MapToPoster: cartografía urbana convertida en pósteres reproducibles
originalankur/maptoposter · 14.153★ · 1.259 forks
Todo lo que hay que saber sobre originalankur/maptoposter: una herramienta de Python que obtiene la red urbana y otras capas de OpenStreetMap para renderizar pósteres de ciudades desde la línea de comandos.
Qué es MapToPoster
MapToPoster transforma una ciudad y un país en un póster cartográfico minimalista. El proyecto combina geocodificación, datos de OpenStreetMap y renderizado con Matplotlib; el resultado se guarda como imagen en posters/. El repositorio se presenta como un generador programable, no como un servicio alojado ni una aplicación gráfica oficial.
Su propuesta práctica es que el mismo comando, tema y radio produzcan una composición repetible. Incluye 17 temas, jerarquías de carreteras, agua, parques, tipografía y soporte para rótulos en escrituras no latinas.

El origen: un lanzamiento rápido con atención inmediata
El repositorio fue creado el 8 de enero de 2026 por Ankur Gupta (originalankur), cuyo perfil público indica Bengaluru y enlaza ankur.dev. El historial del proyecto fija la primera versión 0.1.0 el 17 de enero de 2026, con 17 temas y el flujo básico ciudad/país; el mismo día se etiquetó v0.2.
La publicación «Map To Poster – Create Art of your favourite city» llegó a Hacker News el 17 de enero de 2026. Alcanzó 296 puntos y 70 comentarios, una atención temprana notable para un repositorio recién creado. La recepción también reveló la tensión central del proyecto: crear imágenes atractivas a partir de datos geográficos públicos es sencillo en la interfaz, pero los límites de geocodificación, proyección y volumen de datos aparecen cuando se quiere precisión o una ciudad grande.
Filosofía y principios
- Código antes que interfaz: el mantenedor pide no enviar interfaces web o de escritorio por ahora y no añadir Docker; el núcleo esperado es la herramienta de línea de comandos.
- Personalización declarativa: los temas se definen como archivos JSON en
themes/, con colores para fondo, texto, agua, parques y categorías de carreteras. - Datos abiertos con salida visual: el flujo usa Nominatim para geocodificar, OSMnx para recuperar los datos y Matplotlib para renderizar.
- Resultado verificable: la guía para contribuidores pide probar visualmente cualquier corrección y comparar el póster antes y después.

Cómo funciona
El programa analiza argumentos, resuelve la ciudad en coordenadas con Nominatim, descarga la red y las capas desde OpenStreetMap mediante OSMnx y las dibuja con Matplotlib. El orden documentado coloca fondo, agua, parques, carreteras, degradados y finalmente las etiquetas; las vías reciben grosor y color según la categoría highway de OSM.

La herramienta admite un radio en metros, un centro explícito mediante latitud/longitud, tamaño físico en pulgadas, un tema o todos los temas. Para textos internacionales puede separar el nombre usado para geocodificar del texto mostrado en el póster y descargar una familia de Google Fonts a fonts/cache/.
El changelog atribuye a la versión 0.2.1 la caché local de datos OSM, una pausa de 0,3 segundos entre peticiones, correcciones de proyección y un tiempo de espera de Nominatim de 10 segundos. La rama sin versión publicada formalmente añade soporte para uv, Python 3.11 o superior y la sobrescritura de coordenadas.
Estado oficial y semioficial
No se recuperó evidencia de aceptación en un mercado oficial, aval de un proveedor cartográfico ni paquete oficial en un registro durante esta investigación. El campo homepage de GitHub está vacío, por lo que el repositorio y su README son la documentación canónica recuperable.
En la práctica es un proyecto comunitario de código abierto bajo licencia MIT, con Discussions, incidencias y solicitudes de cambios habilitadas; sus numerosas bifurcaciones y adaptaciones no equivalen a certificación oficial.

El ecosistema
Derivados, puertos e interfaces
cedgeek/maptoposter-dockeres una bifurcación detectada por la API y anuncia una variante Docker: 26 estrellas y 5 bifurcaciones. Es una adaptación comunitaria, pese a que el proyecto principal no acepta Docker por ahora.rramboer/OpenCartographes otra bifurcación de la API; se renombra como generador de cartografías, con 4 estrellas y 3 bifurcaciones.frohman04/maptoposter-rsse describe como una versión en Rust de MapToPoster; yfezcode/CartoGodeclara buscar paridad estética con el generador original desde Go. Son puertos declarados por sus autores, no componentes oficiales.simongrossi/maptoposter-web,s4chdev/maptoposter-webuiymsamuslim101/maptoposterguise describen como capas web o de escritorio construidas sobre la idea o el script original. La restricción explícita del README principal impide presentarlas como extensiones aceptadas.ianho7/maptoposter-onlinees una aplicación en línea adyacente con 891 estrellas;dimartarmizi/map-to-posteres una aplicación web de cliente con 1.050 estrellas, temas, diseños y exportación. La búsqueda los devuelve relacionados, pero no como bifurcaciones oficiales de GitHub.
No se identificó una traducción completa comunitaria del repositorio. Sí existe internacionalización en el producto: el README ofrece ejemplos de japonés, coreano, árabe, chino, tailandés y jemer mediante nombres de visualización y fuentes adecuadas.

Proyectos comparables
| Proyecto | Relación verificable |
|---|---|
anvaka/city-roads | Visualiza las carreteras de una ciudad; se centra en esa capa, mientras MapToPoster compone un póster con temas y etiquetas. |
yousifamanuel/terraink | Se presenta como motor de pósteres cartográficos personalizables. |
chrieke/prettymapp | Aplicación Streamlit para crear mapas artísticos desde datos OSM. |
koenderks/rcityviews | Paquete de R y Shiny para mapas urbanos estilizados. |
dimartarmizi/map-to-poster | Alternativa web de cliente para pósteres de ubicaciones. |
Los repositorios y descripciones de esta tabla se recuperaron en las búsquedas de GitHub; no se afirma que haya compatibilidad, afiliación ni una evaluación comparativa independiente.
Números del repo
Medición: 9 de agosto de 2026, API de GitHub.
| Métrica | Valor |
|---|---|
| Estrellas | 13.901 |
| Bifurcaciones | 1.249 |
| Suscriptores reales | 45 |
| Contribuidores devueltos por la API | 16 |
| Incidencias abiertas indicadas por la API | 63 |
| Lenguaje principal | Python |
| Licencia | MIT |
| Creación | 8 de enero de 2026 |
| Último envío registrado | 6 de agosto de 2026 |
| Última actualización de metadatos | 9 de agosto de 2026 |
| Última versión del changelog | 0.3.0, 27 de enero de 2026 |
| Publicaciones formales de GitHub | ninguna; hay una etiqueta v0.2 |

Los contribuidores principales del resultado de la API son originalankur (17 contribuciones), lorenzofratus (9) y Saibamen (4). El campo open_issues_count de GitHub puede incluir solicitudes de cambios abiertas; no debe interpretarse como un conteo exclusivo de incidencias. watchers_count duplica las estrellas en esa respuesta, por eso se usa subscribers_count para los 45 suscriptores reales.
Cómo contribuir
No se recuperó un CONTRIBUTING.md en la raíz; la guía está en el README. Acepta correcciones de errores, exige comprobar el resultado visual antes y después, y pide consultar Discussions o Issues antes de emprender una función grande. También fija como límites actuales no enviar UI web/escritorio ni Docker.
El árbol contiene test/ y el changelog anota comprobaciones de solicitudes de cambios con GitHub Actions desde 0.3.0.
Hay Discussions, incidencias y solicitudes de cambios visibles, por lo que el flujo práctico es proponer el cambio en los canales del repositorio, implementarlo en una bifurcación y abrir una solicitud de cambios con evidencia visual.
Cómo lo recibió la comunidad
El hilo de Hacker News 46656834 obtuvo 296 puntos y 70 comentarios. El usuario stephenlf elogió los resultados y consideró el README un ejemplo de gran calidad para código abierto; es una opinión individual, no una prueba de calidad general. mft_ solicitó salida SVG, mientras que Helmut10001 señaló posibles problemas de proyección en muestras. Kwpolska y mvdwoord pidieron coordenadas manuales y comentaron dificultades de geocodificación; Footprint0521 informó lentitud extrema al generar PDF/SVG para una ciudad grande. Estas objeciones concuerdan con los controles de coordenadas, caché y proyección añadidos posteriormente en el changelog.

Como material práctico externo se recuperó el vídeo de Blueprint Bytes, «How to Create Custom Map Posters with Mapbox and Python: maptoposter Guide»: 4 minutos y 45 segundos, publicado el 24 de enero de 2026 y con 610 visualizaciones al consultarlo. Es un tutorial independiente; su existencia no constituye una auditoría técnica.
No se obtuvo evidencia recuperable de Reddit por desafío del sitio ni de X por requerir autenticación. Product Hunt presentó verificación anti-bot; DEV devolvió una lista vacía para la etiqueta maptoposter, Hashnode no mostró publicaciones en su búsqueda e iTunes no devolvió episodios exactos. Estas limitaciones no demuestran ausencia de conversación en esas plataformas.
Guía rápida de uso
Instalación y primer arranque
Se requiere Python 3.11 o superior para el proyecto actual. La vía recomendada es instalar uv y ejecutar desde el clon:
uv run ./create_map_poster.py --city "Paris" --country "France"
En el primer uso, uv run crea y gestiona el entorno e instala dependencias. Como alternativa reproducible, ejecute uv sync --locked antes del mismo comando. Con pip, cree y active .venv, instale requirements.txt y ejecute python create_map_poster.py .... El primer resultado se guarda en posters/{ciudad}_{tema}_{AAAAMMDD_HHMMSS}.png.
Flujos de trabajo habituales
# Generar un póster con el tema predeterminado.
python create_map_poster.py -c "Paris" -C "France"
# Ajustar composición y tema para un área concreta.
python create_map_poster.py -c "Barcelona" -C "Spain" -t warm_beige -d 8000
# Corregir una geocodificación ambigua con un centro explícito.
python create_map_poster.py --city "New York" --country "USA" -lat 40.776676 -long -73.971321 -t noir
# Examinar o renderizar todas las opciones visuales.
python create_map_poster.py --list-themes
python create_map_poster.py -c "Tokyo" -C "Japan" --all-themes
Configuración esencial
--cityy--country: son obligatorios y se usan para geocodificar.--themeythemes/*.json: seleccionan un estilo o permiten crear uno con colores para capas y carreteras.--distance: controla el radio, con 18.000 m como predeterminado; el README sugiere 4–6 km para zonas pequeñas y densas, 8–12 km para centros urbanos y 15–20 km para áreas metropolitanas.--widthy--height: miden pulgadas, con máximo de 20; sirven para orientar la resolución de impresión o pantalla.--display-city,--display-countryy--font-family: permiten rótulos locales y descargan/cachan la fuente enfonts/cache/.
Trampas frecuentes y soluciones
- Ciudad equivocada o centro poco útil: mantenga ciudad y país para los rótulos, pero use juntos
--latitudey--longitudepara fijar el centro. El changelog indica que esta función existe específicamente para el control preciso. - Renderizado lento o consumo de memoria: el README advierte que radios superiores a 20 km implican descargas lentas y más memoria. Reduzca
--distance, usenetwork_type='drive'al modificar el código para vistas rápidas y baje el DPI de 300 a 150 en previsualizaciones. - Límites de geocodificación: la guía recomienda caché local de coordenadas para evitar límites de Nominatim; el proyecto ya aplica caché de datos OSM y una pausa entre peticiones.
- Capas que ocultan carreteras: el changelog registra una corrección de orden de capas para que las vías queden sobre agua y parques. Actualice al código actual si aparece ese fallo en una revisión antigua.
Integraciones y migración
La integración nativa es con datos OpenStreetMap mediante OSMnx, geocodificación Nominatim, Matplotlib y Google Fonts; no se documenta una integración oficial con MCP, editores, CI o mensajería.
Para un despliegue en contenedor o una interfaz, las bifurcaciones e interfaces comunitarias del ecosistema son puntos de partida, pero el mantenedor principal no las admite como contribuciones.
Casos de uso y a quién puede ayudar este repositorio
- Diseñadores, cartógrafos y personas que preparan láminas para impresión o fondos de pantalla pueden generar una misma ciudad con un radio, tema y tamaño explícitos, y recibir archivos PNG con un nombre trazable en
posters/. - Quien necesite rótulos locales o muestras para ciudades internacionales puede conservar nombres de búsqueda en alfabeto latino y mostrar japonés, árabe, chino, coreano, tailandés o jemer con una fuente apropiada.
- Desarrolladores que exploran datos de OpenStreetMap pueden modificar los JSON de temas, las capas de
create_poster()o la jerarquía de carreteras para añadir una visualización propia, con una arquitectura y funciones clave documentadas. - Equipos que necesitan una aplicación web, Docker o un flujo de producción deberían evaluar primero las adaptaciones comunitarias o proyectos comparables: esos usos no forman parte del alcance de contribución aceptado por el repositorio principal.

Recursos
- Repositorio: https://github.com/originalankur/maptoposter
- Documentación e instalación: https://github.com/originalankur/maptoposter#readme
- Changelog: https://github.com/originalankur/maptoposter/blob/main/CHANGELOG.md
- Comunidad y contribuciones: https://github.com/originalankur/maptoposter/discussions, https://github.com/originalankur/maptoposter/issues, https://github.com/originalankur/maptoposter/pulls
- Review y conversación: https://news.ycombinator.com/item?id=46656834
- Vídeo tutorial: https://www.youtube.com/watch?v=8vBIeVSLzzI
- Versiones y etiqueta: https://github.com/originalankur/maptoposter/releases, https://github.com/originalankur/maptoposter/tags
Nota: este artículo combina documentación, changelog y API de GitHub, además de fuentes comunitarias recuperadas el 9 de agosto de 2026. Las cifras cambian con el tiempo.
Comentarios