MapToPoster: Crear Posters Minimalistas de Ciudades en Python

MapToPoster: Crear Posters Minimalistas de Ciudades en Python

Si alguna vez has querido producir un mapa limpio y artístico de tu ciudad favorita, MapToPoster es la herramienta perfecta. Es un proyecto de Python puro de código abierto que combina los datos de OpenStreetMap (OSM) en un póster pulido utilizando Matplotlib. Ya seas un cartógrafo aficionado, un diseñador buscando un fondo único, o un científico de datos que necesita una ayuda visual, este repositorio te brinda todo listo desde el primer momento.


1. Lo que MapToPoster te Ofrece

Funcionalidad Descripción
Generación sin configuración Un solo llamado desde la CLI produce un PNG del centro de la ciudad dentro del radio elegido.
18 temas predefinidos Desde el clásico noir hasta el futurista neon‑cyberpunk, cada tema ajusta automáticamente fondo, colores de carreteras y degradados.
Tema JSON personalizable Crea tu propio tema editando el archivo themes/{nombre}.json—controla cada canal de color.
Distancia flexible Escoge un radio entre 4 km (centro de la ciudad) y 20 km (ciudad completa) según la escala que necesites.
Portabilidad El código depende solo de bibliotecas bien mantenidas: osmnx, networkx, y matplotlib. Lo único que necesitas es Python 3.9+.
Licencia MIT Libre para usar, modificar y redistribuir.

2. Inicio Rápido

  1. Clonar el repositorio

    git clone https://github.com/originalankur/maptoposter.git
    cd maptoposter
    

  2. Crear un entorno virtual (recomendado)

    python -m venv .venv
    source .venv/bin/activate   # Windows: .venv\\Scripts\\activate
    

  3. Instalar dependencias

    pip install -r requirements.txt
    

  4. Generar un póster

    python create_map_poster.py -c \"Barcelona\" -C \"Spain\" -t warm_beige -d 8000
    

    Resultado: posters/barcelona_warm_beige_20260108_172924.png se crea.

Puedes reemplazar los argumentos con cualquier par ciudad/pais y nombre de tema. Ejecute python create_map_poster.py --list-themes para ver todas las opciones disponibles.


3. Temas en Resumen

Tema Estilo Caso de uso ideal
feature_based Clásico negro y blanco con jerarquía de carreteras Leyendas de mapas con mucho texto
gradient_roads Carreteras con degradado suave Visualización científica
noir Fondo negro puro, carreteras blancas Arte de póster para cine/sitio web
midnight_blue Fondo azul marino, carreteras doradas Ambiente nocturno de ciudad
blueprint Plano arquitectónico Proyectos de arquitectura
neon_cyberpunk Oscuro con rosa/cian eléctrico Fondos de juegos futuristas
warm_beige Tono sepia Ambiente vintage de ciudad
pastel_dream Pasteles suaves Invitaciones de boda ligeras
japanese_ink Lavado de tinta minimalista Obras culturales
forest Verdes profundos Temas enfocados en naturaleza
ocean Azules y verdeazulado Planos de ciudades costeras
terracotta Calidez mediterránea Posters de viajes cálidos
sunset Naranjas cálidas Arte urbano al atardecer
autumn Rojos quemados Temas de temporada otoñal
copper_patina Cobre oxidado Estética industrial o vintage
monochrome_blue Familia azul única Marca corporativa

4. Extender MapToPoster

4.1 Añadir un Nuevo Tema

  1. Crea un archivo JSON en themes/. Ejemplo my_fantasy.json:
    {
      "name": "Fantasy",
      "description": "A whimsical map theme",
      "bg": "#111111",
      "text": "#AAFFAA",
      "gradient_color": "#22AA22",
      "water": "#004400",
      "parks": "#006600",
      "road_motorway": "#FF0044",
      "road_primary": "#FF8844",
      "road_secondary": "#FFCC44",
      "road_tertiary": "#FFF444",
      "road_residential": "#999999",
      "road_default": "#666666"
    }
    
  2. Ejecuta el generador de posters con -t fantasy.

4.2 Añadir una Nueva Capa de Mapa

Para insertar ferrocarriles antes de las carreteras:

# En create_map_poster.py después de la obtención de parks
try:
    railways = ox.features_from_point(point, tags={"railway": "rail"}, dist=dist)
except Exception:
    railways = None
if railways is not None and not railways.empty:
    railways.plot(ax=ax, color=THEME["railway"], linewidth=0.5, zorder=2.5)
Asegúrate de definir el color railway en tu JSON de tema.


5. Consideraciones de Rendimiento

  • Límites de distancia: Radios grandes ralentizan la descarga de datos desde OSM. Mantén -d ≤ 20 km para ejecuciones rápidas.
  • Caché: OSMnx borra automáticamente datos de OSM localmente. Ejecutar de nuevo la misma ciudad será notablemente más rápido.
  • Tipo de red: drive es el predeterminado; cambia a walk o bike para datos más ligeros.
  • DPI: Predeterminado 300 dpi; baja a 150 dpi para previsualizaciones rápidas.

6. ¿Por Qué Usar MapToPoster?

  • Sin sobrecarga: No se requieren registros ni claves API; todos los datos se traen directamente de OSM.
  • Control creativo: Los temas son modulares; los diseñadores pueden ajustar colores, degradados y tipografía.
  • Reproducible: El script es determinista—con las mismas entradas mostrará la misma imagen cada vez.
  • Impulsado por la comunidad: Con casi 5 k estrellas y 394 forks, el proyecto cuenta con apoyo activo de la comunidad.

7. Comienza Hoy

  1. Forkea el repositorio o cópialo localmente.
  2. Explora los temas existentes y ejecuta algunos ejemplos.
  3. Crea tu propio poster y compártelo en redes sociales o incrústalo en un blog.
  4. Contribuye: abre un issue si encuentras un bug o sugiere un nuevo tema, o envía un pull request con mejoras.

MapToPoster convierte la red de calles de una ciudad en una narrativa visual. Ya sea que estés creando guías de viaje, arte de fondo o ilustraciones académicas, este proyecto te brinda una forma rápida, escalable y hermosa de producir posters de mapas, todo potenciado por tecnología de código abierto.

¡Felices mapeos!

Artículo original: Ver original

Compartir este artículo