Trasformare i Dati di OpenStreetMap in Poster con prettymaps
A volte capita di imbattersi in librerie che sono semplicemente un piacere da guardare. Non risolvono complessi problemi aziendali o non accelerano i build di dieci volte — piuttosto, prendono dati geografici e li trasformano in grafiche che vorresti stampare e appendere al muro in una cornice.
Circa tre anni fa, le mappe circolari vettoriali delle città con colori pastello morbidi sono diventate virali su Reddit e Hacker News. Si è scoperto che questa estetica è stata creata da un piccolo script dello sviluppatore brasiliano Marcelo Prats. Il progetto si chiama prettymaps.

Sotto il cofano
La libreria è costruita su un semplice stack di strumenti. Recupera le feature geografiche grezze da OpenStreetMap usando osmnx, elabora la geometria dei poligoni con shapely e renderizza la composizione finale attraverso il familiare matplotlib. Per preparare i contorni vettoriali per le plotter, l'autore ha anche usato vsketch.
Invece di esportare manualmente i layer, filtrare i tag di strade, fiumi e edifici, configurare le proiezioni e combattere con gli stili degli assi di matplotlib, basta passare un indirizzo o delle coordinate e ottenere un disegno pronto all'uso.
Un quick start si presenta letteralmente così:
import prettymaps
plot = prettymaps.plot('Stad van de Zon, Heerhugowaard, Netherlands')
Una chiamata di funzione scarica i dati per l'area desiderata, li divide in layer e costruisce il plot.
Come personalizzare la mappa
La piena flessibilità della libreria si rivela nelle opzioni di messa a punto della funzione prettymaps.plot().

Ecco i parametri con cui lavorerai più spesso:
- layers definisce un dizionario di layer di OpenStreetMap. Qui imposti i tag usati per selezionare gli oggetti: corpi idrici (
natural: water), edifici (building: True), parchi, strade di diverse categorie o binari ferroviari. - style imposta le regole di rendering per ogni layer. Accetta parametri familiari di matplotlib: colore di riempimento (
fc), colore del tratto (ec), larghezza della linea (lw) e palette di colori pronte all'uso (palette). - circle, radius e dilate controllano i confini del canvas. Puoi ritagliare la mappa in un cerchio perfetto di un dato raggio in metri o lasciare un'area rettangolare.
- preset carica configurazioni di stile pronte all'uso (per esempio
default,minimal,macaootijuca) così non devi costruire uno schema di colori da zero.
Un esempio di configurazione di una località specifica:
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 funzione restituisce un oggetto dataclass Plot. All'interno troverai i geodataframe per ogni layer (geodataframes), così come i riferimenti agli oggetti matplotlib fig e ax. Questo è comodo se vuoi aggiungere le tue annotazioni, marker o etichette usando i metodi standard di plotting di Python.
Come eseguire senza scrivere codice
Se sei troppo pigro per scrivere codice o vuoi sfogliare rapidamente le palette per città diverse, il repository include un'interfaccia web pronta all'uso costruita con streamlit.
Installazione del pacchetto:
pip install prettymaps
Avvio dell'interfaccia:
streamlit run app.py
Per esperimenti interattivi, l'autore ha preparato un notebook per marimo (una moderna alternativa a Jupyter). Puoi aprirlo localmente con il comando marimo edit notebooks/tutorial.py o eseguirlo direttamente in Google Colab tramite il link nella documentazione.

Casi d'uso pratici
La prima applicazione che viene in mente è l'arte generativa e il merchandising. Mappe di città natali, quartieri o luoghi memorabili in uno stile minimalista funzionano benissimo per poster, cartoline e magliette. Poiché la libreria supporta l'esportazione di contorni vettoriali, puoi inviare le grafiche a pen plotter e incisori.
Il secondo scenario è il design di report e presentazioni. Se stai conducendo uno studio urbano, analizzando l'accessibilità del trasporto pubblico o costruendo una dashboard immobiliare, le tile di mappe standard spesso sembrano sovraccariche. Qui puoi mantenere solo i contorni degli isolati e dei corpi idrici, colorandoli rigorosamente con i colori del tuo brand.
Licenza e considerazioni importanti
Il progetto ha un paio di cose che vale la pena conoscere prima di adottarlo.
Il codice è distribuito sotto la licenza GNU AGPL v3.0. Questo comporta degli obblighi: se usi la libreria su un backend di un servizio di rete, dovrai rendere open-source quel servizio.
Quando esporti immagini, devi mantenere l'attribuzione a OpenStreetMap e al repository stesso — questa è un requisito diretto della licenza dei geodati. L'autore del repository si oppone anche in linea di principio all'uso del suo generatore per la vendita di NFT e lo evidenzia specificamente nel README.
Ne vale la pena provare
La libreria svolge il suo compito in modo eccellente. Se hai mai avuto bisogno di creare una bella mappa della città senza lavoro manuale in Illustrator o QGIS, prettymaps ti farà risparmiare diverse ore di lavoro.
Per iniziare, basta installare il pacchetto tramite pip e seguire alcuni esempi da Colab. Il progetto funziona con Python 3.11+, recupera i dati in modo affidabile tramite l'API OSM e produce risultati prevedibili.
Progetti correlati