Advertisement
DangoMelon0701

read_modis.pro

Nov 16th, 2016
970
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. PRO READ_MODIS
  2.  
  3. COMPILE_OPT IDL2
  4.  
  5. directory = 'G:/AOD MODIS/AQUA/products/'
  6. product = '*.hdf'
  7. sdsname = 'Optical_Depth_Land_And_Ocean'
  8. scale = 0.001
  9.  
  10. ;- Obtener una lista de los archivos de entrada
  11. list = file_search(directory + product)
  12. help, list
  13.  
  14. ;- Establecer antigua fecha
  15. old_date = 'MYD04_L2.A9999273.1840'
  16.  
  17. ;- Obtener la unidad del archivo de salida
  18. get_lun, lun
  19.  
  20. ;- Bucle sobre los archivos de entrada
  21. for i = 0, n_elements(list) - 1 do begin
  22.  
  23.   ;- Obtener los nombres de los archivos
  24.   input_file = list[i]
  25.   print, input_file
  26.  
  27.   ;- Leer archivo de entrada
  28.   hdfid = hdf_sd_start(input_file)
  29.   hdf_sd_varread, hdfid, 'Latitude', lat
  30.   hdf_sd_varread, hdfid, 'Longitude', lon
  31.   hdf_sd_varread, hdfid, sdsname, data
  32.   hdf_sd_end, hdfid
  33.  
  34.   ;- Aplicar el factor de escala
  35.   data = data * scale
  36.  
  37.   ;- Obtener la fecha del archivo (ejm. 'MYD04_L2.A2015273')
  38.   file_name = basename(input_file)
  39.   date_length = strlen(old_date)
  40.   new_date = strmid(file_name, 0, date_length)
  41.  
  42.   ;- Encontrar los datos validos
  43.   loc = where(data gt 0.0, count)
  44.   print, count
  45.  
  46.   ;- Guardar los datos validos
  47.   if (count gt 0) then begin
  48.    
  49.     ;- Abrir un nuevo archivo de salida de ser necesario
  50.     if (strmid(new_date,0,17) ne strmid(old_date,0,17)) then begin
  51.       free_lun, lun
  52.       output_file = 'G:/AOD MODIS/AQUA/out/'+new_date + '.dat'
  53.       openw, lun, output_file, /get_lun
  54.       old_date = new_date
  55.       print, '  '
  56.       print, 'Abriendo nuevo archivo de salida', output_file
  57.     endif
  58.    
  59.     ;- Guardar los datos validos en una tabla (lat, lon, data)
  60.     table = fltarr(3, count)
  61.     table[0, *] = lat[loc]
  62.     table[1, *] = lon[loc]
  63.     table[2, *] = data[loc]
  64.    
  65.     ;- Escribir el archivo de salida en formato binario
  66.     print, 'Escribiendo data de ', input_file
  67.     writeu, lun, table
  68.    
  69.   endif
  70.  
  71. endfor
  72.  
  73. END
Advertisement
RAW Paste Data Copied
Advertisement