Skip to Content

QGIS - Concevoir une jolie carte de flux

Niveau Intermédiaire
Logiciels utilisés QGIS
Plugin MMQGIS
Plateforme Windows | Mac | Linux | FreeBSD

Les cartes de flux, notamment les mappemondes montrant de jolies liaisons courbes, sont difficiles à réaliser. Anita Graser proposait il y a quelques temps une méthode pour les réaliser avec PostGIS, mais avec la disponibilité de QGIS 2.0 il est désormais possible de le faire directement et plus simplement.

Pour rester dans la thématique des liaisons aériennes, nous allons utiliser le jeu de données diffusé par OpenFlights. On en a extrait deux fichiers : la localisation des aéroports et le nombre de routes aériennes les reliant deux à deux, pour pouvoir travailler sur un exemple simple mais réel.

Fichiers utiles :

Le principe de création de cette carte de flux est le suivant :

  1. Conversion du fichier texte en couche de points projetée spécialement
  2. Génération des lignes de flux
  3. Densification de ces lignes pour permettre la courbure
  4. Changement de projection pour revenir à une représentation habituelle

1. Conversion des fichiers texte en couches de points projetées spécialement

La première étape consiste à convertir le fichier csv (texte délimité) des aéroports en fichier de formes de points. On peut le faire simplement dans QGIS 2 en utilisant le menu "Couche" puis "Ajouter une couche de texte délimité".

Le paramétrage est simple : il s'agit d'un fichier délimité par des virgules (csv), les coordonnées X des points sont dans le champ nommé "long", les Y dans le champ "lat".

Une fois importé, ce fichier devient une couche SIG localisant les aéroports dans le monde.

On va ensuite créer une projection personnalisée pour pouvoir projeter cette couche spécifiquement : une projection conique équidistante, centrée sur le pôle nord. Les lignes aériennes, crées dans cette projection, apparaîtront sous la forme de belles courbes (des loxodromes ou grands cercles) sur une projection plus conventionnelle.

Dans QGIS 2, il faut aller chercher le menu "Préférences" puis "Projection personnalisée".

Les paramètres Proj4 sont :

"+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs"

Enfin, on enregistre la couche aéroport en tant que fichier de formes dans cette projection :

Lorsque l'on démarre un nouveau projet QGIS et que l'on charge ce nouveau fichier, on obtient une représentation nouvelle :

Après le fichier des aéroports, il faut maintenant créer un second fichier de formes, à partir des liaisons, pour pouvoir créer les lignes aériennes entre aéroports.

Pour cela, on va tout d'abord charger le second fichier texte, contenant les liaisons, en utilisant la même fonction d'importation de couche de texte délimité, mais cette fois en précisant qu'il n'y a pas de géométrie. On obtient une table de données que l'on va devoir géolocaliser en utilisant le premier fichier.

La création des lignes, qui sera expliquée dans la partie suivante, nécessite la présence de deux fichiers de formes de points : des "moyeux" (hubs) auxquels seront reliés des "rayons" (spokes), selon la métaphore de la roue de vélo. Si cette technique est à la base prévue pour la création de cartes "en oursins", il est tout à fait possible de réaliser des lignes simples.

Il faut donc créer un second fichier de formes de points, regroupant les aéroports de destination des liaisons aériennes, que l'on pourra ensuite utiliser pour réaliser les liaisons en le comparant avec le fichier des aéroports d'origine.

Pour ajouter une géométrie de point aux aéroports de destination du fichier des liaisons, le plus simple est de réaliser une jointure avec le fichier des aéroports, sur le champ dst_apt_id :


Ensuite, on va enregistrer le résultat de cette jointure, en ne sélectionnant que les aéroports de destination, ceux où la jointure contient des données, dans un nouveau fichier de formes, en gardant la même projection : destinations.shp (Par exemple en ouvrant la table d'attributs, puis en triant les entités selon le champ liaisons_nbroutes, en ne sélectionnant que les valeurs non nulles, et en enregistrant la sélection par le menu "couche").

2. Générer les lignes de flux entre aéroports

La création concrète des géométries linéaires des liaisons aérienne est faite par le biais d'un plugin, MMQGIS de Michaël Minn : http://michaelminn.com/linux/mmqgis/

Ce plugin contient de nombreuses fonctionnalités, celle qui nous intéresse s'appelle "Hub lines".


Dans notre cas, on va créer des lignes entre les points du fichier aéroports, qui seront les points d'origine des liaisons, et les points du fichier destinations.shp, en utilisant l'identifiant des aéroports comme champ de connexion.
 

3. Densification des lignes

Pour que les liaisons aériennes adoptent de belles formes courbes une fois la projection revenue à un système plus courant, il faut que les géométries linéaires qui les composent soient complexifiées, comportant des séries de segments de ligne, plutôt qu'un seul segment entre deux points.

Cette opération de densification se réalise directement sous QGIS 2 par le menu "Vecteur", puis "Outls de géométrie" et enfin "Densification".

Le seul paramètre concerne le nombre de subdivisions à créer. C'est dommage de ne pas pouvoir utiliser une distance plutôt qu'un nombre, car nos liaisons aériennes présentent des longueurs très variables. Pour que l'effet de courbure soit assez lisse tout en ne créant pas un fichier trop lourd, on peut choisir une valeur entre 40 et 100 points de plus par ligne. On enregistre le résultat dans un nouveau fichier, pour éventuellement pouvoir choisir une nouvelle valeur plus tard.

Le résultat, en mode édition :


4. Changement de projection pour revenir à une représentation habituelle


Pour que nos liaisons affectent l'aspect de courbes, de grands cercles, il faut maintenant revenir à une projection plus adaptée. Puisque nous cherchons à représenter des données mondiales, on peut choisir une projection de type équivalente, qui va conserver les rapports de surface, pour éviter d'avoir une déformation inutile des continents.

La projection Eckert-IV est assez courante et produit une image équilibrée des continents. On peut l'ajouter à QGIS 2 par la même procédure que précédemment, par le menu "Préférences".

 

"+proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs"

Si l'on superpose ces lignes aériennes sur un fond mondial simplifié, que l'on utilise un style d'affichage proportionnel à la valeur du nombre de liaisons et légèrement transparent, on commence à voir apparaître une représentation utilisable. Pour améliorer la représentation, il faudra filtrer, ne garder que certaines liaisons par une sélection géographique ou quantitative, ou bien rendre la représentation interactive.

Le problème des liaisons aériennes traversant la ligne de changement de date dans le Pacifique peut être réglé en coupant ces lignes à la main.

Site officiel : QGIS

Commentaires

carte piézomètrique

Bonjour
Merci pour ce tutoral
Moi j'aimerai faire une carte piézomètrique avec QGIS j'ai suivi votre tutoral mais je suis bloqué juste après avoir ajouté la couche de texte délimité. Pour ajouter la seconde couche et puis pour faire la jointure je ne parvenais pas.

S'il vous plaît aider moi!

Merci d'avance

Résoudre le problème des liaisons manquantes

Bonjour,

Bravo pour cette manip, c'est très bien imaginé !

Pour répondre au problème des liaisons :
1. Exporter les (X,Y) des centroïdes de la couche aéroports
2. Faire la jointure entre origines et destinations sous Access (conserver les (X,Y) des centroïdes dans la base) : on se retrouve avec un aéroport d'origine et un de destination, plus les coordonnées de l'aéroport d'origine, pour chacune des 39168 liaisons)
3. Importer la base sous QGIS, la transformer en couche (Outils de création de vecteur --> Couche de points depuis une table)
4. Dupliquer la couche obtenue
4. On peut construire les oursins, avec : Hub point layer = aéroport de destination de la première couche et spoke point layer = aéroport d'origine de la deuxième couche (ça ne marche que dans ce sens-là, j'ignore pourquoi).
J'ai suivi cette méthode pour des collaborations scientifiques entre les régions européennes, ça a fonctionné.

Pour déplacer les flux qui se chevauchent, il y a un "Outil de Noeud" en mode édition, qui permet de rajouter un noeud au milieu de la ligne (double-clic), puis de "tirer" sur le noeud pour la rendre courbe. Idéal pour la fignolage de la carte !

Creation de lignes entre des points avec Qgis

Bonjour,
Travaillant sur quelques algorithmes de creation de liens entre des points d'une population donnee, je souhaite afficher proprement mes resultats avec QGIS.
J'ai pour l'instant reussi a afficher mes points sur une carte mais je n'arrive pas a afficher les connexions.
En entree, je dispose:
- d'un tableau Excel avec les identifiants de chaque points, la longitude et la latitude
- d'un deuxieme tableau Excel avec deux colonnes: la premiere contenant les identifiants des points de depart et la deuxieme les identifiants des points d'arrivee. Chaque ligne de ce tableau represente donc une ligne a creer dans QGIS:

J'ai attentivement lu votre tutoriel et je pense qu'il peut repondre a mon probleme. Mais je n'ai pour l'instant pas reussi a obtenir ce que je voulais.
Pouvez vous m'aider?
Cordialement,

carte flux

Comment réaliser une carte de flux avec mapinfo????
Merci pour vos remarques!!!

Cmt puis je avoir ce tutoriel

Cmt puis je avoir ce tutoriel domil vous plait

Perte déplacement

Bonjour,
Il me semble que le problème vient de la jointure de "liaisons" avec les aéroports puisque QGIS logiquement, en cas de non unicité de l'identifiant, ne considère que la première valeur.

Finallement, si je ne me trompe pas, on passe de 39168 valeurs a seulement 7663 dans "aéroport".

Affectation réseau

Bonjour à tous,

Tout d'abord merci pour ce tutorial d'une grande qualité!
Pour aller plus loin, sur Qgis, existe t-il la possibilité d'affecter ces déplacements / flux sur un réseau de lignes?
A bientôt!

Problème avec liaison

Bonjour,

J'ai rencontré un problème en effectuant cet exercice.
Lorsqu'on fait la liaison entre le fichier "liaison_t" ou "liaison_p6" avec la couche aeroport, n'apparait pas toutes les liaisons dans la table des aeroports. Est-ce normal?
Que peut-on faire si on veut faire apparaître tout les liaisons d'un aeroport vers l'ensemble des aeroports?

Merci d'avance

Bonjour et merci pour ce

Bonjour et merci pour ce tutoriel !

Cette méthode est-elle applicable uniquement lorsqu'il s'agit d'analyse de flux internationale ?

J'ai tenté en effet de la reproduire pour cartographier les flux de patients dans la région francilienne, mais je n'arrive pas à courber les lignes de flux lors du changement de projection.

Je vous remercie

Candy Jangal

C'est une très belle méthode

C'est une très belle méthode et assez simple.
Par contre, quand à partir des liaisons vous créez la couche vectoriel, comment ne pas inclure de géométrie alors que l'opération ne se fait pas sans ?

perte d'information ?

Bonjour,

Tout d'abord merci beaucoup pour ce petit tutoriel très bien documenté.
Par contre, je me pose une question concernant la représentation des liaisons aériennes :
- On peut recenser 39 287 liaisons dans le fichier "liaisons_t.csv"
- Après manipulations on se retrouve avec 3 175 objets linéaires représentant ces liaisons (cf image fin du 2.)

N'y a-t-il pas là un problème de perte d’information ?

Bonjour, en effet, cela est

Bonjour, en effet, cela est du à la jointure entre les liaisons aériennes et les points des aéroports, je pense que le plugin de création des lignes ne tient pas compte des doublons.

Poster un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.