[How to] Comment tracer des flèches sur une carte avec Tableau ?

Tracer flèches carte Tableau

Introduction

Je n’aime pas écrire des intros. Personne ne les lit de toute façon. Laissez-moi simplement dire qu’aujourd’hui, je vais vous montrer l’une des façons de tracer des flèches sur une carte que j’ai utilisée pour l’un de mes projets personnels, et qui peut vous être utile à vous aussi. À la fin de ce tutoriel, vous serez en mesure de réaliser des cartes comme celle-ci :

Parlons d’abord de ce que nous allons faire et de la logique derrière. Car si vous comprenez que vous pouvez personnaliser vos flèches à votre goût (oui, je ne vais pas prétendre que mes flèches sont les plus belles, bien qu’elles le soient très certainement).

1. Les polygones !

Les polygones requièrent des ensembles ordonnés et fermés de coordonnées X, Y. Cela signifie que

  • Chaque flèche aura son propre identifiant unique
  • Chaque point de chaque flèche aura son propre identifiant unique.
  • Ces identifiants indiquera dans quel ordre la ligne sera tracée à travers ces points.

Et voici notre squelette de flèche.

Ici, vous pouvez voir les 8 points (l’ordre compte!): A, B, C, Z, D, E, F, Z.

Vous avez peut-être remarqué que nous avons deux Z ici : pour ce type de flèche, vous devez avoir une valeur deux fois, sinon vos points ne seront pas connectés correctement. Le dernier point sera automatiquement relié au premier. Ici, E est le point final et S est le point de départ de notre ensemble de données.

Nous aurons besoin de la structure des données sources suivante :

Identifiant flècheIdentifiant point XY
11(A1x coordinate)(A1y coordinate)
12(B1x coordinate)(B1y coordinate)
13(C1x coordinate)(C1y coordinate)
14(Z1x coordinate)(Z1y coordinate)
15(D1x coordinate)(D1y coordinate)
16(E1x coordinate)(E1y coordinate)
17(F1x coordinate)(F1y coordinate)
18(Z1x coordinate)(Z1y coordinate)
21(A2x coordinate)(A2y coordinate)
22(B2x coordinate)(B2y coordinate)

Nous allons placer la longitude dans les colonnes, la latitude dans les lignes, choisir le polygone comme type de graphique, glisser et déposer l’identifiant de la flèche dans le détail et l’identifiant du point dans le chemin.

2. Trigonométrie :

Pour calculer les coordonnées, nous utiliserons le théorème de Pythagore et la formule trigonométrique suivante :

    

Sur l’exemple du point A, je vais vous montrer comment trouver toutes les coordonnées, en connaissant les coordonnées du point S (point de départ) et du point E (point d’arrivée) ainsi que la longueur souhaitée de AS (n).

Nous pouvons calculer Ex-Sx et Ey-Sy puisque nous connaissons toutes les coordonnées nécessaires. Grâce à cela, nous pouvons également calculer la longueur de ES et AE :

We can find Ey-Ay and Ex-Ax:

Pour trouver Ax, il suffit alors de soustraire la valeur de Ex-Ax de la valeur de Ex. La même logique s’applique à Ay :

Si vous voulez personnaliser votre flèche, il suffit de la tracer différemment sur votre toile et de calculer les coordonnées en utilisant la même logique.

3. Longitude-latitude -> X-Y

  1. Il est également important de comprendre que la longitude-latitude ne peut pas être utilisée telle quelle pour les calculs en 2D. Nous devons d’abord les transformer en coordonnées X-Y, puis effectuer tous les calculs pour trouver les coordonnées X-Y de tous les points et enfin les transformer en valeurs de longitude-latitude.

Cet article explique la logique des calculs que j’ai utilisés dans mon classeur.

https://medium.com/@suverov.dmitriy/how-to-convert-latitude-and-longitude-coordinates-into-pixel-offsets-8461093cb9f5

Voici les formules que nous allons utiliser :

And reversed:

J’ai utilisé 1440 pixels comme valeur de largeur et 720 pixels comme valeur de hauteur. Je crois que le choix n’a pas vraiment d’importance puisque nous allons reconvertir les coordonnées en valeurs de longitude-latitude.

Création d’un ensemble de données

Maintenant, il est temps de commencer. Je vais prendre la longitude-latitude de 4 villes françaises et créer des flèches entre elles.

VilleLatitudeLongitude
Paris48.854993571074592.3346734272193794
Lille50.623745916737623.0110800296755196
Lyon45.685543354282894.853667452230858
Bordeaux44.79603794403178-0.547927769672152

Pour ce faire, je crée dans mon ensemble de données toutes les paires possibles de ces villes. Pour chaque paire, je vais également définir un n choisi au hasard, qui définira l’épaisseur des flèches. Voici ce que j’ai obtenu :

Départ de villeLatitude de débutLongitude de débutFin de villeLatitude de finLongitude de finnID flèche0
Paris48.854993571074592.3346734272193794Lille50.623745916737623.0110800296755196310
Paris48.854993571074592.3346734272193794Lyon45.685543354282894.853667452230858220
Paris48.854993571074592.3346734272193794Bordeaux44.79603794403178-0.547927769672152130
Lille50.623745916737623.0110800296755196Paris48.854993571074592.3346734272193794340
Lille50.623745916737623.0110800296755196Lyon45.685543354282894.853667452230858250
Lille50.623745916737623.0110800296755196Bordeaux44.79603794403178-0.547927769672152260
Lyon45.685543354282894.853667452230858Paris48.854993571074592.3346734272193794370
Lyon45.685543354282894.853667452230858Lille50.623745916737623.0110800296755196180
Lyon45.685543354282894.853667452230858Bordeaux44.79603794403178-0.547927769672152290
Bordeaux44.79603794403178-0.547927769672152Paris48.854993571074592.33467342721937943100
Bordeaux44.79603794403178-0.547927769672152Lille50.623745916737623.01108002967551961110
Bordeaux44.79603794403178-0.547927769672152Lyon45.685543354282894.8536674522308582120

ID flèche est un numéro unique par paire ville début – ville fin. La colonne 0 sera utilisée pour créer un produit cartésien avec la deuxième table. N’oubliez pas que nous devons avoir 8 lignes par ligne pour tracer nos 8 points.

La deuxième table ressemble à cela:

0Identifiant du point
01
02
03
04
05
06
07
08

Tout d’abord, nous devons créer une source de données. 12*8 nous donnes 96 lignes:

Après ça, vous pouvez cacher les deux colonnes 0, nous n’en aurons pas besoin :

Les calculs

Comme j’ai choisi 1440 pixels comme valeur de largeur et 720 pixels comme valeur de hauteur, nous pouvons déjà mettre ces valeurs dans nos formules :

Maintenant, nous avons tout pour calculer les coordonnées X-Y pour les points S et E :

Sx: 720+4*[Longitude de départ]

Sy: 360-720*LN(TAN(PI()/4+[Latitude de départ]*PI()/360))/PI()

Ex: 720+4*[Longitude de fin]

Ey: 360-720*LN(TAN(PI()/4+[Latitude de fin]*PI()/360))/PI()

La prochaine étape sera de calculer les distances entre Sx et Ex, Sy etEy, entre S et E et A(C) et E.

Nous utilisons l’ABS car notre flèche peut regarder dans n’importe quelle direction et nous voulons calculer la distance entre les points qui ne peut pas être négative.

Sx-Ex: ABS([Sx]-[Ex])

Sy-Ey: ABS([Sy]-[Ey])

D SE: SQRT(SQUARE([Sy-Ey])+SQUARE([Sx-Ex]))

D EA: SQRT(SQUARE([N])+SQUARE([D SE]))

Maintenant, nous pouvons commencer à créer nos points. Nous commençons par le point A. D’abord, nous calculons les distances Ax-Ey et Ax-Ex :

Ay-Ey: [D EA]*SIN(ASIN([Sy-Ey]/[D SE])-ASIN([N]/[D EA]))

Ax-Ex: SQRT(SQUARE([D EA])-SQUARE([Ay-Ey]))

Ensuite, en fonction de la position du point final par rapport au point de départ, nous ajouterons ou soustrairons la valeur de la distance aux coordonnées du point final :

Ay: IF [Ey] > [Sy] THEN [Ey]-[Ay-Ey] ELSE [Ey]+[Ay-Ey] END

Ax: IF [Ex] > [Sx] THEN [Ex]-[Ax-Ex] ELSE [Ex]+[Ax-Ex] END

Nous faisons le même procédé pour les autres points.

Cx-Ex: [D EA]*SIN(ASIN([Sx-Ex]/[D SE])-ASIN([N]/[D EA]))

Cy-Ey: SQRT(SQUARE([D EA])-SQUARE([Cx-Ex]))

Cx: IF [Ex] > [Sx] THEN [Ex]-[Cx-Ex] ELSE [Ex]+[Cx-Ex] END

Cy: IF [Ey] > [Sy] THEN [Ey]-[Cy-Ey] ELSE [Ey]+[Cy-Ey] END

Pour le point B, j’ai défini SB = n/2. Pour le calculer j’utilise la distance entre Sy et Ay

By-Ay: SIN(ASIN(ABS([Sy]-[Ay])/[N])-PI()/6)*SQRT(5)*[N]/2

Bx-Ax: SQRT(5*SQUARE([N])/4-SQUARE([By-Ay]))

