Aller au contenu

sprezzature · études de cas

Cartes

Des planches de qualité publication pour n'importe quelle région du globe : relief réel, frontières réelles, et un fichier de configuration qu'on peut contester.

En cours de développement : les générateurs sont versionnés et chaque carte ci-dessous se reconstruit d'une seule commande, mais les choix cartographiques se révisent encore plateau par plateau : le placement des étiquettes, la force du relief et l'échelle de confiance ont tous bougé ce mois-ci. À lire comme des illustrations de la méthode, pas comme des appréciations opérationnelles.

← Toutes les études de cas

Les planches

Une carte de référence en couches pour n'importe quelle région : littoral, frontières internationales, toponymes, halo bathymétrique, échelle double (km et miles) et flèche du nord, sur une projection conique conforme de Lambert auto-centrée (conforme, donc les formes et les angles restent justes à l'échelle d'une ville ou d'une province). Les frontières basculent automatiquement entre les niveaux 50m et 10m de Natural Earth selon le zoom demandé. Posez des couches thématiques par-dessus et la planche devient un produit de desk géopolitique : aplats pastel classés avec liseré blanc, toponymes espacés, marqueurs de points chauds, axes d'avancée fuselés et légende flottante.

Chaque planche de zones de contrôle ci-dessous est schématique, le dit sur sa propre face, et garde ses lignes de revendication dans du Python lisible plutôt que dans un fichier de données opaque : un lecteur en désaccord voit exactement quelles coordonnées contester. Rien de tout cela n'est du renseignement. Les planches de référence et de passage stratégique n'affirment rien au-delà de la géographie de Natural Earth.

Région
Montre

Europe de l'Ouest : la démo de référence intégrée, frontières 50m, les Alpes en pleine texture de relief.
Le détroit d'Ormuz : le Golfe, le Zagros qui en sort d'un seul bloc, et trente-neuf kilomètres d'eau.
Les Caraïbes : deux océans reliés par soixante-dix-sept kilomètres d'isthme, et la mer que ferment les Antilles.
Himalaya : une planche tout en terres, sans mer pour contraster, si bien que le relief porte toute la planche.
Les Andes : un seul mur de montagne, et les trois climats qu'il fabrique : Amazonie, Altiplano, Atacama.
Le Sahel : là où le Sahara s'arrête — et le fleuve qui y entre à contresens.
La mer de Chine méridionale : le bassin, le plateau et les récifs — et délibérément aucune ligne de revendication.
Ibérie : Espagne et Portugal, l'exemple le plus clair de la technique de relief par texture.
Suisse, zoomée : une emprise assez petite bascule automatiquement au niveau de frontières 10m.
Ukraine : gouvernemental, occupé et contesté le long d'une ligne de contact approximative de 2024. Le réservoir de Kakhovka est dessiné comme ancien : il s'est vidé après la rupture du barrage du 6 juin 2023.
Soudan : la partition est–ouest de la guerre en cinq classes, avec les combats au Kordofan. Une avancée évaluée et une avancée rapportée, dessinées différemment.
Est de la RDC : qui tient les Kivus. Goma et Bukavu se font face à travers le lac Kivu, ce qui est précisément pourquoi le lac doit figurer sur la carte.
Syrie : un partage à quatre, instantané illustratif vers 2018.
Libye : loyalistes, rebelles et le croissant pétrolier contesté, vers le printemps 2011.

Chaque planche est produite par sprezzature-maps, à partir des constructeurs de scripts/build_situation_examples.py. La configuration de chacune est le kit de sa carte.

Choroplèthe

Une valeur par pays sur une projection Equal Earth écrite à la main sous forme close : elle restitue la propriété équivalente en surface qu'une simple équirectangulaire fait perdre discrètement (le Groenland n'y paraît pas quatorze fois sa taille réelle). La couleur vient d'une rampe interpolée en OKLCH, pas d'un lerp RVB canal par canal naïf, vérifiée sûre pour le daltonisme en simulant réellement le rendu plutôt qu'en l'affirmant. Une rampe divergente s'active automatiquement quand les données ont un zéro significatif. Par défaut, la rampe va d'un seul tenant de la plus petite valeur à la plus grande ; --classes la découpe en 2 à 12 classes, dont --method place les seuils (quantiles, intervalles égaux, Jenks ou head/tail), et la légende nomme la méthode employée. Une couche de relief chaud/froid (une véritable élévation GMTED2010, pas un estompage plat) se glisse sous les aplats.

Rampe séquentielle : bleu pâle à marine, la magnitude se lit à la seule clarté.
Rampe divergente : détectée automatiquement selon le signe des données, terracotta ↔ marine via un vrai zéro neutre.
À grande échelle : la couche de relief (Andes, Rocheuses, Alpes, Himalaya) se lit clairement une fois rendue plus grande.

Depuis sprezzature-maps, le paquet cartographique séparé de sprezzature-figures.

Cartes thématiques

D'autres techniques de glyphes et de cartogrammes de sprezzature-figures, superposées au même fond Natural Earth hors-ligne.

Choroplèthe bivariée : Deux variables mélangées sur une clé 3×3.
Carte à symboles proportionnels : Bulles à aire vraie (√) sur un fond de carte mondial.
Carte de flux / connexions : Arcs orthodromiques pondérés par le volume.
Carte à camemberts : Un petit camembert placé à chaque région.
Carte à mini-barres : De petits diagrammes en barres à chaque région.
Cartogramme en tuiles : Une tuile égale par pays, disposition géographique.
Divergente + annotée : Variation signée, gris pour données absentes, pays clés annotés.
Petits multiples : Un panneau par année, seuils de classes figés.

Pour la recherche sur les conflits : ACLED et UCDP, à la précision qu’ils enregistrent

Les deux jeux de données sur lesquels tourne la recherche sur les conflits — ACLED et l’UCDP Georeferenced Event Dataset — notent, à côté de chaque coordonnée, à quel point cette coordonnée est connue. ACLED code geo_precision de 1 à 3 ; UCDP code where_prec de 1 à 7. Ce ne sont pas des métadonnées de fichier : le 3 d’ACLED est un chef-lieu qui tient lieu de province entière, et le 6 d’UCDP veut dire que seul le pays est connu et que les coordonnées sont un point représentatif pour tout un État.

Les cartes de ces données dessinent tout cela avec le même point. C’est affirmer un coin de rue que la source n’a jamais donné, une fois par ligne, plusieurs centaines de fois par figure. Ici le code atteint la marque :

Un lieu nommé
Un disque plein cerclé de blanc. La marque veut dire ce qu’elle a toujours voulu dire : on connaît l’endroit.
Un lieu qui tient lieu de zone
Un anneau creux. Le vieux signal cartographique du « par ici », et contrairement à un disque de rayon inventé il n’affirme rien qu’il ne puisse soutenir. Quand le jeu de données énonce un rayon — le where_prec 2 d’UCDP dit environ 25 km — il est dessiné, à l’échelle du plateau.
Une région épinglée à son chef-lieu
Un anneau creux brisé : un pas de plus loin de « un lieu ». La date se dit de la même manière, depuis time_precision — « semaine du », « mois de », « en 2023 ».

Les lignes qu’on ne peut pas placer honnêtement ne sont pas placées. Une ligne UCDP en where_prec 6 se voit refuser un point par défaut, et le compte part sur la ligne de méthode du plateau au lieu de disparaître — une suppression silencieuse étant l’autre moitié de la même malhonnêteté.

Entre le fichier et la marque, il y a un appel. acled_events("soudan-2024.csv", derive_region=True) renvoie un fragment de configuration dont chaque clé était déjà lue par le générateur : cfg.update(...) suffit, et une configuration écrite à la main garde tout ce qu’elle dit. ucdp_events fait de même pour GED.

Les noms de colonnes, les plages de codes et la formulation de chaque code viennent du codebook ACLED et du codebook UCDP GED, lus plutôt que récités. Ce que ce paquet laisse délibérément à CShapes, PRIO-GRID, geoBoundaries et GeoPandas est listé dans LANDSCAPE.md.

Comment la choroplèthe et les cartes de situation sont construites

Chaque carte ci-dessus est un document SVG écrit à la main : pas de grammaire de graphiques, pas de navigateur headless, pas de tuiles externes récupérées au rendu. Tout ce qui est géographique est un fichier Natural Earth embarqué, hors-ligne.

Equal Earth, pas équirectangulaire
Une projection polynomiale sous forme close (Šavrič, Patterson & Jenny, 2018), équivalente en surface, pour que la surface colorée d'une choroplèthe ne mente pas discrètement sur la taille des pays.
Couleur OKLCH, pas un lerp RVB
Les rampes s'interpolent dans un espace perceptuellement uniforme (l'OKLab de Björn Ottosson), vérifiées sûres pour le daltonisme en simulant réellement la protanopie, la deutéranopie et la tritanopie sur le rendu final.
Natural Earth, 50m et 10m
Des frontières vectorielles du domaine public, embarquées hors-ligne. Les cartes de situation choisissent le niveau automatiquement selon le zoom de la région demandée.
Élévation réelle, pas un estompage plat
Les cartes de situation calculent leur relief à partir d'une véritable élévation GMTED2010 : un estompage directionnel mélangé à un texture shading (Brown, 2010 : un laplacien d'ordre fractionnaire appliqué dans le domaine fréquentiel), qui fait ressortir crêtes et réseaux de drainage à toutes les échelles à la fois, puis reteinté chaud pour les hauteurs / froid pour les ombres au lieu d'un gris plat. Reprojeté pixel par pixel dans la projection propre à chaque carte (une inverse analytique exacte pour la conique conforme de Lambert ; Newton-Raphson pour l'Equal Earth de la choroplèthe mondiale, qui n'a pas d'inverse sous forme close).
Des millimètres, pas des pixels
Nature demande 90 mm pour une colonne simple, Science 57. Demandez-en une et le fichier se pose à cette taille dans une maquette au lieu de celle qu’un lecteur devine — et la planche mesure sa plus petite étiquette contre cette largeur pour dire ce qu’elle fera vraiment. Tombée dans une colonne de 90 mm, une étiquette peut se composer à 1,6 pt et s’afficher sans broncher, parce qu’un fichier vectoriel le fait toujours.
Le PDF et l’EPS sortent dessinés, pas photographiés
Une image matricielle dans une enveloppe PDF satisfait l’extension et rien de ce qu’attend une revue, et personne ne s’en aperçoit avant d’avoir zoomé. L’export vectoriel passe par rsvg-convert, un paquet système optionnel. Sans lui, la page est quand même écrite à la bonne taille physique, avec un avertissement qui dit que c’est du matriciel et ce qu’il faut installer.

Données réelles : les cinq dernières présidentielles françaises

Le même moteur de cartes SVG écrit avec soin, sur des données réelles du Ministère de l'Intérieur : le score du vainqueur au second tour par département pour les cinq dernières présidentielles, sur une échelle bleue figée pour que les panneaux se comparent. 2002 (le sprezzature républicain face à l'extrême droite) est quasi uniforme ; 2012 (la plus serrée) est la plus pâle ; 2017 et 2022 montrent les départements plus clairs où Marine Le Pen a le mieux résisté.

Données réelles : les cinq dernières présidentielles françaises
Année Vainqueur % Battu·e %
2002 Jacques Chirac 82.21 Jean-Marie Le Pen 17.79
2007 Nicolas Sarkozy 53.06 Ségolène Royal 46.94
2012 François Hollande 51.64 Nicolas Sarkozy 48.36
2017 Emmanuel Macron 66.10 Marine Le Pen 33.90
2022 Emmanuel Macron 58.55 Marine Le Pen 41.45

Source : Ministère de l'Intérieur (résultats du 2ᵉ tour par département).

Techniques cartographiques (SVG écrit avec soin)

Quand une projection ou un glyphe sort d'une grammaire de graphiques, la même boucle pilote une carte en Scalable Vector Graphics (SVG) dessinée avec soin.

Carte à densité de points : Un point par N habitants dans des régions réelles.
Carte hexbin : Regroupement hexagonal de densité sur une carte.
Carte à pics : Des pics verticaux aux lieux, la hauteur selon la valeur.
Carte hexbin : Des séismes regroupés en hexagones selon leur nombre, dessinant la ceinture de feu.
Carte en grille : Une agrégation en cases carrées sur la géographie, colorées selon leur nombre.

Questions fréquentes

Comment installer sprezzature-maps ?

Lancez pip install sprezzature-maps (Python 3.10 à 3.13) : une seule commande installe les trois générateurs, la ligne de commande make-map, l'API HTTP, le serveur MCP et le Studio des cartes, et tire sprezzature-figures, dont il partage les polices et le code de rendu. Le paquet est gratuit et open source sous licence BSD 3-Clause.

Quels types de cartes sprezzature-maps dessine-t-il ?

sprezzature-maps dessine trois sortes de planches en SVG : un choropleth du monde en projection Equal Earth, une situation_map qui se centre sur n'importe quelle région en projection conique conforme de Lambert et superpose zones, événements et échelle en deux unités, et une carte density des lieux où sont tombés des événements ponctuels. make-map situation-new --country Moldova écrit une configuration de départ pour une nouvelle planche régionale.

D'où viennent les données cartographiques de sprezzature-maps ?

sprezzature-maps embarque sa géographie dans le paquet : frontières, côtes, lacs et fleuves de Natural Earth, altitudes GMTED2010 pour le relief, et unités administratives des États-Unis, de France, d'Allemagne, d'Italie et de Suisse. Vos propres nombres arrivent en lignes CSV, TSV ou JSON (un choroplèthe mondial repère les pays par leur code numérique ISO 3166-1), et acled_events et ucdp_events transforment un export ACLED ou UCDP GED en couche de carte de situation.

Comment le choroplèthe de sprezzature-maps classe-t-il les valeurs ?

Par défaut, le choroplèthe de sprezzature-maps étire une rampe de couleur de la plus petite valeur à la plus grande ; --classes (de 2 à 12) la découpe en classes, et --method place les seuils par quantile, equal, jenks ou headtail. La légende imprime les seuils et nomme la méthode employée, et une rampe divergente s'active d'elle-même quand les valeurs changent de signe.

sprezzature-maps fonctionne-t-il hors ligne ?

Oui : sprezzature-maps n'a besoin ni de serveur de tuiles, ni de clé d'API, ni de compte, car les fonds de carte et les altitudes sont embarqués, et le SVG final porte ses propres polices. Les seules étapes qui emploient un modèle sont make-map improve et la boucle de réparation du Studio, qui appellent par défaut un modèle de vision servi par Ollama sur votre machine.

De quoi sprezzature-maps a-t-il besoin en plus de pip ?

sprezzature-maps n'a besoin de rien d'autre pour rendre du SVG, du PNG ou du JPEG. Un PDF ou un EPS vectoriel passe par l'outil système rsvg-convert (librsvg) ; sans lui, le paquet écrit une page matricielle et le signale. make-map improve a besoin d'un modèle de vision local, atteint via best-engine-ai-helper et Ollama.

Peut-on utiliser sprezzature-maps sans Claude Code, par exemple en CI ?

Oui : sprezzature-maps est aussi une bibliothèque Python, une ligne de commande (make-map ou sprezzature-maps), une API HTTP avec image Docker et le serveur MCP sprezzature-maps-mcp ; la skill pour Claude Code n'est qu'une des cinq portes d'entrée. En CI, make-map audit relit les planches finies selon onze règles (classification nommée, seuils imprimés, date indiquée, titre) et sort avec le code 1 au moindre constat, avec --format json pour un programme.

En quoi sprezzature-maps diffère-t-il de Folium, kepler.gl ou QGIS ?

Folium et kepler.gl font des cartes que le lecteur déplace et zoome sur des tuiles ou une couche GPU, et QGIS est un SIG de bureau pour analyser la géographie ; sprezzature-maps dessine une planche statique, prête à publier, en un SVG autonome, et un audit qui la relit. S'il reste des jointures ou des zones tampons à calculer, ou si la carte doit bouger, ces outils sont le meilleur choix, comme le dit PAYSAGE.md dans le dépôt.