fmicaux a écrit 1 commentaire

  • [^] # Re: Les fichiers GRIB

    Posté par  . En réponse à la dépêche Virtual Loup-de-mer : simulation de course à la voile. Évalué à 1.

    Bonjour,

    Les Windowsiens ont grib.us, mais nous... on ne l'a pas. Je n'ai pas en tête de nom d'outil et ne suis pas certain qu'il y en ait (j'ai cherché aussi). Je peux donc t'expliquer comment je procède dans VLM 0.5.

    Je (le serveur) commande les fichiers GRIB par mail en fonction des positions extrèmes des bateaux engagés dans chaque course (shell-script).

    Il reçoit donc un fichier GRIB à chaque demande sous forme d'une pièce jointe à un mail, qu'il détache automatiquement (Postfix / alias / shell-script + uudeview) et stocke pour mise à dispo des joueurs dans http://vlm.team-tnz.org/grib/ .

    Le fichier GRIB est découpé pour en extraire les enregistrements (Uwind, Vwind, Uwind H+3, Vwind H+3... et bientot ceux concernant la hauteur des vagues).. le découpage et l'extraction des valeurs dans un format "lisible" est réalisé avec l'outil wgrib (http://www.cpc.ncep.noaa.gov/products/wesley/wgrib.html)

    Tout ça est fait pat le même shell-script.

    Attention : saildocs et mailasail n'envoient pas les enregistrements dans le même sens au sein d'un fichier GRIB.. exemple : .u,v,u3,v3 pour l'un, u,u3,v,v3 pour l'autre... Grib ne normalise donc pas l'ordre des enregistrements...

    Vient ensuite l'insertion en base de données : un script php fait ce travail, ajoute un timestamp sur chaque ligne, réalise les calculs (norme + angle à partir des vecteurs u+v)...pour une histoire de vérification, et en prévision d'un système de BMS automatiquement posté par VLM... qui arrive... . Ce script purge ensuite les données dont le timestamp a plus de 24 heures... pour "éteindre le vent" là où nos bateaux ne sont plus :-)

    Une fois que les données sont en base, c'est la carto VLM qui réalise l'interpolation H / H+3 ainsi que l'interpolation en terme de position (on a une mesure tous les ° en base). Là par contre, j'ai fait une belle fonction "windAtPosition", qui réalise l'interpolation. C'est elle qui est appelée pour obtenir les valeurs à représenter sur les cartes.

    Je ne connais pas, personellement, d'outil comme grib.us pour Liunx. Mais je pense que pour gagner du temps et écrire son propre outil, la lecture du code de wgrib ou tout simplement son utilisation est un bon départ. C'est du C.

    François.