By: IF [Sy] > [Ay] THEN [Ay]+[By-Ay] ELSE [Ay]-[By-Ay] END

Bx: IF [Sx] > [Ax] THEN [Ax]+[Bx-Ax] ELSE [Ax]-[Bx-Ax] END

J’ai fait dépendre le point Z d’une constante m. My m=1

On calcule les coordonnées de Z en utilisant la proportion D SE/m :

Zx-Ex: [Sx-Ex]*[m]/[D SE]

Zy-Ey: [Sy-Ey]*[m]/[D SE]

Zx: IF [Ex] > [Sx] THEN [Ex]-[Zx-Ex] ELSE [Ex]+[Zx-Ex] END

Zy: IF [Ey] > [Sy] THEN [Ey]-[Zy-Ey] ELSE [Ey]+[Zy-Ey] END

Nous avons les points D et F nous manquant.

En les reliant, on obtient le point O à l’intersection avec la ligne SE. J’ai défini FO=OD=m=OE/2

Dx-Ex: SQRT(5)*[m]*SIN(ASIN([Zx-Ex]/[m])-PI()/6)

Dy-Ey: SQRT(5*SQUARE([m])-SQUARE([Dx-Ex]))

Dx: IF [Ex] > [Sx] THEN [Ex]-[Dx-Ex] ELSE [Ex]+[Dx-Ex] END

Dy: IF [Ey] > [Sy] THEN [Ey]-[Dy-Ey] ELSE [Ey]+[Dy-Ey] END

Fy-Ey: SQRT(5)*[m]*SIN(ASIN([Zy-Ey]/[m])-PI()/6)

Fx-Ex: SQRT(5*SQUARE([m])-SQUARE([Fy-Ey]))

Fy: IF [Ey] > [Sy] THEN [Ey]-[Fy-Ey] ELSE [Ey]+[Fy-Ey] END

Fx: IF [Ex] > [Sx] THEN [Ex]-[Fx-Ex] ELSE [Ex]+[Fx-Ex] END

Maintenant, nous avons toutes nos coordonnées X-Y et il est temps de les convertir en valeurs de longitude et de longitude.

Comme j’ai choisi 1440 pixels comme valeur de largeur et 720 pixels comme valeur de hauteur, nous pouvons déjà mettre ces valeurs dans nos formules :

Alat: (ATAN(EXP((360-[Ay])*PI()/720))-PI()/4)*360/PI()

Alon: ([Ax]-720)/4

Blat: (ATAN(EXP((360-[By])*PI()/720))-PI()/4)*360/PI()

Blon: ([Bx]-720)/4

Clat: (ATAN(EXP((360-[Cy])*PI()/720))-PI()/4)*360/PI()

Clon: ([Cx]-720)/4

Dlat: (ATAN(EXP((360-[Dy])*PI()/720))-PI()/4)*360/PI()

Dlon: ([Dx]-720)/4

Flat: (ATAN(EXP((360-[Fy])*PI()/720))-PI()/4)*360/PI()

Flon: ([Fx]-720)/4

Zlat: (ATAN(EXP((360-[Zy])*PI()/720))-PI()/4)*360/PI()

Zlon: ([Zx]-720)/4

Enfin, nous devons créer des champs calculés pour collecter toutes les valeurs de longitude et de latitude dans un ordre correct.

Longitude: CASE [Point id] WHEN 1 THEN [Blon] WHEN 2 THEN [Clon] WHEN 3 THEN [Zlon] WHEN 4 THEN [Dlon] WHEN 5 THEN [End Longitude] WHEN 6 THEN [Flon] WHEN 7 THEN [Zlon] WHEN 8 THEN [Alon] END

Latitude: CASE [Point id] WHEN 1 THEN [Blat] WHEN 2 THEN [Clat] WHEN 3 THEN [Zlat] WHEN 4 THEN [Dlat] WHEN 5 THEN [End Latitude] WHEN 6 THEN [Flat] WHEN 7 THEN [Zlat] WHEN 8 THEN [Alat] END

Création de flèches

Nous devons changer le rôle géographique pour les deux derniers champs calculés :

Choisissez maintenant un graphique polygonal, faites glisser et déposez la longitude dans les colonnes, la latitude dans les rangées, l’identifiant de la flèche dans le détail et l’identifiant du point dans le chemin.

Egalement, pouvez également expérimenter avec les couleurs, l’opacité, les bordures et d’autres caractéristiques pour rendre vos flèches plus belles.

Résultat:

Amusez-vous bien !

Obtenez une démo gratuite Tableau, l’outil de data visualization vous aidera à voir et comprendre vos données sur une seule plateforme facile à utiliser !

Remplissez le formulaire pour une démo gratuite !

Author Profile

Olga Kutcenko
Olga Kutcenko

Laissez un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.