Package: openet-ndvi
WARNING: This code is in development, is being provided without support, and is subject to change at any time without notificationThis repository provides an Earth Engine Python API based implementation of a simple model for computing evapotranspiration (ET) as a linear function of the normalized difference vegetation index (NDVI).  In this model, the fraction of reference ET (ETf) is computed as:\begin{equation*}
ETf = m * NDVI + b
\end{equation*}where m and b have defaults of 1.25 and 0.0 respectively.  The actual ET is computed as:\begin{equation*}
ET = ETf * ETr
\end{equation*}Input CollectionsThe NDVI ET model is currently implemented for the following Earth Engine image collections:Landsat TOALANDSAT/LC08/C01/T1_TOA or LANDSAT/LC08/C01/T1_RT_TOALANDSAT/LE07/C01/T1_TOA or LANDSAT/LE07/C01/T1_RT_TOALANDSAT/LT05/C01/T1_TOALANDSAT/LT04/C01/T1_TOALandsat SRLANDSAT/LC08/C01/T1_SRLANDSAT/LE07/C01/T1_SRLANDSAT/LT05/C01/T1_SRLANDSAT/LT04/C01/T1_SRSentinel 2 TOACOPERNICUS/S2Model StructureThe primary way of interact with the NDVI-ET model are through the “Collection” and “Image” classes.CollectionThe Collection class should be used to generate image collections of ET (and and other modelVariables).  These collections can be for image “overpass” dates only or interpolated to daily, monthly, or annual time steps.  The collections can be built for multiple input collections types, such as merging Landsat 8 and Sentinel 2.The Collection class is built based on a list of input collections ID’s, a date range, and a study area geometry.Required InputscollectionsList of Earth Engine collection IDs (seeInput Collections).start_dateISO format start date string (i.e. YYYY-MM-DD) that is passed directly to the collection .filterDate() calls.end_dateISO format end date string that is passed directly to .filterDate() calls.  The end date must be exclusive (i.e. data will go up to this date but not include it).geometryee.Geometry() that is passed to the collection .filterBounds() calls.
All images with a footprint that intersects the geometry will be included.Optional Inputsetr_sourceReference ET source collection ID.
Optional, the default is ‘IDAHO_EPSCOR/GRIDMET’.etr_bandReference ET source band name.
Optional, the default is ‘etr’.cloud_cover_maxMaximum cloud cover percentage.
The input collections will be filtered to images with a cloud cover percentage less than this value.
Optional, the default is 70 (%).filter_argsCustom filter arguments for teh input collections.
This parameter is not yet fully implemented.model_argsA dictionary of argument to pass through to the Image class initialization.
This parameter is not yet fully implemented.Overpass MethodvariablesList of variables to calculate/return.Interpolate MethodvariablesList of variables to calculate/return.t_intervalTime interval over which to interpolate and aggregate values.
Choices: ‘daily’, ‘monthly’, ‘annual’, ‘custom’
Optional, the default is ‘custom’.interp_methodInterpolation method.
Choices: ‘linear’
Optional, the default is ‘linear’.interp_daysNumber of extra days before the start date and after the end date to include in the interpolation calculation.
Optional, the default is 32.Collection Examplesimportopenet.ndviasndvi_etoverpass_coll=ndvi_et.Collection(collections=['LANDSAT/LC08/C01/T1_TOA'],start_date='2017-06-01',end_date='2017-09-01',geometry=ee.Geometry.Point(-121.5265,38.7399),etr_source='IDAHO_EPSCOR/GRIDMET',etr_band='etr')\.overpass(variables=['et','etr','etf'])monthly_coll=ndvi_et.Collection(collections=['LANDSAT/LC08/C01/T1_TOA'],start_date='2017-06-01',end_date='2017-09-01',geometry=ee.Geometry.Point(-121.5265,38.7399),etr_source='IDAHO_EPSCOR/GRIDMET',etr_band='etr')\.interpolate(variables=['et','etr','etf']t_interval='monthly')ImageThe Image class should be used to process a single image, an image collection with custom filtering, or to apply custom parameters to each image in a collection.Typically the NDVI-ET Image is initialized using one of the collection/sensor specific helper methods listed below (see below).  These methods rename the bands to a common naming scheme, apply basic cloud masking, and .Image collections can be built by mapping one of the helper methods over an image collection.  Please see theImage Mappingexample notebook for more details.The Image class can also be initialized using any Earth Engine image with an ‘ndvi’ band and a ‘system:time_start’ property.Landsat Collection 1 Top-of-Atmosphere (TOA) Input ImageTo instantiate the class for a Landsat Collection 1 TOA image, use the Image.from_landsat_c1_toa() method.The input Landsat image must have the following bands and properties:SPACECRAFT_IDBand NamesLANDSAT_4B1, B2, B3, B4, B5, B7, B6, BQALANDSAT_5B1, B2, B3, B4, B5, B7, B6, BQALANDSAT_7B1, B2, B3, B4, B5, B7, B6_VCID_1, BQALANDSAT_8B2, B3, B4, B5, B6, B7, B10, BQAPropertyDescriptionsystem:indexLandsat Scene IDMust be in the Earth Engine format (e.g. LC08_044033_20170716)system:time_startImage datetime in milliseconds since 1970SPACECRAFT_IDUsed to determine which Landsat type (for band renaming)Must be: LANDSAT_4, LANDSAT_5, LANDSAT_7, or LANDSAT_8Landsat Collection 1 Surface Reflectance (SR) Input ImageTo instantiate the class for a Landsat Collection 1 SR image, use the Image.from_landsat_c1_sr() method.The input Landsat image must have the following bands and properties:SATELLITEBand NamesLANDSAT_4B1, B2, B3, B4, B5, B7, B6, pixel_qaLANDSAT_5B1, B2, B3, B4, B5, B7, B6, pixel_qaLANDSAT_7B1, B2, B3, B4, B5, B7, B6, pixel_qaLANDSAT_8B2, B3, B4, B5, B6, B7, B10, pixel_qaPropertyDescriptionsystem:indexLandsat Scene IDMust be in the Earth Engine format (e.g. LC08_044033_20170716)system:time_startImage datetime in milliseconds since 1970SATELLITEUsed to determine which Landsat type (for band renaming)Must be: LANDSAT_4, LANDSAT_5, LANDSAT_7, or LANDSAT_8Sentinel 2 TOA Input ImageTo instantiate the class for a Landsat Collection 1 TOA image, use the Image.from_sentinel2_toa() method.The input Landsat image must have the following bands and properties:SPACECRAFT_NAMEBand NamesSentinel-2AB2, B3, B4, B8, B11, B12, QA60Sentinel-2BB2, B3, B4, B8, B11, B12, QA60PropertyDescriptionsystem:indexSentinel 2 Scene IDMust be in the Earth Engine format (e.g. 20180716T183929_20180716T185042_T10SGJ)system:time_startImage datetime in milliseconds since 1970SPACECRAFT_NAMEUsed to determine which Sentinel 2 typeMust be: Sentinel-2A or Sentinel-2BNot currently used or checkedImage Exampleimportopenet.ndviasndvi_etlandsat_img=ee.Image('LANDSAT/LC08/C01/T1_TOA/LC08_044033_20170716')et_img=ndvi_et.Image.from_landsat_c1_toa(landsat_img,etr_source='IDAHO_EPSCOR/GRIDMET',etr_band='etr).etVariablesThe NDVI-ET model can compute the following variables:ndviNormalized difference vegetation index [unitless]etfFraction of reference ET [unitless]etrReference ET (alfalfa) [mm]etActual ET [mm]There is also a more general “calculate” method that can be used to return a multiband image of multiple variables (see example…)Reference ETThe reference ET data source is controlled using the “etr_source” and “etr_band” parameters.The model is expecting an alfalfa reference ET (ETr) and will not return valid results if a grass reference ET (ETo) is used.Reference ET SourcesGRIDMETCollection ID: IDAHO_EPSCOR/GRIDMEThttp://www.climatologylab.org/gridmet.htmlSpatial CIMISCollection ID: projects/openet/cimis/dailyhttps://cimis.water.ca.gov/SpatialData.aspxExample NotebooksDetailed Jupyter Notebooks of the various approaches for calling the OpenET NDVI ET model are provided in the “examples” folder.Computing daily ET for a single Landsat imageComputing a collection of “overpass” ET imagesComputing a collection of interpolated monthly ET imagesInstallationThe python OpenET NDVI based ET module can be installed via pip:pip install openet-ndviDependenciesearthengine-apiopenet-coreOpenET Namespace PackageEach OpenET model is stored in the “openet” folder (namespace).  The model can then be imported as a “dot” submodule of the main openet module.import openet.ndvi as ndvi_etDevelopment and TestingPlease see theCONTRIBUTING.rst.References