Aller au contenu

Ce tchat, hébergé sur une plateforme indépendante d'Infoclimat, est géré et modéré par une équipe autonome, sans lien avec l'Association.
Un compte séparé du site et du forum d'Infoclimat est nécessaire pour s'y connecter.

[wgrib] extraire hPa au niveau de la mer


Comode
 Partager

Messages recommandés

Bonjour,

Voilà un petit moment que je bataille avec wgrib pour tenter d'extraire la pression au niveau de la mer sur tout une zone (atlantique).

J'ai donc compiler wgrib sur mon dédié, j'ai wget un GFS 6heures, et si je fait un wgrib du fichier, j'ai bien une grosse liste de données.

Cependant, 2 problèmes se posent à moi...

- Comment extraire la pression au niveau de la mer... je tape la commande suivante :

./wgrib  gfs.t12z.master.grbf06 | grep ":1000 mb:" | ./wgrib -i -text  gfs.t12z.master.grbf06

et j'obtient une douzaine de lignes (c'est peu !?) du style :

607:197764984:d=07091412:GPA:kpds5=27:kpds6=100:kpds7=1000:TR=10:P1=0:P2=6:TimeU=1:1000 mb:6hr fcst:NAve=0

donc parametre 7 (d'apres la doc : 7. Height, pressure, etc (grib PDS octets 11-12)) et 12 (level) contiennent systématiquement les même valeurs... je ne peut donc faire la différence entre les 2 pour en déduire la hPa...

Que dois-je taper pour avoir cette pression sur toute une zone ?

- concernant le 2e paramètre, "position in bytes", comment puis-je faire pour convertir ça en coordonnées géographiques réelles ?

En vous remerciant par avance...

Lien à poster
Partager sur d’autres sites

  • 2 weeks later...

Bon bon bon... On est jamais mieux servit que par soit même...

Je laisse ma solution pour les prochains qui galèreront la dessus... Faut dire que l'aide est pas toujours très clair à ce sujet...

<?php$res = shell_exec('./wgrib -s GFS | grep ":PRMSL:" | ./wgrib GFS -i -text');$arr_res = array();preg_match("#^([0-9]*):#is", $res,  $arr_res);$id_pos = $arr_res[1];$res = shell_exec('./wgrib GFS -V -d '.$id_pos);$arr_res = array();preg_match("#lat[ ]+([0-9\-\.]*)[ ]+to[ ]([0-9\-\.]*)[ ]+by[ ]+([0-9\.\-]*)#is", $res,  $arr_res);$min_lat = $arr_res[2];$max_lat = $arr_res[1];$by_lat = $arr_res[3];preg_match("#long[ ]+([0-9\-\.]*)[ ]+to[ ]([0-9\-\.]*)[ ]+by[ ]+([0-9\.\-]*)#is", $res,  $arr_res); //$min_lon = $arr_res[2];$max_lon = $arr_res[1];$by_lon = $arr_res[3];preg_match("#\(([0-9]+) x ([0-9]+)\)#is", $res,  $arr_res);shell_exec('./wgrib GFS -d '.$id_pos.' -text -nh -o gfs_file');$taille_x = $arr_res[1];$taille_y = $arr_res[2];$i = 1;$j = 1;$dest = fopen('./tab_mslsa.php', "w+");$f = fopen('./gfs_file', "r");fwrite($dest, "<?php\n");while(!feof($f)){ $t = fgets($f); fwrite($dest,  '$T['.$j.']['.$i.'] = '.round(trim($t) / 100, 1).';'."\n"); if($i > $taille_x) {  $i = 1;  $j++; }  $i++;}fclose($f);fwrite($dest, "\n?>\n");fclose($dest);?>

C'est pas un poil optimisé (3 wgrib là où 1 seul suffirait), mais c'est juste mon 1er résultat fonctionnel... Ceux qui en auront besoin auront vite fait d'arranger ça à leur sauce. Le résultat est la construction d'un fichier PHP contenant un tableau [longitude][latitude] commençant à 0°E et 90°N.

Il suffit normalement de modifier la 1er ligne pour obtenir une donnée différente (vents, humidité, vortex...)

Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
 Partager

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...