Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 40 additions & 24 deletions Examples/Image_function_geeSEBAL.ipynb

Large diffs are not rendered by default.

34 changes: 19 additions & 15 deletions etbrasil/geesebal/collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,9 @@ def __init__(self,
#GET INFORMATIONS FROM IMAGE
self._index=self.image.get('system:index')
self.cloud_cover=self.image.get('CLOUD_COVER')
self.LANDSAT_ID=self.image.get('LANDSAT_ID').getInfo()
self.landsat_version=self.image.get('SATELLITE').getInfo()
self.zenith_angle=self.image.get("SOLAR_ZENITH_ANGLE").getInfo()
self.azimuth_angle=self.image.get('SOLAR_AZIMUTH_ANGLE')
self.LANDSAT_ID=self.image.get('LANDSAT_PRODUCT_ID').getInfo()
self.landsat_version=self.image.get('SPACECRAFT_ID').getInfo()
self.sun_elevation=self.image.get('SUN_ELEVATION').getInfo()
self.time_start=self.image.get('system:time_start')
self._date=ee.Date(self.time_start)
self._year=ee.Number(self._date.get('year'))
Expand All @@ -119,12 +118,13 @@ def __init__(self,

#MAKS
if self.landsat_version == 'LANDSAT_5':
#self.image=self.image .select([0,1,2,3,4,5,6,9], ["B","GR","R","NIR","SWIR_1","BRT","SWIR_2", "pixel_qa"])
self.image_toa=ee.Image('LANDSAT/LT05/C01/T1/'+ self._index.getInfo())
# self.image = self.image.select(['SR_B1','SR_B2','SR_B3','SR_B4','SR_B5' ,'ST_B6' ,'SR_B7' ,'QA_PIXEL'],
# ["B" ,"GR" ,"R" ,"NIR" ,"SWIR_1","BRT" ,"SWIR_2","pixel_qa"])
self.image_toa=ee.Image('LANDSAT/LT05/C02/T1_TOA/'+ self._index.getInfo())

#GET CALIBRATED RADIANCE
self.col_rad = ee.Algorithms.Landsat.calibratedRadiance(self.image_toa);
self.col_rad = self.image.addBands(self.col_rad.select([5],["T_RAD"]))
self.col_rad = self.image.addBands(self.col_rad.select(['B6'],["T_RAD"]))

#CLOUD REMOTION
self.image=ee.ImageCollection(self.image).map(f_cloudMaskL457_SR)
Expand All @@ -133,38 +133,42 @@ def __init__(self,
self.image=self.image.map(f_albedoL5L7)

elif self.landsat_version == 'LANDSAT_7':
#self.image=self.image .select([0,1,2,3,4,5,6,9], ["B","GR","R","NIR","SWIR_1","BRT","SWIR_2", "pixel_qa"])
self.image_toa=ee.Image('LANDSAT/LE07/C01/T1/'+ self.CollectionList[n][4:])
# self.image = self.image.select(['SR_B1','SR_B2','SR_B3','SR_B4','SR_B5' ,'ST_B6' ,'SR_B7' ,'QA_PIXEL'],
# ["B" ,"GR" ,"R" ,"NIR" ,"SWIR_1","BRT" ,"SWIR_2","pixel_qa"])
self.image_toa=ee.Image('LANDSAT/LE07/C02/T1_TOA/'+ self.CollectionList[n][4:])

#GET CALIBRATED RADIANCE
self.col_rad = ee.Algorithms.Landsat.calibratedRadiance(self.image_toa);
self.col_rad = self.image.addBands(self.col_rad.select([5],["T_RAD"]))
self.col_rad = self.image.addBands(self.col_rad.select(['B6_VCID_1'],["T_RAD"]))

#CLOUD REMOTION
self.image=ee.ImageCollection(self.image).map(f_cloudMaskL457_SR)

#ALBEDO TASUMI ET AL. (2008)
self.image=self.image.map(f_albedoL5L7)

else:
#self.image = self.select([0,1,2,3,4,5,6,7,10],["UB","B","GR","R","NIR","SWIR_1","SWIR_2","BRT","pixel_qa"])
self.image_toa=ee.Image('LANDSAT/LC08/C01/T1/'+self._index.getInfo())
elif self.landsat_version == 'LANDSAT_8':
# self.image = self.image.select(['SR_B1','SR_B2','SR_B3','SR_B4','SR_B5','SR_B6' ,'SR_B7' ,'ST_B10','QA_PIXEL'],
# ["UB" ,"B" ,"GR" ,"R" ,"NIR" ,"SWIR_1","SWIR_2","BRT" ,"pixel_qa"])
self.image_toa=ee.Image('LANDSAT/LC08/C02/T1_TOA/'+self._index.getInfo())

#GET CALIBRATED RADIANCE
self.col_rad = ee.Algorithms.Landsat.calibratedRadiance(self.image_toa)
self.col_rad = self.image.addBands(self.col_rad.select([9],["T_RAD"]))
self.col_rad = self.image.addBands(self.col_rad.select(['B10'],["T_RAD"]))

#CLOUD REMOTION
self.image=ee.ImageCollection(self.image).map(f_cloudMaskL8_SR)

#ALBEDO TASUMI ET AL. (2008) METHOD WITH KE ET AL. (2016) COEFFICIENTS
self.image=self.image.map(f_albedoL8)

else:
raise Exception('Landsat 9 not added yet.')

#GEOMETRY
self.geometryReducer=self.image.geometry().bounds().getInfo()
self.geometry_download=self.geometryReducer['coordinates']
self.camada_clip=self.image.select('BRT').first()
self.sun_elevation=ee.Number(90).subtract(self.zenith_angle)

#METEOROLOGY PARAMETERS
col_meteorology= get_meteorology(self.image,self.time_start)
Expand Down
120 changes: 71 additions & 49 deletions etbrasil/geesebal/image.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,15 @@

#FOLDERS
from .masks import (
f_cloudMaskL457_SR,f_cloudMaskL8_SR,
f_albedoL5L7,f_albedoL8)
apply_scale_factorsL8_SR, apply_scale_factorsL457_SR,
f_cloudMaskL457_SR,f_cloudMaskL8_SR,
f_albedoL5L7,f_albedoL8)
from .meteorology import get_meteorology
from .tools import (fexp_spec_ind, fexp_lst_export,fexp_radlong_up, LST_DEM_correction,
fexp_radshort_down, fexp_radlong_down, fexp_radbalance, fexp_soil_heat,fexp_sensible_heat_flux)
from .endmembers import fexp_cold_pixel, fexp_hot_pixel
from .evapotranspiration import fexp_et


#IMAGE FUNCTION
class Image():

Expand All @@ -47,9 +47,9 @@ def __init__(self,
self.image = ee.Image(image)
self._index=self.image.get('system:index')
self.cloud_cover=self.image.get('CLOUD_COVER')
self.LANDSAT_ID=self.image.get('LANDSAT_ID').getInfo()
self.landsat_version=self.image.get('SATELLITE').getInfo()
self.azimuth_angle=self.image.get('SOLAR_ZENITH_ANGLE')
self.LANDSAT_ID=self.image.get('LANDSAT_PRODUCT_ID').getInfo()
self.landsat_version=self.image.get('SPACECRAFT_ID').getInfo()
self.sun_elevation=self.image.get('SUN_ELEVATION').getInfo()
self.time_start=self.image.get('system:time_start')
self._date=ee.Date(self.time_start)
self._year=ee.Number(self._date.get('year'))
Expand All @@ -69,54 +69,76 @@ def __init__(self,

#LANDSAT IMAGE
if self.landsat_version == 'LANDSAT_5':
self.image=self.image.select([0,1,2,3,4,5,6,9], ["B","GR","R","NIR","SWIR_1","BRT","SWIR_2", "pixel_qa"])
self.image_toa=ee.Image('LANDSAT/LT05/C01/T1/'+ self._index.getInfo())

#GET CALIBRATED RADIANCE
self.col_rad = ee.Algorithms.Landsat.calibratedRadiance(self.image_toa);
self.col_rad = self.image.addBands(self.col_rad.select([5],["T_RAD"]))

#CLOUD REMOTION
self.image=ee.ImageCollection(self.image).map(f_cloudMaskL457_SR)

#ALBEDO TASUMI ET AL. (2008)
self.image=self.image.map(f_albedoL5L7)

#APPLY SCALE FACTORS
self.image=ee.ImageCollection(self.image).map(apply_scale_factorsL457_SR)
self.image = self.image.first()

#SELECT AND RENAME BANDS
self.image = self.image.select(['SR_B1','SR_B2','SR_B3','SR_B4','SR_B5' ,'ST_B6' ,'SR_B7' ,'QA_PIXEL'],
["B" ,"GR" ,"R" ,"NIR" ,"SWIR_1","BRT" ,"SWIR_2","pixel_qa"])
self.image_toa=ee.Image('LANDSAT/LT05/C02/T1_TOA/'+ self._index.getInfo())

#GET CALIBRATED RADIANCE
self.col_rad = ee.Algorithms.Landsat.calibratedRadiance(self.image_toa);
self.col_rad = self.image.addBands(self.col_rad.select(['B6'],["T_RAD"]))

#CLOUD REMOTION
self.image=ee.ImageCollection(self.image).map(f_cloudMaskL457_SR)

#ALBEDO TASUMI ET AL. (2008)
self.image=self.image.map(f_albedoL5L7)

elif self.landsat_version == 'LANDSAT_7':
self.image=self.image.select([0,1,2,3,4,5,6,9], ["B","GR","R","NIR","SWIR_1","BRT","SWIR_2", "pixel_qa"])
self.image_toa=ee.Image('LANDSAT/LE07/C01/T1/'+ self._index.getInfo())

#GET CALIBRATED RADIANCE
self.col_rad = ee.Algorithms.Landsat.calibratedRadiance(self.image_toa);
self.col_rad = self.image.addBands(self.col_rad.select([5],["T_RAD"]))

#CLOUD REMOVAL
self.image=ee.ImageCollection(self.image).map(f_cloudMaskL457_SR)

#ALBEDO TASUMI ET AL. (2008)
self.image=self.image.map(f_albedoL5L7)

else:
self.image = self.image.select([0,1,2,3,4,5,6,7,10],["UB","B","GR","R","NIR","SWIR_1","SWIR_2","BRT","pixel_qa"])
self.image_toa=ee.Image('LANDSAT/LC08/C01/T1/'+self._index.getInfo())

#GET CALIBRATED RADIANCE

#APPLY SCALE FACTORS
self.image=ee.ImageCollection(self.image).map(apply_scale_factorsL457_SR)
self.image = self.image.first()

#SELECT AND RENAME BANDS
self.image = self.image.select(['SR_B1','SR_B2','SR_B3','SR_B4','SR_B5' ,'ST_B6' ,'SR_B7' ,'QA_PIXEL'],
["B" ,"GR" ,"R" ,"NIR" ,"SWIR_1","BRT" ,"SWIR_2","pixel_qa"])
self.image_toa=ee.Image('LANDSAT/LE07/C02/T1_TOA/'+ self._index.getInfo())

#GET CALIBRATED RADIANCE
self.col_rad = ee.Algorithms.Landsat.calibratedRadiance(self.image_toa);
self.col_rad = self.image.addBands(self.col_rad.select(['B6_VCID_1'],["T_RAD"]))

#CLOUD REMOTION
self.image=ee.ImageCollection(self.image).map(f_cloudMaskL457_SR)

#ALBEDO TASUMI ET AL. (2008)
self.image=self.image.map(f_albedoL5L7)

elif self.landsat_version == 'LANDSAT_8':

#APPLY SCALE FACTORS
self.image=ee.ImageCollection(self.image).map(apply_scale_factorsL8_SR)
self.image = self.image.first()

#SELECT AND RENAME BANDS
self.image = self.image.select(['SR_B1','SR_B2','SR_B3','SR_B4','SR_B5','SR_B6' ,'SR_B7' ,'ST_B10','QA_PIXEL'],
["UB" ,"B" ,"GR" ,"R" ,"NIR" ,"SWIR_1","SWIR_2","BRT" ,"pixel_qa"])
self.image_toa=ee.Image('LANDSAT/LC08/C02/T1_TOA/'+self._index.getInfo())

#GET CALIBRATED RADIANCE
self.col_rad = ee.Algorithms.Landsat.calibratedRadiance(self.image_toa)
self.col_rad = self.image.addBands(self.col_rad.select([9],["T_RAD"]))
self.col_rad = self.image.addBands(self.col_rad.select(['B10'],["T_RAD"]))

#CLOUD REMOVAL
#CLOUD REMOTION
self.image=ee.ImageCollection(self.image).map(f_cloudMaskL8_SR)

#ALBEDO TASUMI ET AL. (2008) METHOD WITH KE ET AL. (2016) COEFFICIENTS
#ALBEDO TASUMI ET AL. (2008) METHOD WITH KE ET AL. (2016) COEFFICIENTS
self.image=self.image.map(f_albedoL8)

else:
raise Exception('Landsat 9 not added yet.')

#GEOMETRY
self.geometryReducer=self.image.geometry().bounds().getInfo()
self.geometry_download=self.geometryReducer['coordinates']
self.camada_clip=self.image.select('BRT').first()

self.sun_elevation=ee.Number(90).subtract(self.azimuth_angle)


#METEOROLOGY PARAMETERS
col_meteorology= get_meteorology(self.image,self.time_start);

Expand All @@ -139,13 +161,13 @@ def __init__(self,

#GET IMAGE
self.image=self.image.first()

#SPECTRAL IMAGES (NDVI, EVI, SAVI, LAI, T_LST, e_0, e_NB, long, lat)
self.image=fexp_spec_ind(self.image)

#LAND SURFACE TEMPERATURE
self.image=LST_DEM_correction(self.image, self.z_alt, self.T_air, self.UR,self.sun_elevation,self._hour,self._minuts)

#COLD PIXEL
self.d_cold_pixel=fexp_cold_pixel(self.image, self.geometryReducer, self.p_top_NDVI, self.p_coldest_Ts)

Expand All @@ -169,11 +191,11 @@ def __init__(self,

#HOT PIXEL
self.d_hot_pixel=fexp_hot_pixel(self.image, self.geometryReducer,self.p_lowest_NDVI, self.p_hottest_Ts)

#SENSIBLE HEAT FLUX (H) [W M-2]
self.image=fexp_sensible_heat_flux(self.image, self.ux, self.UR,self.Rn24hobs,self.n_Ts_cold,
self.d_hot_pixel, self.date_string,self.geometryReducer)

self.image = fexp_sensible_heat_flux(self.image, self.ux, self.UR, self.Rn24hobs,self.n_Ts_cold,
self.d_hot_pixel, self.date_string, self.geometryReducer)
#DAILY EVAPOTRANSPIRATION (ET_24H) [MM DAY-1]
self.image=fexp_et(self.image,self.Rn24hobs)

Expand Down
30 changes: 18 additions & 12 deletions etbrasil/geesebal/landsatcollection.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,65 +24,71 @@

#GET LANDSAT 8 COLLECTIONS BY PATH ROW
def fexp_landsat_8PathRow(start_date,end_date,n_path, n_row,th_cloud_cover):
col_SR_L8 =(ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
col_SR_L8 =(ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.filterDate(start_date, end_date)
.filterMetadata('WRS_PATH', 'equals', n_path)
.filterMetadata('WRS_ROW', 'equals', n_row)
.select([0,1,2,3,4,5,6,7,10],["UB","B","GR","R","NIR","SWIR_1","SWIR_2","BRT","pixel_qa"])
.select(['SR_B1','SR_B2','SR_B3','SR_B4','SR_B5','SR_B6' ,'SR_B7' ,'ST_B10','QA_PIXEL'],
["UB" ,"B" ,"GR" ,"R" ,"NIR" ,"SWIR_1","SWIR_2","BRT" ,"pixel_qa"])
.filterMetadata('CLOUD_COVER', 'less_than', th_cloud_cover));
return col_SR_L8;

#GET LANDSAT 7 COLLECTIONS BY PATH ROW
def fexp_landsat_7PathRow(start_date,end_date,n_path, n_row,th_cloud_cover):

col_SR_L7 =(ee.ImageCollection('LANDSAT/LE07/C01/T1_SR')
col_SR_L7 =(ee.ImageCollection('LANDSAT/LE07/C02/T1_L2')
.filterDate(start_date, end_date)
.filterMetadata('WRS_PATH', 'equals', n_path)
.filterMetadata('WRS_ROW', 'equals', n_row)
.select([0,1,2,3,4,5,6,9], ["B","GR","R","NIR","SWIR_1","BRT","SWIR_2", "pixel_qa"])
.select(['SR_B1','SR_B2','SR_B3','SR_B4','SR_B5' ,'ST_B6' ,'SR_B7' ,'QA_PIXEL'],
["B" ,"GR" ,"R" ,"NIR" ,"SWIR_1","BRT" ,"SWIR_2","pixel_qa"])
.filterMetadata('CLOUD_COVER', 'less_than', th_cloud_cover));


return col_SR_L7;

#GET LANDSAT 5 COLLECTIONS BY PATH ROW
def fexp_landsat_5PathRow(start_date,end_date,n_path, n_row,th_cloud_cover):
col_SR_L5 =(ee.ImageCollection('LANDSAT/LT05/C01/T1_SR')
col_SR_L5 =(ee.ImageCollection('LANDSAT/LT05/C02/T1_L2')
.filterDate(start_date, end_date)
.filterMetadata('WRS_PATH', 'equals', n_path)
.filterMetadata('WRS_ROW', 'equals', n_row)
.select([0,1,2,3,4,5,6,9], ["B","GR","R","NIR","SWIR_1","BRT","SWIR_2", "pixel_qa"])
.select(['SR_B1','SR_B2','SR_B3','SR_B4','SR_B5' ,'ST_B6' ,'SR_B7' ,'QA_PIXEL'],
["B" ,"GR" ,"R" ,"NIR" ,"SWIR_1","BRT" ,"SWIR_2","pixel_qa"])
.filterMetadata('CLOUD_COVER', 'less_than', th_cloud_cover));

return col_SR_L5;

#GET LANDSAT 7 COLLECTIONS BY COORDINATE
def fexp_landsat_7Coordinate(start_date,end_date,coordinate,th_cloud_cover):

col_SR_L7 =(ee.ImageCollection('LANDSAT/LE07/C01/T1_SR')
col_SR_L7 =(ee.ImageCollection('LANDSAT/LE07/C02/T1_L2')
.filterDate(start_date, end_date)
.filterBounds(coordinate)
.select([0,1,2,3,4,5,6,9], ["B","GR","R","NIR","SWIR_1","BRT","SWIR_2", "pixel_qa"])
.select(['SR_B1','SR_B2','SR_B3','SR_B4','SR_B5' ,'ST_B6' ,'SR_B7' ,'QA_PIXEL'],
["B" ,"GR" ,"R" ,"NIR" ,"SWIR_1","BRT" ,"SWIR_2","pixel_qa"])
.filterMetadata('CLOUD_COVER', 'less_than', th_cloud_cover));


return col_SR_L7;

#GET LANDSAT 8 COLLECTIONS BY COORDINATE
def fexp_landsat_8Coordinate(start_date,end_date,coordinate,th_cloud_cover):
col_SR_L8 =(ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
col_SR_L8 =(ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.filterDate(start_date, end_date)
.filterBounds(coordinate)
.select([0,1,2,3,4,5,6,7,10],["UB","B","GR","R","NIR","SWIR_1","SWIR_2","BRT","pixel_qa"])
.select(['SR_B1','SR_B2','SR_B3','SR_B4','SR_B5','SR_B6' ,'SR_B7' ,'ST_B10','QA_PIXEL'],
["UB" ,"B" ,"GR" ,"R" ,"NIR" ,"SWIR_1","SWIR_2","BRT" ,"pixel_qa"])
.filterMetadata('CLOUD_COVER', 'less_than', th_cloud_cover));
return col_SR_L8;

#GET LANDSAT 5 COLLECTIONS BY COORDINATE
def fexp_landsat_5Coordinate(start_date,end_date,coordinate,th_cloud_cover):
col_SR_L5 =(ee.ImageCollection('LANDSAT/LT05/C01/T1_SR')
col_SR_L5 =(ee.ImageCollection('LANDSAT/LT05/C02/T1_L2')
.filterDate(start_date, end_date)
.filterBounds(coordinate)
.select([0,1,2,3,4,5,6,9], ["B","GR","R","NIR","SWIR_1","BRT","SWIR_2", "pixel_qa"])
.select(['SR_B1','SR_B2','SR_B3','SR_B4','SR_B5' ,'ST_B6' ,'SR_B7' ,'QA_PIXEL'],
["B" ,"GR" ,"R" ,"NIR" ,"SWIR_1","BRT" ,"SWIR_2","pixel_qa"])
.filterMetadata('CLOUD_COVER', 'less_than', th_cloud_cover));

return col_SR_L5;
Loading