Comode Posté(e) 26 mars 2008 Partager Posté(e) 26 mars 2008 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 More sharing options...
Comode Posté(e) 8 avril 2008 Auteur Partager Posté(e) 8 avril 2008 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 More sharing options...
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant