Bonjour,
Je voudrais ajouter des information quant à l'installations de GMT.
Telle décrite dans le tutorial
http://planet.ubuntu-fr.org/post/2007/07/04/Generic-Mapping-Tools-GMT-pour-tracer-des-cartes-sous-Ubuntu, on ne peut pas utiliser la commande
grdraster 1 -R-66/-60/30/35 -Gbermuda.nc -V
décrite le tutorial fourni par GMT
http://gmt.soest.hawaii.edu/gmt/doc/html/tutorial/node41.html (le chiffre 1 correspond au model à utiliser; cf /usr/lib/gmt/share/dbase/grdraster.info)
voilà une procédure pour que ça fonctionne :
Télécharger le fichier ETOPO5 en version binaire (pour PC). Il faut faire attention, dans les fichiers binaires proposés par GEODAS, il y a les LSB (low significant byte) et les MSB (mean significant byte). Il nous faut les LSB
wget "http://www.ngdc.noaa.gov/mgg/global/relief/ETOPO5/TOPO/ETOPO5/ETOPO5.DOS"
et copier le fichier (en le renommant pour que grdraster.info soit en accord:
sudo mv ETOPO5.DOS $GMTHOME/share/dbase/etopo5.i2
De même on peut installer les fichiers ETOPO2 et ETOPO1 (le chiffre indique la précision; 5 minutes d'angle, 2 minutes, 1 minute). La difficulté, ici, c'est que les fichiers proposés sont au format "float" et qu'il faudra les mettre au format "long int"
Télécharger les fichiers (attention, ils sont lourds; 100Mo pour ETOPO2, 400Mo pour ETOPO1_ice-surface et 400Mo pour ETOPO1_bed-rock)
wget "http://www.ngdc.noaa.gov/mgg/global/relief/ETOPO2/ETOPO2v2-2006/ETOPO2v2g/raw_binary/ETOPO2v2g_f4_LSB.zip"
wget "http://www.ngdc.noaa.gov/mgg/global/relief/ETOPO1/data/bedrock/grid_registered/binary_float/etopo1_bed_g.zip"
wget "http://www.ngdc.noaa.gov/mgg/global/relief/ETOPO1/data/ice_surface/grid_registered/binary_float/etopo1_ice_g.zip"
Décompressez tout ce beau monde:
unzip ETOPO2v2g_f4_LSB.zip
unzip etopo1_bed_g.zip
unzip etopo1_ice_g.zip
et on convertit avec un petit utilitaire facile à coder (voir en fin de post); on en profite pour placer les fichiers dans le bon dossier (prévoir de la place; environ 2Go).
sudo ./gmtf4toi4 ETOPO2v2g_f4_LSB.flt $GMTHOME/share/dbase/etopo2.i4
sudo ./gmtf4toi4 etopo1_bed_g.flt $GMTHOME/share/dbase/etopo1bed.i4
sudo ./gmtf4toi4 etopo1_ice_g.flt $GMTHOME/share/dbase/etopo1ice.i4
Maintenant, il faut modifier le fichier grdraster.info
cp $GMTHOME/share/dbase/grdraster.info $GMTHOME/share/dbase/grdraster.info.bak
sudo gedit $GMTHOME/share/dbase/grdraster.info
et ajoutez ces lignes
12 "ETOPO2 global topography" "m" -R-180/180/-90/90 -I2m GG l 1 0 none etopo2.i4
13 "ETOPO1 global topo Bedrock" "m" -R-180:0.5/180/-90:0.5/90 -I1m GG l 1 0 none etopo1bed.i4
14 "ETOPO1 global topo Ice" "m" -R-180:0.5/180/-90:0.5/90 -I1m GG l 1 0 none etopo1ice.i4
Rq les données de l'option -R sont obtenu en lisant le fichier .hdr de chaque zip
Et maintenant l'utilitaire "gmtf4toi4.c":
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/mman.h>
#define BLOCK 20000
#define FORMAT long int
long tailleFichier(char *fic) {
struct stat etat_fichier;
if (stat(fic, & etat_fichier) !=0) {
perror("stat");
exit(EXIT_FAILURE);
return 0;
}
return etat_fichier.st_size;
}
int main(int argc, char *argv[]) {
int fichierHdl;
FORMAT *converti;
FILE* sortie;
float * projection;
long taille_fichier;
//***************************
// Verification des arguments
//***************************
printf("Tool to convert data stored as float (4 bytes) to data stored as long signed integer (4 bytes)\n08/2008 - C. MEICHEL\n");
if (argc<3) {
printf("Syntaxe : %s fichier_a_lire fichier_de_sortie\n", argv[0]);
exit(EXIT_FAILURE);
}
//*******************************************
// Mise en memoire du fichier (lecture seule)
//*******************************************
if ((fichierHdl=open(argv[1], 0)) <0) {
perror("open");
exit(EXIT_FAILURE);
}
taille_fichier = tailleFichier(argv[1]);
projection = (float *) mmap(NULL, taille_fichier, PROT_READ, MAP_SHARED, fichierHdl, 0);
if (projection == (float *) MAP_FAILED) {
perror("mmap");
exit(EXIT_FAILURE);
}
close(fichierHdl);
if ((sortie = fopen(argv[2], "w")) == NULL) {
return 0;
}
converti = (FORMAT*) malloc(BLOCK*sizeof(FORMAT));
//**********************
// Traitement du fichier
//**********************
size_t nbblock = taille_fichier / (BLOCK*sizeof(float));
size_t k;
size_t curseur = 0;
size_t n;
printf("%d blocks (%d values) to write\n", nbblock, BLOCK);
for(k=0; k<nbblock; k++) {
for(n=0; n<BLOCK; n++) {
converti[n] = (FORMAT) projection[curseur++];
}
printf("%d out of 100 converted\r", k*100/(nbblock));
fwrite(converti, (BLOCK)*sizeof(FORMAT), 1, sortie);
}
for(n=0; n<(taille_fichier % (BLOCK*sizeof(float)))/sizeof(FORMAT); n++)
converti[n] = (FORMAT) projection[curseur++];
fwrite(converti, taille_fichier % (BLOCK*sizeof(FORMAT)), 1, sortie);
//******************************************
// Fin du code et restauration de la memoire
//******************************************
fclose(sortie);
free(converti);
munmap((void *) projection, taille_fichier);
return 0;
}
on compile tout ça avec
gcc -o gmtf4toi4 gmtf4toi4.c
(vous pouvez changer le "#define BLOCK 20000" pour passer à "#define BLOCK 500000"; ça correspond à la mémoire nécessaire (ici, 20000*4 octets)
Bonne installation !