lundi 12 septembre 2011

Generic Mapping Tools (GMT) pour tracer des cartes sous Ubuntu

GMT (Generic Mapping Tools) est une collection d'outils libres et multi-plateformes permettant la génération de cartes et de diagrammes. Regroupant de l'ordre de 60 programmes en ligne de commande elle offre de nombreuses possibilités telles la création de cartes selon différentes projections, la représentation de données géographiques, la génération de graphiques et même la représentation en 3D.

Pour avoir un aperçu des possibilités, je vous renvoi vers les exemples, et en particulier celui-la ou cet autre ou encore ce dernier

Je vais me contenter dans cet article d'aborder les fonctions de base pour la génération de cartes. Pour les autres la documentation offcielle est très fournie. Vous y trouverez un manuel de référence, un tutoriel très bien fait et les nombreuses pages de man.

Avant de rentrer dans le vif du sujet, voici ce que vous devriez être capable de produire à  la fin : Manche

Installation & configuration

GMT étant présent dans les dépots, il vous suffit d'installer les paquets gmt, gmt-coastline-data, gmt-doc, gmt-examples et gmt-tutorial ces 3 derniers ne sont pas nécessaires, mais je vous les recommande tant la doc est importante.

Il vous faut aussi créer quelques variables d'environnement. Ajoutez ces lignes à  votre ~/.bashrc

# gmt variables
export NETCDFHOME=/usr/lib
export GMTHOME=/usr/lib/gmt
export PATH=$PATH:$GMTHOME/bin

Les étapes suivantes sont facultatives mais nécessaires pour suivre ce petit tutoriel.

GMT permet plusieurs niveaux de détails pour la représentation des côtes (crude, low, intermediate, high, full). Ubuntu fournit les 3 premiers via le paquet gmt-coast-low. Nous allons installer en plus le niveau full. Vous trouverez les différents miroirs la

wget ftp://gd.tuwien.ac.at/pub/gmt/4/GMT4.2_full.tar.bz2
cd /usr/share/gmt/
sudo tar xvjf /chemin/vers/GMT4.2_full.tar.bz2

Pour avoir une idée du niveau de détails, voici la carte de la manche avec les différents niveaux[1].

crude low intermediate full

Nous aurons aussi besoin de données topographiques, c'est à  dire des données d'altitude et de profondeur. Il existe plusieurs sources dont vous trouverez les liens à  la fin. Nous utiliserons les données ETOPO2v2 fournies par la NOAA[2]. Elles ont l'avantage d'être précises à  2 minutes d'arc prêt et de combiner les terres et mers. Vous pouvez télécharger les données mondiales (Attention le fichier fait 97Mo) ou alors ne récupérer que celles qui vous seront utiles (procédure plus bas).

# Pour télécharger et installer toutes les données :
wget http://www.ngdc.noaa.gov/mgg/global/relief/ETOPO2/ETOPO2v2-2006/ETOPO2v2g/netCDF/ETOPO2v2g_f4_netCDF.zip
sudo unzip ETOPO2v2g_f4_netCDF.zip -d /usr/share/gmt/dbase/

Enfin, fixons quelques paramètres par défaut[3].

gmtset -G$HOME/.gmtdefaults4 BASEMAP_TYPE fancy+ PLOT_DEGREE_FORMAT ddd:mmF
  • BASEMAP_TYPE pour l'affichage des axes comme sur la carte ci-dessus (noir et blanc, coins arrondis)
  • PLOT_DEGREE_FORMAT pour afficher les coordonnées du type 48°23'N

voir le manuel de référence pour plus de détails.

Cartographier

Ma première carte

Maintenant lançons nous et générons notre première carte, la commande peut faire peur, mais nous allons détailler :

pscoast -R-7/2/47.5/51.5 -JM10c -P -Ggreen -Sblue -W -Df -Ir -B1g1 > gmt_manche_01.ps

pscoast va vous permettre de dessiner les terres, mers, côtes et rivières. Les options sont :

  • -R-7/2/47.5/51.5 : les limites de la carte à  réaliser. Ici, un rectangle dont les coordonnées sont 7° de longitude Est, 2° de longitude Ouest, 47,5° de Latitude Nord et 51,5° de Latitude Nord.
  • -JM10c : projection Mercator, la carte fera 10cm de large
  • -P : créer une page en mode portrait
  • -Ggreen : couleur des terres
  • -Sblue : couleur des mers
  • -W : dessine le trait de côte (en noir par défaut)
  • -Df : utiliser la base de côte full (c, l ou i pour les autres bases disponibles)
  • -Ir : affiche les rivières permanentes
  • -B1g1 : créer les axes avec une unité tous les degrés

Un fichier postcript est alors produit. Vous pouvez le convertir en png à  l'aide de la commande ps2raster (qui nécessite ghostcript)

ps2raster -Tg -A gmt_manche_01.ps
  • -Tg : format de sortie PNG (-Tj pour Jpeg et -Tf pour PDF)
  • -A : pour ne conserver que la partie utile

Capture

Ajoutons un peu de relief

Il faut tout d'abord créer un fichier .grd lisible par GMT avec les données topographiques. Si vous avez installé l'ensemble des données, créez le ainsi[4] :

grdreformat /usr/share/gmt/dbase/ETOPO2v2g_f4.nc gmt_manche_02.grd -R

Sinon, allez sur le site Geodas pour récupérer un fichier .xyz. Remplissez ainsi :

Capture

et téléchargez le fichier xyz. Vous pouvez alors générer le grd avec cette commande :

xyz2grd -Ggmt_manche_02.grd -I2m -R manche02_1630.xyz

Pour afficher les détails sur le nouveau fichier :

grdinfo gmt_manche_02.grd

/!\ Vous avez peut-être noté que je n'ai pas donné les paramètres à  l'option -R. C'est normal, GMT conserve les derniers paramètres utilisés dans le fichier .gmtcommands4 du repertoire courant. Cela vous permet de simplifier l'écriture mais est parfois source d'incompréhension :)

Nous allons maintenant ajouter les lignes de niveaux à  notre carte :

pscoast -R -JM20c -Ggreen -Sblue -W -Df -B -K  > gmt_manche_02.ps
grdcontour gmt_manche_02b.grd -J -S4 -C20 -O >> gmt_manche_02.ps

Dans les nouvelles options, notons :

  • -K : pour dire que l'on va encore ajouter des données au fichier
  • -O : pour dire que l'on ajoute des données au fichier (notez aussi le >>)
  • -C20 : pour dire à  grdcontour de tracer les lignes tous les 20m[5]
  • -S4 : pour lisser les lignes

Capture

Colorisons un peu plus

Les couleurs plates, c'est bien joli, mais ça manque un peu de ... relief :) Voyons comment arranger cela.

D'abord, il faut créer une palette de couleur à  partir de celles par défaut mais mise à  l'échelle de nos valeurs :

makecpt -Crelief -T-450/450/20 -Z > gmt_manche_03.cpt
psscale -Cgmt_manche_03.cpt -D10c/2c/20c/1ch -Ba100 > gmt_manche_03_cpt.ps
  • -Crelief, -Cgmt_manche_03.cpt : palette utilisée
  • -T-450/450/20 : translation à  appliquer à  la palette de -450m à  450m par pas de 20m, on trouve les extrêmes grà¢ce à  la commande grdinfo vue ci-dessus
  • -Z : palette continue (dégradé de couleurs)[6]

La commande psscale permet de générer une échelle. Je vous laisse lire la documentation pour les détails. Vous pouvez aussi l'utiliser pour ajouter l'échelle sur votre carte Palette

Créons maintenant la carte topographique à  l'aide de grdimage

grdimage gmt_manche_02.grd -J -Cgmt_manche_03.cpt -E50 -K > gmt_manche_03.ps
grdcontour gmt_manche_02.grd -J -S4 -C25 -O >> gmt_manche_03.ps
  • -E50 : permet d'augmenter la résolution en interpolant les données, souvenez-vous, nos données sont par pas de 2 minutes d'arc, si on laisse comme cela, nous aurons des carrés
  • les autres options sont déjà  connues ;)

Capture

Conclusion

Voila, comme l'article est déjà  (très) long, je vais m'arrêter la. Nous n'avons fait qu'effleurer les possibilités de GMT et je vous encourage donc vivement à  suivre le tutoriel officiel, à  lire la doc de référence et à  expérimenter. Vous pouvez aussi télécharger le script regroupant toutes les commandes vues.

Pour réaliser la carte de la manche présentée en début d'article, il ne vous manque que psxy pour afficher des symboles et pstext pour le texte. Leur utilisation est relativement simple et vous trouverez des exemples commentés dans le script qui génère celle-ci. Tout le reste est déjà  expliqué dans cette page.

Enfin, il existe une interface graphique pour GMT : iGMT, mais celle-ci n'étant pas disponible dans les dépots, je ne l'ai pas testé.

Liens

Pour finir les liens utiles :

A ce propos, je ne résiste pas à  citer luckytoyn qui dans ce même sujet disait :

J'ai l'impression que moins un programme est convivial, plus il est puissant.
gmt est très puissant.

Continuons les liens :

Voila, merci et bravo à  ceux qui sont arrivés jusque la ;) A vos cartes !

Notes

[1] vous trouverez le script pour les produire à  cet endroit, ne vous inquiétez pas des options nous allons détailler plus loin

[2] National Oceanic and Atmospheric Administration, une agence Américaine

[3] On peut aussi les donner en ligne à  chaque commande, voir gmtdefaults

[4] il y a surement moyen de ne pas donner le chemin complet grà¢ce au fichier coastline.conf, mais je n'ai pas trop cherché

[5] il prend aussi l'option -A50 pour labéliser les lignes tous les 50 mètres

[6] notez aussi -I pour inverser la palette


Commentaires du post original

Aucun commentaire:

Enregistrer un commentaire