LehreWiki

SiaChlorophyllProjekt

Arbeitsgruppe 1: Markéta Pokorná , Dennis Brüning

Ziel/Aufgabe: Es soll ein Programm entwickelt werden, dass die wöchentlichen Chlorophyll-a-Datafiles (Level 3 Daten) mit 9 km Auflösung aus dem Internet herunterlädt und in einem Verzeichnis speichert. Da dies komprimierte Datafiles sind, soll das Programm ausserdem diese entpacken.

Downloaden der Datafiles von der Internetseite http://oceancolor.gsfc.nasa.gov

In diesem Programmcode definieren wir eine Funktion, die die spezifischen Datafiles downloadet und im Verzeichnis: /users/ifmlinux30a/ifmrs/u242023/SATBILD/data speichert. Die Datafiles sollen nicht im Homedirectory gespeichert werden, da die Datenmenge sehr groß ist.

Erklärungen zum Programmcode:

Beispiel der heruntergeladenen Dateinamen:

   1 from scipy import *
   2 import os
   3 from pylab import *
   4 
   5 def get_data(name1,data_dir):
   6         os.system('wget -P'+data_dir+' '+name1) # Download of datafiles and save in datadirectory (-P) 
   7         return 
   8 
   9 url='http://oceancolor.gsfc.nasa.gov/cgi/getfile/'
  10 data_directory='/users/ifmlinux30a/ifmrs/u242023/SATBILD/data' # Directory path 
  11 
  12 # Count from 1 to 365 in steps of 8 and download one file for every week (7 days)
  13 for begin1 in range(1,365,8):
  14         datum1='2004%03d'%begin1
  15         end1=begin1+7
  16         datum2='2004%03d'%end1
  17         filename=url+'A'+datum1+datum2+'.L3m_8D_CHLO_9.bz2' # Zipped .hdf data
  18         print filename
  19         get_data(filename,data_directory)

Einlesen der unzipped Dateien

Die Dateien waren nach dem Downloaden sogenannte Zipped-Dateien (komprimierte Dateien), die vor der Weiterverarbeitung noch unzipped (ausgepackt) werden müssen.

Erklärung zum Programmcode:

Es werden 4 Funktionen definiert:

Ab Zeile 43 finden diese Funktionen Anwendung in der bereits oben beschreibenen Schleife über das ganze Jahr:

   1 from scipy import *
   2 from pyhdf.SD import *
   3 import os,os.path,string
   4 import struct#_hdfext
   5 from pylab import *
   6 
   7 def read_CHLO(filename):
   8         # Oeffne HDF4-Datei
   9         f=SD(filename)
  10         # Hole die Attribute (Metadata)
  11         attr = f.attributes()
  12         # Hole die in der Datei verfuegbaren Datensaetze
  13         dsets = f.datasets()
  14         # Hole die Daten aus der Datei in ein scipy.array
  15         data=array(f.select('l3m_data').get())
  16         # Siehe attr:
  17         #'Scaling Equation': ('Base**((Slope*l3m_data) + Intercept) = Parameter value\x00',
  18         Base=attr['Base']
  19         Slope=attr['Slope']
  20         Intercept=attr['Intercept']
  21         data[(data==65535).nonzero()]=nan
  22         # Skaliere die Daten, um die urspruenglichen Einheiten zu berechnen
  23         data=Base**((Slope*data) + Intercept)
  24         return data,attr
  25 
  26 def hdf_set(filename,z):
  27     hdfFile=filename
  28     f = SD(hdfFile,SDC.WRITE|SDC.CREATE)
  29     f.author = 'Lars Kaleschke'
  30     v2=f.create('z',SDC.FLOAT32,(z.shape[0],z.shape[1]))
  31     v2[:]=z.astype(float32)
  32     f.end()
  33     return
  34 
  35 def unzip_data(name1,data_dir):
  36         os.system('bunzip2 '+data_dir+name1)
  37         return
  38 
  39 def zip_data(name1,data_dir):
  40         os.system('bzip2 '+data_dir+name1)
  41         return
  42 
  43 for begin1 in range(1,365,8):    
  44         datum1='2004%03d'%begin1
  45         end1=begin1+7
  46         datum2='2004%03d'%end1
  47         filename='A'+datum1+datum2+'.L3m_8D_CHLO_9.bz2'
  48         data_directory='/users/ifmlinux30a/ifmrs/u242023/SATBILD/data/'
  49         unzip_data(filename,data_directory)
  50         a=string.split((os.path.basename(data_directory+filename)),'.') #Aufspaltung des Dateinamenstrings in drei Teile
  51         b=a[0]+'.'+a[1]
  52         print b
  53         
  54         img,metadata=read_CHLO(data_directory+b) #Einlesen der Hdf-Daten
  55 
  56         ##ECOHAM3/4-Gebiet ausschneiden
  57         ##ECOHAM3/4 Latitude:47.5833 to 63.9833, Longitude:-15.25 to 14.0833
  58 
  59         ecolat1=63.9833
  60         ecolat2=47.5833
  61         ecolon1=-15.25
  62         ecolon2=14.0833
  63         latstep=float(metadata['Latitude Step'])
  64         lonstep=float(metadata['Longitude Step'])
  65         Nlat=float(metadata['Northernmost Latitude'])
  66         Wlon=float(metadata['Westernmost Longitude']) #Koordinaten des Bildausschnitts für die Nordsee
  67 
  68         lat1=floor((Nlat-ecolat1)/latstep)
  69         lat2=ceil((Nlat-ecolat2)/latstep)
  70         lon1=floor((abs(Wlon-ecolon1))/lonstep)
  71         lon2=ceil((abs(Wlon-ecolon2))/lonstep)
  72         img_eco34=img[lat1:lat2,lon1:lon2] #Berechnung der Koordinaten der Satellitenbilder auf den Bildausschnitt
  73 
  74         img_eco34_modgit=ndimage.zoom(img_eco34,(82./198.,88./353.)) #Anpassung des Satellitenbildausschnittes auf Modellgitter
  75 
  76         e=a[0]+'.'+a[1]+'_cut.hdf'
  77         hdf_set(data_directory+e,img_eco34_modgit) #Speichern des angepassten Satbildes als hdf-Datei
  78         figure(1)  #Plotten
  79         imshow(nan_to_num(img_eco34_modgit),vmin=0,vmax=5)
  80         show()
  81         
  82         zip_data(b,data_directory) #komprimieren der gedownloadeten Dateien
  83         c=b+'.bz2'
  84         print c

LehreWiki: ChlorophyllArbeitsGruppe1 (last edited 2008-04-28 09:37:23 by BenteTiedje)