IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

[netcdf] Obtenir la temperature a partir d'un fichier provenant du satellite MODIS


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Perpignan
    Inscrit en
    Mars 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Perpignan
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [netcdf] Obtenir la temperature a partir d'un fichier provenant du satellite MODIS
    Bonjour à tous !
    J'aimerai avoir un coup de pouce afin d'obtenir une matrice correspondant à des valeurs de Temperature provenant d'un fichier .nc récuperé sur la site Ocean Color.
    Ces valeurs correspondent à des valeurs de SST (sea surface temperature).
    J'ai reussi a extraire les 5 variables du fichier .nc
    Ma variable correspondant a SST est un "int16" et correspond a un code couleur. Celle ci provient de toute evidence de la variable RGB

    J'aimerai savoir si quelqu'un ici est capable de repondre a une de mes deux interrogations :
    Par quel moyen un code RGB a trois composanted donne cette valeur allant de -32767 jusqu'a 6000 et des poussieres ?
    Ou idéalement comment obtenir des valeurs qui correspondent à des valeurs de T°C en degrés celsius ?

    Lorsque j'ouvre le fichier sur un autre logiciel (panoply), j'ai directement un tableau Long/Lat comprenant mes valeurs en degrés...

    Variable 1 = SST (-32767 : 6000)
    Variable 2  = qual_sst
    variable 3 = long
    Variable 4  = lat
    Variable 5  = palette (tableau a trois colonne, R, G ,B)
    Merci par avance !!


    Voici mon script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    ncid = netcdf.open('May2016.nc','NC_NOWRITE')
    % connaitre le nombre de dimensions, de variables, et d'attributs 
    [ndims,nvars, natts,unlimdimID]=netcdf.inq(ncid);
     
    % Dimensions=  latitude, longitude, rgb, 8bitcolor
     
    [dimname0,dimlen0]=netcdf.inqDim(ncid,0);
    [dimname1,dimlen1]=netcdf.inqDim(ncid,1);
    [dimname2,dimlen2]=netcdf.inqDim(ncid,2);
    [dimname3,dimlen3]=netcdf.inqDim(ncid,3);
     
    % Analyse des variables 0 à 4 (latitude, longitude, rgb, 8bitcolor)
    [varname0,xtype0, varDimIDs_0, varAtts0]=netcdf.inqVar(ncid,0);
    [varname1,xtype1, varDimIDs_1, varAtts1]=netcdf.inqVar(ncid,1);
    [varname2,xtype2, varDimIDs_2, varAtts2]=netcdf.inqVar(ncid,2);
    [varname3,xtype3, varDimIDs_3, varAtts3]=netcdf.inqVar(ncid,3);
    [varname4,xtype4, varDimIDs_4, varAtts4]=netcdf.inqVar(ncid,4);
     
    % recuperation des nom a partir du numero d'id
    varid0= netcdf.inqVarID(ncid,varname0);
    varid1= netcdf.inqVarID(ncid,varname1);
    varid2= netcdf.inqVarID(ncid,varname2);
    varid3= netcdf.inqVarID(ncid,varname3);
    varid4= netcdf.inqVarID(ncid,varname4);
     
    % recuperation du numero d'id a partir du nom
    data0 =netcdf.getVar(ncid,varid0);
    data1 =netcdf.getVar(ncid,varid1);
    data2 =netcdf.getVar(ncid,varid2);
    data3 =netcdf.getVar(ncid,varid3);
    data4 =netcdf.getVar(ncid,varid4);
     
    % Analyse de la chl_A
    % recuperation du numero d'id a partir du nom
    temp_id0= netcdf.inqVarID(ncid,'sst');
    temp_id1= netcdf.inqVarID(ncid,'qual_sst');
    temp_id2= netcdf.inqVarID(ncid,'lat');
    temp_id3= netcdf.inqVarID(ncid,'lon');
    temp_id4= netcdf.inqVarID(ncid,'palette');
     
    % recuperation des donnees grace a l'id de la variable
    temp_0=netcdf.getVar(ncid,temp_id0);
    temp_1=netcdf.getVar(ncid,temp_id1);
    temp_2=netcdf.getVar(ncid,temp_id2);
    temp_3=netcdf.getVar(ncid,temp_id3);
    temp_4=netcdf.getVar(ncid,temp_id4);

  2. #2
    Membre confirmé
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Points : 639
    Points
    639
    Par défaut
    Bonjour,

    Pour des considérations d'espace, les données netcdf sont souvent mises à l'échelle. Ce lien explique la procédure officielle et la logique derrière cette conversion (en anglais, voir la section Packed Data Values): http://www.unidata.ucar.edu/software...Practices.html. Dans ton cas, il est probable que ton logiciel panoply effectue la conversion directement alors que Matlab ne le fait pas par défaut.

    Je n'ai jamais eu l'occasion de travailler avec des données Modis, mais il y a de grandes chances que l'encodage des données suive la mise à l'échelle suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    scale_factor =(dataMax - dataMin) / (2^n^ - 1)
    add_offset = dataMin + 2^n\ -\ 1^ * scale_factor
    Antoine

Discussions similaires

  1. Réponses: 7
    Dernier message: 09/01/2007, 09h44
  2. Réponses: 2
    Dernier message: 24/08/2006, 12h02
  3. Obtenir le MCD a partir d'une BDD Oracle, possible?
    Par dipajero dans le forum Designer
    Réponses: 7
    Dernier message: 06/01/2006, 21h48
  4. Réponses: 2
    Dernier message: 01/12/2005, 14h10
  5. [VB.NET] Obtenir un Char a partir de son ASCII Decimal ...
    Par maitrebn dans le forum Windows Forms
    Réponses: 8
    Dernier message: 09/09/2004, 15h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo