Advertisement
Guest User

Untitled

a guest
Jan 17th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. #!/usr/bin/evn Python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import gdal
  5. import numpy as np
  6. import os
  7. import glob
  8.  
  9.  
  10. def mask_data(hdf_fname):
  11.  
  12. n_bands = 7
  13. for band in range(n_bands):
  14. fname_qa = 'HDF4_EOS:EOS_GRID:"%s":MOD_Grid_BRDF:BRDF_Albedo_Band_Mandatory_Quality_Band%d' % (hdf_fname, band + 1)
  15. fname_surf_ref = 'HDF4_EOS:EOS_GRID:"%s":MOD_Grid_BRDF:Nadir_Reflectance_Band%d' % (hdf_fname, band + 1)
  16.  
  17. # Get the quality data
  18. # Open dataset
  19. d_q = gdal.Open(fname_qa)
  20. # Get the data and put into an array
  21. quality = d_q.ReadAsArray()
  22.  
  23. # Now the reflectance
  24. d_r = gdal.Open(fname_surf_ref)
  25. surf_refl = d_r.ReadAsArray()
  26.  
  27. # Process quality band
  28. # https://lpdaac.usgs.gov/dataset_discovery/modis/modis_products_table/mcd43a4_v006
  29. # Product Quality
  30. # *Mandatory QA bit index:
  31. # 0 = processed, good quality (full BRDF inversions)
  32. # 1 = processed, see other QA (magnitude BRDF inversions)
  33. # 255 = Fill Value
  34.  
  35. # Since we want to keep best quality pixels, all 0s, we can create a binary mask
  36. # where all pixel that are 0s will be True, the rest False
  37. quality = np.where(quality == 0 and 1, True, False)
  38.  
  39. # Mask reflectance
  40. surf_refl = surf_refl * quality
  41.  
  42. # Save array into a new GeoTiff file
  43. rows, cols = surf_refl.shape
  44. proj = d_r.GetProjection()
  45. gt = d_r.GetGeoTransform()
  46.  
  47. driver = gdal.GetDriverByName('GTiff')
  48. driver_options = ['COMPRESS=DEFLATE',
  49. 'BIGTIFF=YES',
  50. 'PREDICTOR=1',
  51. 'TILED=YES']
  52.  
  53. fname = "%sb%d.tif" % (os.path.basename(hdf_fname)[0:-3], band+1)
  54. # Create a new dataset
  55. new_ds = driver.Create(fname, cols, rows, 1,
  56. gdal.GDT_Int16, driver_options)
  57.  
  58. # Set cartographic projection
  59. new_ds.SetProjection(proj)
  60. new_ds.SetGeoTransform(gt)
  61.  
  62. new_ds.GetRasterBand(1).WriteArray(surf_refl)
  63. new_ds = None
  64.  
  65.  
  66. DataDir = "/home/users/showardc/LandCover/BEIS-LC/MCD43A4/DataDump"
  67. hdf_files = glob.glob(os.path.join(DataDir, "*.hdf"))
  68. hdf_files.sort()
  69.  
  70. for hdf_fname in hdf_files:
  71. #hdf_fname = "MCD43A4.A2017160.h17v03.006.2017171210406.hdf"
  72. mask_data(hdf_fname)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement