9 puntos por GN⁺ 2026-01-19 | 3 comentarios | Compartir por WhatsApp
  • Herramienta open source basada en Python para generar mapas de ciudades de todo el mundo como pósters artísticos minimalistas
  • Usa datos de OpenStreetMap (OSMnx) para visualizar elementos geográficos como calles, vías fluviales y parques, y los renderiza con matplotlib
  • Ofrece 17 estilos temáticos (por ejemplo, neon_cyberpunk, blueprint, japanese_ink) y permite agregar temas personalizados con archivos JSON
  • Desde la línea de comandos se puede especificar el nombre de la ciudad, el país, el radio y el tema para generar y guardar automáticamente el póster
  • Una herramienta que permite a desarrolladores y diseñadores explorar la estructura urbana de forma artística mediante la combinación de diseño y visualización de datos

Descripción general del proyecto

  • MapToPoster es un script de Python que genera pósters con diseño minimalista a partir del mapa de una ciudad especificada por el usuario
    • Los pósters generados se guardan automáticamente en el directorio posters/
    • Se publica bajo licencia MIT, por lo que se puede modificar y redistribuir libremente
  • El repositorio cuenta con aproximadamente 2.7k estrellas y 164 forks

Funciones principales

  • Genera pósters mediante una interfaz de línea de comandos (CLI), ingresando el nombre de la ciudad (--city), el país (--country), el tema (--theme) y la distancia (--distance)
  • La opción --list-themes permite ver la lista de todos los temas disponibles
  • Se puede configurar un radio adecuado según el tamaño de la ciudad con base en el valor de distancia (distance)
    • 4,000–6,000 m: ciudades pequeñas
    • 8,000–12,000 m: ciudades medianas
    • 15,000–20,000 m: grandes ciudades

Configuración de temas

  • El directorio themes/ incluye 17 archivos JSON de temas
    • Ejemplos: noir, blueprint, neon_cyberpunk, warm_beige, forest, terracotta, etc.
  • Cada tema define propiedades de color para el fondo, las calles, el agua, los parques y otros elementos
  • El usuario puede agregar directamente nuevos temas en formato JSON
    • Ejemplo: "bg": "#FFFFFF", "road_primary": "#1A1A1A", etc.

Ejemplos de uso

  • Es posible generar pósters con distintas combinaciones de ciudades y temas
    • 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
  • Entre los pósters de ejemplo se incluyen ciudades como San Francisco, Venice, Marrakech y Singapore

Estructura interna y arquitectura

  • Los componentes principales son CLI Parser, Geocoding (Nominatim), Data Fetching (OSMnx) y Rendering (matplotlib)
  • El orden de renderizado (z-order) es: fondo → agua → parques → calles → degradado → texto
  • Funciones principales
    • get_coordinates(): consulta latitud y longitud a partir del nombre de la ciudad
    • create_poster(): pipeline completo de renderizado
    • get_edge_colors_by_type(): asigna colores según el tipo de vía
    • get_edge_widths_by_type(): ajusta el grosor según la importancia de la vía
    • load_theme(): carga temas JSON

Extensión y personalización

  • Para agregar nuevas capas de mapa (por ejemplo, ferrocarril), se pueden cargar datos de OSMnx y renderizarlos dentro de create_poster()
  • Si se agregan nuevas propiedades de tema, deben definirse tanto en el JSON como en el código (load_theme())
  • Reglas de posicionamiento del texto
    • Nombre de la ciudad: y=0.14
    • Nombre del país: y=0.10
    • Coordenadas: y=0.07
    • Fuente: y=0.02

Consejos de optimización de rendimiento

  • Si el valor de dist supera los 20 km, disminuye la velocidad de descarga y aumenta el uso de memoria
  • El caché de coordenadas ayuda a evitar límites en las solicitudes a Nominatim
  • Configurar network_type='drive' mejora la velocidad de renderizado
  • Para vistas previas rápidas, se puede bajar dpi a 150

Stack tecnológico y licencia

  • Escrito 100% en Python
  • Bibliotecas principales: OSMnx, matplotlib, argparse
  • Distribuido bajo MIT License, permite uso comercial y modificaciones

Resumen

  • MapToPoster es un instrumento basado en código para convertir mapas urbanos en arte, un proyecto open source que combina visualización de datos y diseño
  • Es una herramienta útil para que desarrolladores, diseñadores y especialistas en visualización de datos exploren la estructura urbana en una forma artística

3 comentarios

 
xguru 2026-01-20

Probé hacer una versión de Seúl/Busan y quedó bastante bien, así que la adjunté en la cuenta de GeekNews en Twitter.
Seúl: https://x.com/GeekNewsHada/status/2013410000031395905
Busan: https://x.com/GeekNewsHada/status/2013412083749265695

 
kunggom 2026-01-20
 
GN⁺ 2026-01-19
Comentarios en Hacker News
  • Hay un proyecto relacionado que he usado varias veces
    es city-roads (GitHub), que soporta salida SVG y también se puede probar directamente en línea
    Su creador, Anvaka, también ha hecho muchos otros geniales proyectos de visualización de datos
  • Es un proyecto realmente genial
    Aunque ajustar los parámetros de las calles es un poco complicado
    Como idea de mejora, estaría bien aceptar coordenadas en lugar del nombre de la ciudad para poder centrarlo en un punto específico, y también una función para generar varios estilos a la vez y elegir visualmente
    De cualquier forma, es un gran trabajo
  • La imagen de San Francisco se ve genial, pero en algunas muestras parece haber un problema con la proyección
    No parece UTM sino una proyección esférica global, así que no es adecuada para renderizado local
    Que no haya ninguna mención de la proyección en el README resulta un poco sospechoso
    • Como este es un proyecto artístico para hacer pósters divertidos y artísticos, la proyección no es tan importante
      Además es open source, así que podrías aprovechar tu experiencia en cartografía y proponer una mejora mediante un pull request
    • La imagen final tiene un efecto de viñeteado, así que da la sensación de que los bordes se desvanecen naturalmente
      Probablemente toma mosaicos de OSM y luego hace posprocesamiento de imagen
      El resultado se ve bastante bien
  • Le eché un vistazo rápido al código, y gracias a matplotlib parece que con muy pocos cambios sería posible la salida SVG
    Me da curiosidad si hay alguna razón especial para haber dejado PNG como valor predeterminado
    • Buena observación. Se puede resolver con plt.savefig(output_file, format='svg', facecolor=THEME['bg'])
      Voy a agregar un parámetro --format para incluirlo
    • Al exportar ciudades grandes a PDF/SVG, la velocidad es muy lenta
      Incluso una sola ciudad de 500 mil habitantes tarda muchísimo
  • Me pregunto cuál sería una buena forma de imprimir estas imágenes como pósters
    • El-co Color, en Nueva Jersey, imprime pósters de 20x30 pulgadas a buen precio
      El-co Color Poster Special
    • Antes también había un servicio que convertía este tipo de mapas en un mapa en relieve impreso en 3D y lo enmarcaba
    • Yo uso Vistaprint. No he comparado demasiado, pero el precio y la calidad me parecen buenos
    • Si quieres intentarlo tú mismo, con Rasterbator.net puedes unir varias hojas para hacer un póster DIY
      Aunque sí requiere bastante trabajo manual
    • En Estados Unidos, la calidad de impresión de Staples me pareció bastante buena
  • Este repositorio es realmente excelente
    El README podría tomarse como un ejemplo de buenas prácticas en OSS, y el resultado es sorprendentemente hermoso
  • También vale la pena echarle un vistazo a prettymapp
  • Me pregunto qué pasa cuando hay varias ciudades con el mismo nombre
    Por ejemplo, Salem (OR/MA), Portland (OR/ME), Springfield (IL/MO), Dallas (TX/GA)
    • Si solo escribes "Salem", elige una ciudad al azar
      Si escribes algo como "Salem, Oregon" o "Salem, MA", obtienes el resultado que quieres, y el texto ingresado se usa como caption
    • En Estados Unidos también hay muchas ciudades con nombres de ciudades del mundo, como Paris, London o Athens
    • No se me había ocurrido eso. Probablemente habría que agregar una función para aceptar también el país
  • Me pregunto si este proyecto usa un enfoque basado en grafos o si es una generación de imagen más general
    He visto resultados parecidos en Picxstudio, que es una plataforma de generación de imágenes con IA
  • Quería convertir un mapa de carreteras de Sídney en un rompecabezas para jugar mientras aprendo la estructura vial
    Así podría depender menos de las apps de navegación y manejar como antes
    • Hay una razón por la que Where 2, en Sídney, terminó evolucionando hacia Google Maps
      Hay demasiadas calles de un solo sentido, y la estructura del puerto y los túneles es muy compleja, así que aprenderse las calles de Sídney es una tarea de toda la vida