Transformer des données OpenStreetMap en affiches avec prettymaps
Parfois, on tombe sur des bibliothèques qui sont tout simplement un plaisir à regarder. Elles ne résolvent pas des problèmes d'entreprise complexes ni n'accélèrent les builds de dix fois — elles prennent des géodonnées et les transforment en graphiques que vous avez envie d'imprimer et d'accrocher au mur dans un cadre.
Il y a environ trois ans, des cartes de villes circulaires vectorielles aux couleurs pastel douces sont devenues virales sur Reddit et Hacker News. Il s'est avéré que cette esthétique a été créée par un petit script du développeur brésilien Marcelo Prates. Le projet s'appelle prettymaps.

Sous le capot
La bibliothèque repose sur une pile d'outils simple. Elle récupère les caractéristiques géographiques brutes d'OpenStreetMap via osmnx, traite la géométrie des polygones avec shapely, et effectue le rendu de la composition finale via matplotlib familier. Pour préparer les contours vectoriels pour les traceurs, l'auteur a également utilisé vsketch.
Au lieu d'exporter manuellement les couches, de filtrer les tags de routes, de rivières et de bâtiments, de configurer les projections et de se battre avec les styles d'axes matplotlib, vous passez simplement une adresse ou des coordonnées et obtenez un dessin prêt à l'emploi.
Un démarrage rapide ressemble littéralement à ceci :
import prettymaps
plot = prettymaps.plot('Stad van de Zon, Heerhugowaard, Netherlands')
Un seul appel de fonction télécharge les données pour la zone souhaitée, les découpe en couches et construit le graphique.
Comment personnaliser votre carte
La flexibilité complète de la bibliothèque se révèle dans les options de paramétrage fin de la fonction prettymaps.plot().

Voici les paramètres avec lesquels vous travaillerez le plus souvent :
- layers définit un dictionnaire de couches OpenStreetMap. Ici, vous définissez les tags utilisés pour sélectionner les objets : masses d'eau (
natural: water), bâtiments (building: True), parcs, rues de différentes catégories ou voies ferrées. - style définit les règles de rendu pour chaque couche. Cela accepte les paramètres matplotlib familiers : couleur de remplissage (
fc), couleur de contour (ec), largeur de ligne (lw) et palettes de couleurs prêtes à l'emploi (palette). - circle, radius et dilate contrôlent les limites du canevas. Vous pouvez recadrer la carte en un cercle parfait d'un rayon donné en mètres ou laisser une zone rectangulaire.
- preset charge des configurations de style prêtes à l'emploi (par exemple,
default,minimal,macaooutijuca) afin que vous n'ayez pas à construire un schéma de couleurs à partir de zéro.
Un exemple de configuration d'un lieu spécifique :
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 fonction renvoie un objet dataclass Plot. À l'intérieur, vous trouverez des géodataframes pour chaque couche (geodataframes), ainsi que des références aux objets matplotlib fig et ax. C'est pratique si vous souhaitez ajouter vos propres annotations, marqueurs ou étiquettes en utilisant les méthodes de traçage Python standard.
Comment exécuter sans écrire de code
Si vous êtes trop paresseux pour écrire du code ou souhaitez parcourir rapidement les palettes pour différentes villes, le dépôt inclut une interface web prête à l'emploi construite avec streamlit.
Installation du package :
pip install prettymaps
Lancement de l'interface :
streamlit run app.py
Pour les expériences interactives, l'auteur a préparé un notebook pour marimo (un remplacement moderne de Jupyter). Vous pouvez l'ouvrir localement avec la commande marimo edit notebooks/tutorial.py ou l'exécuter directement dans Google Colab via le lien dans la documentation.

Cas d'utilisation pratiques
La première application qui vient à l'esprit est l'art génératif et le merchandising. Les cartes de villes natales, de quartiers ou de lieux mémorables dans un style minimaliste fonctionnent très bien pour les affiches, les cartes postales et les t-shirts. Comme la bibliothèque prend en charge l'exportation des contours vectoriels, vous pouvez envoyer les graphiques vers des traceurs à stylo et des graveurs.
Le deuxième scénario est la conception de rapports et de présentations. Si vous effectuez une étude urbaine, analysez l'accessibilité des transports ou créez un tableau de bord immobilier, les tuiles de cartes standard ont souvent l'air surchargées. Ici, vous pouvez ne conserver que les contours des îlots urbains et des masses d'eau, en les colorant strictement dans les couleurs de votre marque.
Licence et remarques importantes
Le projet présente quelques points à connaître avant de l'adopter.
Le code est distribué sous licence GNU AGPL v3.0. Cela implique des obligations : si vous utilisez la bibliothèque sur un backend d'un service réseau, vous devrez rendre ce service open source.
Lors de l'exportation d'images, vous devez conserver l'attribution à OpenStreetMap et au dépôt lui-même — c'est une exigence directe de la licence des géodonnées. L'auteur du dépôt s'oppose également farouchement à l'utilisation de leur générateur pour la vente de NFT et le souligne spécifiquement dans le README.
Cela vaut-il la peine d'essayer
La bibliothèque fait parfaitement son travail. Si vous avez déjà eu besoin de créer une belle carte de ville sans travail manuel dans Illustrator ou QGIS, prettymaps vous fera gagner plusieurs heures de travail.
Pour commencer, installez simplement le package via pip et parcourez quelques exemples depuis Colab. Le projet fonctionne avec Python 3.11+, récupère les données de manière fiable via l'API OSM et produit des résultats prévisibles.
Projets similaires