Convirtiendo datos de OpenStreetMap en pósters con prettymaps
A veces te encuentras con bibliotecas que son simplemente un placer visual. No resuelven problemas empresariales complejos ni aceleran compilaciones diez veces — en cambio, toman geodatos y los convierten en gráficos que quieres imprimir y colgar en tu pared con un marco.
Hace unos tres años, los mapas circulares vectoriales de ciudades con colores pastel suaves se viralizaron en Reddit y Hacker News. Resultó que esta estética fue creada por un pequeño script del desarrollador brasileño Marcelo Prates. El proyecto se llama prettymaps.

Bajo el capó
La biblioteca está construida sobre un conjunto simple de herramientas. Obtiene características geográficas sin procesar de OpenStreetMap usando osmnx, procesa geometría de polígonos con shapely, y renderiza la composición final a través de matplotlib. Para preparar contornos vectoriales para trazadores, el autor también usó vsketch.
En lugar de exportar capas manualmente, filtrar etiquetas de carreteras, ríos y edificios, configurar proyecciones y luchar con los estilos de ejes de matplotlib, simplemente pasas una dirección o coordenadas y obtienes un dibujo listo para usar.
Un inicio rápido se ve literalmente así:
import prettymaps
plot = prettymaps.plot('Stad van de Zon, Heerhugowaard, Netherlands')
Una llamada a la función descarga los datos del área deseada, los divide en capas y construye el gráfico.
Cómo personalizar tu mapa
La flexibilidad completa de la biblioteca se revela en las opciones de ajuste fino de la función prettymaps.plot().

Aquí están los parámetros con los que más trabajarás:
- layers define un diccionario de capas de OpenStreetMap. Aquí estableces las etiquetas usadas para seleccionar objetos: cuerpos de agua (
natural: water), edificios (building: True), parques, calles de diferentes categorías o vías férreas. - style establece reglas de renderizado para cada capa. Esto acepta parámetros familiares de matplotlib: color de relleno (
fc), color de trazo (ec), ancho de línea (lw) y paletas de colores listas para usar (palette). - circle, radius y dilate controlan los límites del lienzo. Puedes recortar el mapa en un círculo perfecto de un radio dado en metros o dejar un área rectangular.
- preset carga configuraciones de estilo listas para usar (por ejemplo,
default,minimal,macaootijuca) para que no tengas que construir un esquema de colores desde cero.
Un ejemplo de configuración de una ubicación específica:
plot = prettymaps.plot(
'Praça Ferreira do Amaral, Macau',
circle=True,
radius=1100,
layers={
"water": {"tags": {"natural": ["water", "bay"]}},
"building": {"tags": {"building": True}},
},
style={
"water": {"fc": "#a1e3ff", "ec": "#2F3737"},
"building": {"palette": ["#FFC857", "#E9724C", "#C5283D"]},
},
)
La función devuelve un objeto dataclass Plot. Dentro encontrarás geodataframes para cada capa (geodataframes), así como referencias a los objetos fig y ax de matplotlib. Esto es útil si quieres agregar tus propias anotaciones, marcadores o etiquetas usando métodos estándar de trazado de Python.
Cómo ejecutar sin escribir código
Si eres demasiado perezoso para escribir código o quieres cambiar rápidamente entre paletas para diferentes ciudades, el repositorio incluye una interfaz web lista para usar construida con streamlit.
Instalando el paquete:
pip install prettymaps
Lanzando la interfaz:
streamlit run app.py
Para experimentos interactivos, el autor preparó un notebook para marimo (un reemplazo moderno para Jupyter). Puedes abrirlo localmente con el comando marimo edit notebooks/tutorial.py o ejecutarlo directamente en Google Colab a través del enlace en la documentación.

Casos de uso prácticos
La primera aplicación que viene a la mente es el arte generativo y la mercancía. Los mapas de ciudades natas, vecindarios o lugares memorables en un estilo minimalista funcionan muy bien para pósters, postales y camisetas. Dado que la biblioteca soporta exportar contornos vectoriales, puedes enviar los gráficos a trazadores de plumas y grabadores.
El segundo escenario es el diseño de informes y presentaciones. Si estás realizando un estudio urbano, analizando la accesibilidad del transporte o construyendo un dashboard inmobiliario, los mosaicos de mapas estándar a menudo se ven sobrecargados. Aquí puedes mantener solo los contornos de las manzanas y cuerpos de agua, coloreándolos estrictamente con los colores de tu marca.
Licencia y notas importantes
El proyecto tiene un par de cosas que vale la pena conocer antes de adoptarlo.
El código se distribuye bajo la licencia GNU AGPL v3.0. Esto conlleva obligaciones: si usas la biblioteca en el backend de un servicio de red, necesitarás hacer código abierto ese servicio.
Al exportar imágenes, debes preservar la atribución a OpenStreetMap y al propio repositorio — esto es un requisito directo de la licencia de geodatos. El autor del repositorio también se opone fundamentalmente a usar su generador para vender NFTs y específicamente lo destaca en el README.
¿Vale la pena probar?
La biblioteca hace su trabajo excelentemente. Si alguna vez has necesitado crear un hermoso mapa de ciudad sin trabajo manual en Illustrator o QGIS, prettymaps te ahorrará varias horas de trabajo.
Para comenzar, simplemente instala el paquete a través de pip y recorre algunos ejemplos de Colab. El proyecto funciona con Python 3.11+, obtiene datos de manera confiable a través de la API de OSM y produce resultados predecibles.
Proyectos relacionados