Risultati da 1 a 10 di 14

Discussione: Fonte radiosondaggi

Visualizzazione Ibrida

Messaggio precedente Messaggio precedente   Nuovo messaggio Nuovo messaggio
  1. #1
    Burrasca L'avatar di Borat
    Data Registrazione
    08/06/08
    Località
    -999
    Messaggi
    5,669
    Menzionato
    0 Post(s)

    Predefinito Fonte radiosondaggi

    Da questa pagina meteonetwork Associazione MeteoNetwork - Radiosondaggi possiamo estrarre i radiosondaggi di varie stazioni in questo formato

    Codice:
    Data e ora     ZT       850hPa       700hPa       500hPa    
     (UTC)        H(m)   H(m)  T(°C)  H(m)  T(°C)  H(m)  T(°C)  
    ----------------------------------------------------------- 
    01/07/11 h00   3668   1504  14.6   3115   2.8   5760 -15.1
    01/07/11 h06   3317   1498  12.8   3101   1.6   5730 -14.7
    01/07/11 h12   3413   1497  12.6   3095   2.4   5740 -13.3
    02/07/11 h00   3206   1489  11.2   3081   1.0     NP    NP
    02/07/11 h06   2803   1477   9.4   3055  -1.7   5680 -14.3
    02/07/11 h12   2737   1467   8.6   3043  -1.1   5660 -15.3
    03/07/11 h00   2955   1470  10.4   3055  -0.7   5670 -15.3
    03/07/11 h06   3165   1460   9.8   3047   0.8   5690 -11.7
    03/07/11 h12   3828   1469  11.0   3067   3.6   5730 -11.1
    04/07/11 h00   3776   1486  15.0   3100   4.8   5760 -11.7
    04/07/11 h06   3948   1487  12.6   3098   4.4   5750 -12.9
    04/07/11 h12   3647   1503  12.4   3109   4.4   5760 -12.3
    05/07/11 h00   3643   1490  14.2   3100   3.8   5750 -12.9
    05/07/11 h06   3482   1486  13.8   3092   2.6   5740 -13.1
    05/07/11 h12   3896   1495  14.8   3106   2.8   5760 -11.1
    06/07/11 h00   4019   1506  16.8   3128   5.6   5800 -10.5
    06/07/11 h06   3877   1493  14.4   3107   3.8   5760 -11.7
    06/07/11 h12   3781   1486  15.8   3103   5.4   5770  -9.5
    cioè con una linea per ogni sondaggio e le temperature a 850, 700 e 500 hPa, e la possibilità di specificare la data di inizio e di fine.

    Avrei bisogno di reperire una fonte che mi permetta di estrarre radiosondaggi nello stesso formato - a dire il vero mi basterebbero le temperature a 850 hPa - ma non so dove andarli a pescare. Presso il noto sito U-Wayoming (Wyoming Weather Web) non riesco a estrarre i sondaggi in questo formato. In quel sito riesco a estrarre più sondaggi, ma me li dispone in output in un modo non facilmente governabile, perché mi dà sempre l'intera colonna d'aria.
    Qualcuno può segnalarmi una fonte da cui possa estrarre i radiosondaggi in un formato analogo a quello Meteonetwork e dove si trovi un po' tutto il mondo?


  2. #2
    Burrasca
    Data Registrazione
    22/02/07
    Località
    Molino del Piano(FI)
    Messaggi
    5,587
    Menzionato
    0 Post(s)

    Predefinito Re: Fonte radiosondaggi

    Non so aiutarti nel reperire altri fonti, ma sei proprio sicuro di non essere in grado di gestire quell'output?
    Con MATLAB si fa abbastanza rapidamente ...
    Stazione meteo: Davis Vantage Vue; Luogo: Molino del Piano, 12 km a NE di Firenze; Alt.: 120 m; Sito web: www.firenzemeteo.it

  3. #3
    Burrasca L'avatar di Borat
    Data Registrazione
    08/06/08
    Località
    -999
    Messaggi
    5,669
    Menzionato
    0 Post(s)

    Predefinito Re: Fonte radiosondaggi

    Citazione Originariamente Scritto da Controcorrente Visualizza Messaggio
    Non so aiutarti nel reperire altri fonti, ma sei proprio sicuro di non essere in grado di gestire quell'output?
    Con MATLAB si fa abbastanza rapidamente ...
    Per il formato di cui riporto un campione non c'è problema ovviamente, perché sono forniti solo i sondaggi a 850 hPa e ogni dato che mi interessa si trova, per ogni linea, sulla stessa colonna. Tipico formato fixed con una riga per campione.
    Quello che non è agevole da gestire, da uwyoming, è ciò che esce qui:

    Atmospheric Soundings

    Prova a vedere se riesci a impostare una data di inizio, una data di fine, e a estrarre le temperature a 850 hPa nell'intervallo di tempo ottenendo una linea per sondaggio. A me cambiando i contenuti del secondo dialog esce di tutto, ma mai in quel formato, e mai più di un mese. Quest'ultimo dettaglio potrebbe anche andare bene...

    Prova questo:
    University of Wyoming - Radiosonde Data

    Escono tutti i radiosondaggi di Belgrado dal 1° luglio al 31 luglio 2010, e fin qui va bene. La temperatura è nelle colonne da 17 e 22, e fin qui va bene. Solo che escono anche tutte le altre quote:

    Codice:
    13275 Beograd Observations at 00Z 01 Jul 2010
    
    -----------------------------------------------------------------------------
       PRES   HGHT   TEMP   DWPT   RELH   MIXR   DRCT   SKNT   THTA   THTE   THTV
        hPa     m      C      C      %    g/kg    deg   knot     K      K      K 
    -----------------------------------------------------------------------------
     1000.0    121                                                               
      991.0    203   18.8   17.3     91  12.69    230      4  292.7  328.9  294.9
      976.0    333   17.6   16.9     96  12.60    275     25  292.8  328.7  295.0
      972.0    368   17.3   16.9     97  12.57    280     27  292.8  328.7  295.0
      966.0    421   16.8   16.7     99  12.53    288     25  292.8  328.6  295.0
      938.0    672   19.0   14.3     74  11.04    323     12  297.5  329.8  299.5
      929.0    754   18.7   14.7     78  11.45    335      8  298.1  331.6  300.1
      927.0    773   18.7   14.8     78  11.55    345      8  298.2  332.0  300.3
      925.0    791   18.6   14.9     79  11.65    350      8  298.3  332.4  300.4
      909.0    941   18.6   12.6     68  10.18     15      9  299.8  329.9  301.6
      906.0    969   18.4   12.4     68  10.11     20     10  299.9  329.8  301.7
      850.0   1513   14.4    9.4     72   8.78     40     19  301.2  327.4  302.8
    non solo 850 hPa; anche questo può andare bene ma in questo caso non va bene a me. Altro problemino, la data del sondaggio è presente una sola volta, in riga 1 ma non in colonna 1, e questo complica un bel po' le cose.
    Scendendo nell'output troviamo che la temperatura a 850 del 1° ore 00Z è in riga 18, quella delle ore 12Z è in riga 170, quella delle 00Z del giorno 2 è in riga 318 e avanti così. Per cui la cosa è molto complicata da manipolare e se per caso il passo tra le righe con le temperature che mi servno non è costante diventa estremamente laborioso estrarle.
    Se da qualche parte ci fosse un ODBC al quale ci si può connettere, potrei fare una query lì e tirare fuori quello che mi serve. Ma c'è?

  4. #4
    Burrasca L'avatar di Borat
    Data Registrazione
    08/06/08
    Località
    -999
    Messaggi
    5,669
    Menzionato
    0 Post(s)

    Predefinito Re: Fonte radiosondaggi

    Forse ho trovato.
    Posso usare il formato qui sopra, e poi
    1) importare il testo come appunto testo con una sola riga (trattare i dati proprio come testo)
    2) eliminare tutte le righe che non contengono la stringa "observations" e che non contengono la stringa " 850.0".
    3) a quel punto posso creare una variabile data manipolando un po' le stringhe delle righe contenenti "observations". (eliminando dalla stringa il codice del radiosondaggio, la parola "observations", il nome del radiosondaggio, la parola "at", quello che resta è la data. Ovviamente il mese è in formato letterale, sarebbe troppo comodo se me lo dessero già in formato numerico. Questo non mi costringerebbe a ricodificarlo, e quindi esporrebbe la mia anima a gravi pericoli. Meglio fare un po' di purgatorio in vita ricodificando manualmente.
    4) ...e creare una variabile contenente i contenuti delle colonne da 17 a 22 se la riga inizia per " 850.0".

    A quel punto resta il problema di accoppiare la data/ora a ogni riga di dati del tempo corrispondente. Cacchio, capisco perché i programmatori fumano come turchi e bevono secchi di caffé. Se devono lavorare come muli per gestire dati formattati da cani come questi, non resta altra consolazione che ricorrere a sostanze.

    Poi mi potrei chiedere se vale la pena di fare un'ora di programmazione per conoscere la temperatura media a 850 hPa sopra Belgrado nel luglio 2010, e concludo prontamente che non ne vale affatto la pena.

  5. #5
    Burrasca
    Data Registrazione
    22/02/07
    Località
    Molino del Piano(FI)
    Messaggi
    5,587
    Menzionato
    0 Post(s)

    Predefinito Re: Fonte radiosondaggi

    Copia questo codice e crea il file sounding.m .... va! ... poi ti mando la fattura

    Un paio di cose:

    1) Per scaricare i dati di Belgrado (codice stazione 13275) del 1 luglio 2010 ora UTC 00 devi lanciare da matlab la seguente istruzione:
    sounding(2010,7,1,0,13275)
    cioè inserire nell'ordine anno, mese, giorno, ora, codice stazione

    2) Questa funzione ti crea un file .dat ben formattato in cui i dati assenti sono sostituiti da NaN

    3) Per caricarlo in matlab ti basta un load (la prima riga, con l'header contenenti le grandezze è stata commentata con %)

    4) Importante: questo codice contiene dei controlli che mettono in pausa la query quando ad esempio il server è sovraccarico oppure quando ti bloccano l'ip. Io lo utilizzai massivamente con vari cicli for per scaricarmi una importante serie climatologica: dopo un po' ti bloccano perchè c'è un numero massimo di query orarie per stesso ip

    5) Se ti vuoi divertire scaricando radiosondaggi non europei, devi sostituire nel codice il campo "europe" con quello del continente che desideri

    Codice:
    function sounding(anno,mese,giorno,ora_UTC,staz_number)
    %Inserire anno nel formato YYYY!
    
    
    staz_number=num2str(staz_number);
    
    stringa_anno=num2str(anno);
    
    if mese<10 %mi assicuro che la stringa mese sia nella forma MM
        stringa_mese=['0' num2str(mese)];
    else
        stringa_mese=['0' num2str(mese)];
    end
        
    if giorno<10 %mi assicuro che la stringa giorno sia nella forma DD
        stringa_giorno=['0' num2str(giorno)];
    else
        stringa_giorno=['0' num2str(giorno)];
    end
    
    if ora_UTC<10 %mi assicuro che la stringa ora sia nella forma DD
        stringa_ora_UTC=['0' num2str(ora_UTC)];
    else
        stringa_ora_UTC=['0' num2str(ora_UTC)];
    end
    
    disp(['Tento il download del radiosondaggio del ' stringa_giorno '/' stringa_mese '/' stringa_anno ...
        ' ora ' stringa_ora_UTC ' UTC per la stazione numero ' staz_number])
    
    
    blocco_ip=0;
    rinuncia_radiosondaggio=0;
    conta_blocco_html=0;
    conta_blocco_ip=0;
    while blocco_ip==0
        if conta_blocco_ip<=3
            try %a volte non permette nemmeno il dwl, per questo metto un try and catch!!!
                url=(['http://weather.uwyo.edu/cgi-bin/sounding?region=europe&TYPE=TEXT%3ALIST&YEAR=' ...
                    stringa_anno ...
                    '&MONTH=' stringa_mese '&FROM=' stringa_giorno stringa_ora_UTC '&TO=' ...
                    stringa_giorno stringa_ora_UTC '&STNM=' staz_number]);
                ok_internet=0;
                while ok_internet==0   
                    conta_blocco_html=conta_blocco_html+1;
                    max_wait=15000;
                    if conta_blocco_html<=3
                        try
                          s=urlread2(url,[],[],max_wait);
                          ok_internet=1; 
                        catch
                          disp(['Lettura html num ' num2str(conta_blocco_html) ' bloccata '...
                              '...riavvio tra 30 secondi ....']);     
                          pause(30)
                        end
                    else %se ho già fatto 3 tentativi, ci rinuncio
                        ok_internet=1; %esco dal while
                        rinuncia_radiosondaggio=1;
                    end
                end %fine while ok_internet==0 
                if rinuncia_radiosondaggio~=1 %se non ci sono stati problemi con la lettura html
                    test_blocco=(findstr(s,'You are making too many data requests'));
                    test_busy=(findstr(s,'Sorry, the server is too busy to process your request'));
                    if size(test_blocco,1)~=0 %se ti ha bloccato l'ip
                        conta_blocco_ip=conta_blocco_ip+1;
                        disp('Blocco IP, riprovo tra 1 minuto ....')
                        pause(60*1)
                    elseif size(test_busy,1)~=0 %se il server è in sovraccarico
                        disp('Server sovraccarico, riprovo tra 1 minuto ....')
                        conta_blocco_ip=conta_blocco_ip+1;
                        pause(60*1)
                    else
                        blocco_ip=1; %esco dal while
                    end
                else %se invece ho avuto problemi con la lettura html
                    blocco_ip=1; %esco dal while
                end
            catch
                conta_blocco_ip=conta_blocco_ip+1;
                disp('Blocco IP, riprovo tra 1 minuto ....')
                pause(60*1)
            end
        else
            rinuncia_radiosondaggio=1;
            blocco_ip=1; %esco dal while
        end
    end %fine while blocco_ip==0
    
    if rinuncia_radiosondaggio~=1
        %se è presente la voce cant'get, allora il radiosondaggio non è presente
        test_00=(findstr(s,'Can''t get')); %stringa in caso di radiosondaggio non presente
        test_01=(findstr(s,'Invalid TIME parameter')); %stringa in caso di data non accettabile
        if size(test_01,1)~=0 %se è sbagliata la data
            disp(['Data ' stringa_giorno '/' stringa_mese '/' ...
                stringa_anno ' ora ' stringa_ora_UTC ' UTC NON ACCETTABILE!']);
            disp('------------------------------------------------')
        elseif size(test_01,1)==0&&size(test_00,1)==0 %se è presente il radiosondaggio, creo un file di testo 
            %con il profilo copio il contenuto della pagina web in file di testo
            ok_internet=0;
            while ok_internet==0    
                max_wait=15000;
                try
                  urlwrite2(url,'temp.dat',[],[],max_wait); 
                  ok_internet=1; 
                catch
                  disp('Dwl html bloccato...riavvio ....');  
                  pause(5)
                end
            end %fine while ok_internet==0  
            %...lo carico
            fid_spc=importdata('temp.dat');
            %... e seleziono la parte contenente i dati
            dati=fid_spc.data;
            tot_righe_dati=size(dati,1);       
            trova_inizio=(findstr(s,'-----------------------------------------------------------------------------'));
            s(1:(trova_inizio(2)+78))=[];
            trova_fine=(findstr(s,'</PRE>'));
            s(trova_fine(1):size(s,2))=[];
            profilo_prs=[];
            profilo_hgt=[];
            profilo_temp=[];
            profilo_dwpt=[];
            profilo_ur=[];
            profilo_mixr=[];
            profilo_dir_vento=[];
            profilo_int_vento=[];
            try % metto un try and catch perchè a volte sbaglia a calcolare il numero di righe totali (??)
                for riga=1:tot_righe_dati
                    for colonna=1:8
                        indice_inizio=78*(riga-1)+1+7*(colonna-1);
                        indice_fine=indice_inizio+6;
                        valore=str2num(s(indice_inizio:indice_fine));
                        if size(valore,2)==0
                            valore=NaN;
                        end
                        if colonna==1
                            profilo_prs=[profilo_prs valore]; %#ok<AGROW>
                        elseif colonna==2
                            profilo_hgt=[profilo_hgt valore]; %#ok<AGROW> 
                        elseif colonna==3
                            profilo_temp=[profilo_temp valore]; %#ok<AGROW>
                        elseif colonna==4
                            profilo_dwpt=[profilo_dwpt valore]; %#ok<AGROW>
                        elseif colonna==5
                            profilo_ur=[profilo_ur valore]; %#ok<AGROW>
                        elseif colonna==6
                            profilo_mixr=[profilo_mixr valore]; %#ok<AGROW>
                        elseif colonna==7
                            profilo_dir_vento=[profilo_dir_vento valore]; %#ok<AGROW>
                        elseif colonna==8
                            profilo_int_vento=[profilo_int_vento valore]; %#ok<AGROW>
                        end
                    end %fine for colonna=1:8             
                end %fine for riga=1:tot_righe_dati
            catch
            end
            %creo la matrice con i dati del radiosondaggio
            matrice_dati=[profilo_prs' profilo_hgt' profilo_temp' profilo_dwpt' profilo_ur' ...
                profilo_mixr' profilo_dir_vento' profilo_int_vento'];
    
            %della matrice con i dati del radiosondaggio, poto tutte quelle righe
            %in cui è assente il dato temperatura (3° colonna)
            ok_nan=0;
            while ok_nan==0
                trova_nan=find(isnan(matrice_dati(:,3))==1);
                if size(trova_nan,1)~=0 %se esiste un NaN elimino la riga
                    matrice_dati(trova_nan(1),:)=[];
                else %se non esiste esco dal while
                    ok_nan=1;
                end %fine if size(trova_nan,2)~=0
            end %fine while ok_nan==0
            %convero i nodi in m/s
            matrice_dati(:,8)=matrice_dati(:,8)*0.5144;
            clear trova_nan
    
            %scrivo il file con i dati del radiosondaggio
            fid_spc=fopen(['sounding_' stringa_anno stringa_mese stringa_giorno...
                '_' stringa_ora_UTC 'Z.dat'],'w');
                fprintf(fid_spc,'%s','%P[hPa],  Z[m],  T[°C], DP[°C], RH[%], MR[g/kg], DRCT[°], SKNT[m/s] ');
                fprintf(fid_spc,'\n');
                for i=1:size(matrice_dati,1)
                    fprintf(fid_spc,'%7.1f %6.0f %+7.1f %+7.1f %5.0f %10.2f %8.0f %8.1f \n'...
                        ,matrice_dati(i,:));
                end
            fclose(fid_spc);   
            disp(['Radiosondaggio del ' stringa_giorno '/' stringa_mese '/' ...
                stringa_anno ' ora ' stringa_ora_UTC ' UTC scaricato da Internet']);
            disp('------------------------------------------------')                           
            %cancello il temp.dat
            delete('temp.dat')
    
        else
            disp(['Radiosondaggio del ' stringa_giorno '/' stringa_mese ...
                '/' stringa_anno ' ora ' stringa_ora_UTC ' UTC NON presente']);
            disp('-------------------------------------')
        end %fine if size(test_01,1)~=0 ED ALTRI ELSEIF!
    else
        disp(['IMPOSSIBILE SCARICARE radiosondaggio del ' stringa_giorno '/' stringa_mese ...
                '/' stringa_anno ' ora ' stringa_ora_UTC ' UTC ']);
    end
    Ultima modifica di Controcorrente; 15/07/2011 alle 10:58
    Stazione meteo: Davis Vantage Vue; Luogo: Molino del Piano, 12 km a NE di Firenze; Alt.: 120 m; Sito web: www.firenzemeteo.it

  6. #6
    Burrasca L'avatar di Borat
    Data Registrazione
    08/06/08
    Località
    -999
    Messaggi
    5,669
    Menzionato
    0 Post(s)

    Predefinito Re: Fonte radiosondaggi

    Citazione Originariamente Scritto da Controcorrente Visualizza Messaggio
    Copia questo codice e crea il file sounding.m .... va! ... poi ti mando la fattura

    Un paio di cose:

    1) Per scaricare i dati di Belgrado (codice stazione 13275) del 1 luglio 2010 ora UTC 00 devi lanciare da matlab la seguente istruzione:
    sounding(2010,7,1,0,13275)
    cioè inserire nell'ordine anno, mese, giorno, ora, codice stazione

    2) Questa funzione ti crea un file .dat ben formattato in cui i dati assenti sono sostituiti da NaN

    3) Per caricarlo in matlab ti basta un load (la prima riga, con l'header contenenti le grandezze è stata commentata con %)

    4) Importante: questo codice contiene dei controlli che mettono in pausa la query quando ad esempio il server è sovraccarico oppure quando ti bloccano l'ip. Io lo utilizzai massivamente con vari cicli for per scaricarmi una importante serie climatologica: dopo un po' ti bloccano perchè c'è un numero massimo di query orarie per stesso ip

    5) Se ti vuoi divertire scaricando radiosondaggi non europei, devi sostituire nel codice il campo "europe" con quello del continente che desideri

    Codice:
    function sounding(anno,mese,giorno,ora_UTC,staz_number)
    %Inserire anno nel formato YYYY!
    
    
    staz_number=num2str(staz_number);
    
    stringa_anno=num2str(anno);
    
    if mese<10 %mi assicuro che la stringa mese sia nella forma MM
        stringa_mese=['0' num2str(mese)];
    else
        stringa_mese=['0' num2str(mese)];
    end
        
    if giorno<10 %mi assicuro che la stringa giorno sia nella forma DD
        stringa_giorno=['0' num2str(giorno)];
    else
        stringa_giorno=['0' num2str(giorno)];
    end
    
    if ora_UTC<10 %mi assicuro che la stringa ora sia nella forma DD
        stringa_ora_UTC=['0' num2str(ora_UTC)];
    else
        stringa_ora_UTC=['0' num2str(ora_UTC)];
    end
    
    disp(['Tento il download del radiosondaggio del ' stringa_giorno '/' stringa_mese '/' stringa_anno ...
        ' ora ' stringa_ora_UTC ' UTC per la stazione numero ' staz_number])
    
    
    blocco_ip=0;
    rinuncia_radiosondaggio=0;
    conta_blocco_html=0;
    conta_blocco_ip=0;
    while blocco_ip==0
        if conta_blocco_ip<=3
            try %a volte non permette nemmeno il dwl, per questo metto un try and catch!!!
                url=(['http://weather.uwyo.edu/cgi-bin/sounding?region=europe&TYPE=TEXT%3ALIST&YEAR=' ...
                    stringa_anno ...
                    '&MONTH=' stringa_mese '&FROM=' stringa_giorno stringa_ora_UTC '&TO=' ...
                    stringa_giorno stringa_ora_UTC '&STNM=' staz_number]);
                ok_internet=0;
                while ok_internet==0   
                    conta_blocco_html=conta_blocco_html+1;
                    max_wait=15000;
                    if conta_blocco_html<=3
                        try
                          s=urlread2(url,[],[],max_wait);
                          ok_internet=1; 
                        catch
                          disp(['Lettura html num ' num2str(conta_blocco_html) ' bloccata '...
                              '...riavvio tra 30 secondi ....']);     
                          pause(30)
                        end
                    else %se ho già fatto 3 tentativi, ci rinuncio
                        ok_internet=1; %esco dal while
                        rinuncia_radiosondaggio=1;
                    end
                end %fine while ok_internet==0 
                if rinuncia_radiosondaggio~=1 %se non ci sono stati problemi con la lettura html
                    test_blocco=(findstr(s,'You are making too many data requests'));
                    test_busy=(findstr(s,'Sorry, the server is too busy to process your request'));
                    if size(test_blocco,1)~=0 %se ti ha bloccato l'ip
                        conta_blocco_ip=conta_blocco_ip+1;
                        disp('Blocco IP, riprovo tra 1 minuto ....')
                        pause(60*1)
                    elseif size(test_busy,1)~=0 %se il server è in sovraccarico
                        disp('Server sovraccarico, riprovo tra 1 minuto ....')
                        conta_blocco_ip=conta_blocco_ip+1;
                        pause(60*1)
                    else
                        blocco_ip=1; %esco dal while
                    end
                else %se invece ho avuto problemi con la lettura html
                    blocco_ip=1; %esco dal while
                end
            catch
                conta_blocco_ip=conta_blocco_ip+1;
                disp('Blocco IP, riprovo tra 1 minuto ....')
                pause(60*1)
            end
        else
            rinuncia_radiosondaggio=1;
            blocco_ip=1; %esco dal while
        end
    end %fine while blocco_ip==0
    
    if rinuncia_radiosondaggio~=1
        %se è presente la voce cant'get, allora il radiosondaggio non è presente
        test_00=(findstr(s,'Can''t get')); %stringa in caso di radiosondaggio non presente
        test_01=(findstr(s,'Invalid TIME parameter')); %stringa in caso di data non accettabile
        if size(test_01,1)~=0 %se è sbagliata la data
            disp(['Data ' stringa_giorno '/' stringa_mese '/' ...
                stringa_anno ' ora ' stringa_ora_UTC ' UTC NON ACCETTABILE!']);
            disp('------------------------------------------------')
        elseif size(test_01,1)==0&&size(test_00,1)==0 %se è presente il radiosondaggio, creo un file di testo 
            %con il profilo copio il contenuto della pagina web in file di testo
            ok_internet=0;
            while ok_internet==0    
                max_wait=15000;
                try
                  urlwrite2(url,'temp.dat',[],[],max_wait); 
                  ok_internet=1; 
                catch
                  disp('Dwl html bloccato...riavvio ....');  
                  pause(5)
                end
            end %fine while ok_internet==0  
            %...lo carico
            fid_spc=importdata('temp.dat');
            %... e seleziono la parte contenente i dati
            dati=fid_spc.data;
            tot_righe_dati=size(dati,1);       
            trova_inizio=(findstr(s,'-----------------------------------------------------------------------------'));
            s(1:(trova_inizio(2)+78))=[];
            trova_fine=(findstr(s,'</PRE>'));
            s(trova_fine(1):size(s,2))=[];
            profilo_prs=[];
            profilo_hgt=[];
            profilo_temp=[];
            profilo_dwpt=[];
            profilo_ur=[];
            profilo_mixr=[];
            profilo_dir_vento=[];
            profilo_int_vento=[];
            try % metto un try and catch perchè a volte sbaglia a calcolare il numero di righe totali (??)
                for riga=1:tot_righe_dati
                    for colonna=1:8
                        indice_inizio=78*(riga-1)+1+7*(colonna-1);
                        indice_fine=indice_inizio+6;
                        valore=str2num(s(indice_inizio:indice_fine));
                        if size(valore,2)==0
                            valore=NaN;
                        end
                        if colonna==1
                            profilo_prs=[profilo_prs valore]; %#ok<AGROW>
                        elseif colonna==2
                            profilo_hgt=[profilo_hgt valore]; %#ok<AGROW> 
                        elseif colonna==3
                            profilo_temp=[profilo_temp valore]; %#ok<AGROW>
                        elseif colonna==4
                            profilo_dwpt=[profilo_dwpt valore]; %#ok<AGROW>
                        elseif colonna==5
                            profilo_ur=[profilo_ur valore]; %#ok<AGROW>
                        elseif colonna==6
                            profilo_mixr=[profilo_mixr valore]; %#ok<AGROW>
                        elseif colonna==7
                            profilo_dir_vento=[profilo_dir_vento valore]; %#ok<AGROW>
                        elseif colonna==8
                            profilo_int_vento=[profilo_int_vento valore]; %#ok<AGROW>
                        end
                    end %fine for colonna=1:8             
                end %fine for riga=1:tot_righe_dati
            catch
            end
            %creo la matrice con i dati del radiosondaggio
            matrice_dati=[profilo_prs' profilo_hgt' profilo_temp' profilo_dwpt' profilo_ur' ...
                profilo_mixr' profilo_dir_vento' profilo_int_vento'];
    
            %della matrice con i dati del radiosondaggio, poto tutte quelle righe
            %in cui è assente il dato temperatura (3° colonna)
            ok_nan=0;
            while ok_nan==0
                trova_nan=find(isnan(matrice_dati(:,3))==1);
                if size(trova_nan,1)~=0 %se esiste un NaN elimino la riga
                    matrice_dati(trova_nan(1),:)=[];
                else %se non esiste esco dal while
                    ok_nan=1;
                end %fine if size(trova_nan,2)~=0
            end %fine while ok_nan==0
            %convero i nodi in m/s
            matrice_dati(:,8)=matrice_dati(:,8)*0.5144;
            clear trova_nan
    
            %scrivo il file con i dati del radiosondaggio
            fid_spc=fopen(['sounding_' stringa_anno stringa_mese stringa_giorno...
                '_' stringa_ora_UTC 'Z.dat'],'w');
                fprintf(fid_spc,'%s','%P[hPa],  Z[m],  T[°C], DP[°C], RH[%], MR[g/kg], DRCT[°], SKNT[m/s] ');
                fprintf(fid_spc,'\n');
                for i=1:size(matrice_dati,1)
                    fprintf(fid_spc,'%7.1f %6.0f %+7.1f %+7.1f %5.0f %10.2f %8.0f %8.1f \n'...
                        ,matrice_dati(i,:));
                end
            fclose(fid_spc);   
            disp(['Radiosondaggio del ' stringa_giorno '/' stringa_mese '/' ...
                stringa_anno ' ora ' stringa_ora_UTC ' UTC scaricato da Internet']);
            disp('------------------------------------------------')                           
            %cancello il temp.dat
            delete('temp.dat')
    
        else
            disp(['Radiosondaggio del ' stringa_giorno '/' stringa_mese ...
                '/' stringa_anno ' ora ' stringa_ora_UTC ' UTC NON presente']);
            disp('-------------------------------------')
        end %fine if size(test_01,1)~=0 ED ALTRI ELSEIF!
    else
        disp(['IMPOSSIBILE SCARICARE radiosondaggio del ' stringa_giorno '/' stringa_mese ...
                '/' stringa_anno ' ora ' stringa_ora_UTC ' UTC ']);
    end
    E la maremma, che lavoro!
    Spero proprio che tu non lo abbia fatto apposta per rispondere alla mia query e che ce l'avessi già lì, altrimenti mi sentirei decisamente in colpa.
    Non ho Matlab e non lo maneggio ma visto che ho il pomeriggio libero credo che inizierò a interessarmene.

    Grazie.

  7. #7
    Burrasca L'avatar di Borat
    Data Registrazione
    08/06/08
    Località
    -999
    Messaggi
    5,669
    Menzionato
    0 Post(s)

    Predefinito Re: Fonte radiosondaggi

    Citazione Originariamente Scritto da Controcorrente Visualizza Messaggio
    4) Importante: questo codice contiene dei controlli che mettono in pausa la query quando ad esempio il server è sovraccarico oppure quando ti bloccano l'ip. Io lo utilizzai massivamente con vari cicli for per scaricarmi una importante serie climatologica: dopo un po' ti bloccano perchè c'è un numero massimo di query orarie per stesso ip
    Circa questo problema, puoi aggirarlo usando un proxy gratuito. Non sono veloci, non sono sicuri (puoi ovviare blindando un po' il pc con firewall a manetta) ma ti consentono di aggirare i blocchi basati sull'IP. Fai andare il tuo programma, ogni tanto lo metti in pausa, cambi IP e riparti per ancora un po' di iterazioni, poi ri-cambi IP eccetera. Ti vedono un po' dall'Arabia, un po' dalla Turchia, un po' da Ferrara, un po' dal Canada eccetera e se non hanno una blacklist di open proxy (come ce l'ha ad esempio Wikipedia, che li blocca in edit) ti fai i lavori che ti servono senza essere bloccato.

  8. #8
    Burrasca L'avatar di Borat
    Data Registrazione
    08/06/08
    Località
    -999
    Messaggi
    5,669
    Menzionato
    0 Post(s)

    Predefinito Re: Fonte radiosondaggi

    500 sterline per una licenza student? Matlab

    Dopo "bio-ladri" per il negozio di alimenti biologici vicino a casa mia, "meteo-loladri" per altri commercianti in giro per il mondo, mi tocca coniare il termine "stat-ladri"

    Credo proprio che farò a meno di Matlab. Vediamo se trovo online qualche libreria analoga per R.

  9. #9
    Burrasca L'avatar di Borat
    Data Registrazione
    08/06/08
    Località
    -999
    Messaggi
    5,669
    Menzionato
    0 Post(s)

    Predefinito Re: Fonte radiosondaggi

    Trovata libreria per R.

    CRAN - Package RadioSonde

    Basta che non richieda di metterci manualmente i dati ma sia capace di leggerseli da sé da uwyoming...

Segnalibri

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •