mardi 1 décembre 2015

Une étoile est née : construire des cartes thématiques en points étoilés


Jean Jacques Jesua (La Poste) est une "star" des sciences de la cartographie et plus généralement de la "dataviz". Il nous fait l'amitié de nous livrer ici une méthode insolite et originale pour représenter de façon claire des informations attributaires binaires sur une base de points localisés. Voici le brillant topo qu'il propose :


Les systèmes d’information géographique offrent à ses utilisateurs de nombreuses possibilités d’analyses thématiques. Selon la nature de la variable que l’on souhaite visualiser et selon la nature de l’objet cartographique à thématiser on utilise le plus souvent un dégradé de couleurs (carte choroplèthe), des valeurs individuelles, des symboles proportionnels, la densité de points ou encore des histogrammes/camemberts…

1/ Le problème et son principe de résolution

J’ai été confronté à un problème de représentation qu’aucune des méthodes courantes ne représente de façon satisfaisante i.e. lisible. Je souhaitais visualiser pour un ensemble de bureaux de Poste (objets points), une série de caractéristiques de ces bureaux, en l’occurrence les équipements disponibles pour le public (Automates postaux et bancaire, présence d’un conseiller financier, …). Le fichier de départ est donc une matrice avec en ligne les bureaux et en colonne les équipements :



L’idée est donc de cartographier simultanément l’ensemble des équipements pour tous les bureaux de Poste. L’utilisateur pourra ainsi localiser les bureaux qui possèdent tous les équipements ou ceux qui sont partiellement équipés : 1 et 4, …
On pourrait imaginer faire une carte par équipement ce qui reviendrait à comparer les cartes entre-elles. Mais l’objectif est la simultanéité dans une seule carte interactive. L’interactivité permet à l’utilisateur de zoomer où il le souhaite et de choisir les équipements qu’il souhaite étudier.
On pourrait également déterminer toutes les combinaisons existantes et représenter le résultat en valeur individuelles. Mais plus le nombre d’équipements est grand, plus le nombre de combinaisons est important rendant la carte illisible (4 équipement = 16 combinaisons !).


Pour répondre à ces objectifs de simultanéité et de lisibilité, je propose de faire une carte en étoile. Chaque bureau est représenté par une étoile avec autant de branches qu’il possède d’équipement.







Voici ce que cela donne sur le 17ème arrondissement de Paris. Dans cet exemple, il existe 6  équipements. Un bureau possède les 6 équipements, deux bureaux en ont 4 et deux autres en ont 2 seulement.

Stars postales à la place de l'Etoile (Paris)
NB : Les données sont fictives aléatoires.
Cliquez pour accéder à la carte interactive des points étoilés


2/ Détermination des branches

Chaque branche symbolise donc un équipement. Positionnée sur un cercle, elle est déterminée par un centre (coordonnées du bureau), par la longueur d’un rayon et par un angle. Toutes les branches ayant la même orientation (et la même couleur) indiqueront tous les bureaux ayant cet équipement.

Le problème revient donc à calculer les coordonnées des sommets de chacune des branches.
Pour rendre le problème générique, adoptons les notations suivantes :
·        R = rayon en mètres, je propose 200 mètres pour le cas des bureaux de Poste mais à adapter selon le nombre de points à représenter.
·        K = nombre d’équipements maximum.
·        Ѳ = 360 / K  l’angle qui nous permet de découper le cercle en K équipements. Pour K=6, on aura  Ѳ =60°  comme dans la carte en exemple.

La position des bureaux est exprimée par une longitude (x0) et une latitude (y0)  en projection WGS84 (EPSG 4326).


Nos manuels de trigonométrie indiquent que les coordonnées d’un point sur le cercle sont données par :
 x1 = x0  +  R * cos(Ѳ)
.y1 = y0  +  R * sin(Ѳ)
.


Il est donc facile de déterminer les coordonnées des sommets des branches. Malheureusement (ou heureusement) la terre n’est pas plate. L’utilisation des coordonnées polaires entraîne des distorsions locales : le cercle est déformé. On pourrait penser convertir les coordonnées en Lambert 93 pour calculer x1 et y1 (x1=x0+R) mais ce travail est fastidieux et la projection Lambert ne s’applique pas dans les DOM où La Poste possède plus de 200 bureaux. Il est possible que la projection métrique « Projection du Monde » WGS84 EPSG 3857 permette de résoudre le problème plus simplement, le lecteur courageux pourra essayer...

Je préfère cependant utiliser des coordonnées sphériques. La question se résume à : comment calculer le rayon R fixe (de 200 mètres dans notre exemple) que l’on soit à Lille, Marseille, Fort de France ou Mamoudzou (Mayotte) ?
Pour la latitude, c’est très simple puisque les méridiens passent par les pôles. La circonférence de la terre étant de 40000 km, 1 degré représente donc  40000/360 = 111,111 km.
R mètres vaut donc R * 0,001 / 111,111 degrés.  200 mètres = 0,0018°

Pour la longitude, 1° dépend de la circonférence de la terre à cette latitude.
La formule pour calculer la circonférence d’une latitude L est :
2 * pi * cos(L) * 6378 (Rayon de la terre)
La circonférence de l’équateur est donc : 2 * pi * cos(0) * 6378 = 40074 km
La circonférence du 45° parallèle Nord est donc : 2 * pi * cos(45) * 6378 = 28336 km

Nous pouvons ainsi déterminer la valeur de 1°de longitude pour une latitude L
Comme 360°   vaut 2 * pi * cos(L) * 6378 km, 1° vaut donc   2*pi * cos(L) *17,71  km
Ainsi à Lille (latitude de 50,6°), 1° de longitude représente 70,6 km alors qu’à Nice (latitude de 43,7°),  1° de longitude représente 80,4 km

Nous calculerons  R mètres comme  R / (17710 * 2* pi * cos(L) ) degrés.

En résumé, les coordonnées des branches sont données par les 2 formules suivantes :
x1 = x0  + (R / (17710 * 2*pi * cos(y1)))* cos(Ѳ)
y1 = y0  + (R * 0,001 / 111,111) * sin(Ѳ)

Pour le programme informatique, il faut calculer d’abord y1 puis x1 (qui dépend de y1) et convertir les angles en radians (Ѳ°   est égal à   Ѳ * pi / 180)

Voici le code SAS pour calculer les coordonnées des sommets des branches (x1,y1). Pour cet exemple, nous avons 6 équipements que l’on place tous les 60° (360/6).
%LET K = 6  ;  *** Nb d’équipements  ;
%LET RAYON = 200 ; *** Rayon en mètres ;
%let PI = 3.14159 ;

*** La boucle suivante crée les K points sur le cercle ;
Teta = (360 / &K) * (&PI / 180);
Do k = 1 to &K;
y1 = y0 + &RAYON * (0.001/111.111) * SIN(TETA * (k-1));
x1 = x0 + &RAYON * 1 /(2*&PI.*COS(y1*&PI/180)*17710)*COS(TETA * (k-1)  );
Output ;





3/ Représentation cartographique des branches : les points étoilés

Ainsi pour chaque bureau, j’ai déterminé les coordonnées des différents équipements. Il reste donc à tracer les lignes partant du centre (bureau) vers les sommets (équipements).
Avec MapInfo et plus particulièrement l’outil SPIDERGRAPH (que l’on trouve dans le menu Outils / Gestionnaires d’outils), cela donne :


Deux fichiers sont nécessaires pour créer les lignes : les bureaux et les équipements. L’identifiant du bureau figure dans le fichier des équipements.


Il ne reste plus qu’à faire l’analyse thématique des lignes par valeurs individuelles en colorant chacune des branches :


Une dernière remarque pour clôturer : il faut veiller à bien calibrer le rayon en fonction de la densité de points et d’équipements et du niveau de zoom de la représentation.