Source code for wcps.spectral

"""
Python classes for spectral indices generated from a standardized list curated at
https://awesome-ee-spectral-indices.readthedocs.io. Each class can be instantiated
with :class:`wcps.model.WCPSExpr` arguments for the respective bands / constants.
Example for applying the NDVI index on red/nir Sentinel-2 bands:

.. code:: python

  from wcps.model import Datacube
  from wcps.spectral import NDVI

  red = Datacube("S2_L2A_32631_B04_10m")
  nir = Datacube("S2_L2A_32631_B08_10m")
  ndvi = NDVI(N=nir, R=red)
  query = ndvi.encode("PNG")
"""

# generated with bin/generate_spectral.py, do not edit manually.

from wcps.model import WCPSExpr, OperandType

[docs] class AFRI1600(WCPSExpr): """Aerosol Free Vegetation Index (1600 nm)"""
[docs] short_name = "AFRI1600"
[docs] long_name = "Aerosol Free Vegetation Index (1600 nm)"
[docs] bands = ['N', 'S1']
[docs] formula = "(N - 0.66 * S1) / (N + 0.66 * S1)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/S0034-4257(01)00190-0"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S1": S1})])
[docs] self.N = N
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class AFRI2100(WCPSExpr): """Aerosol Free Vegetation Index (2100 nm)"""
[docs] short_name = "AFRI2100"
[docs] long_name = "Aerosol Free Vegetation Index (2100 nm)"
[docs] bands = ['N', 'S2']
[docs] formula = "(N - 0.5 * S2) / (N + 0.5 * S2)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/S0034-4257(01)00190-0"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S2": S2})])
[docs] self.N = N
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class ANDWI(WCPSExpr): """Augmented Normalized Difference Water Index"""
[docs] short_name = "ANDWI"
[docs] long_name = "Augmented Normalized Difference Water Index"
[docs] bands = ['B', 'G', 'R', 'N', 'S1', 'S2']
[docs] formula = "(B + G + R - N - S1 - S2)/(B + G + R + N + S1 + S2)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/j.envsoft.2021.105030"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, B: OperandType, G: OperandType, R: OperandType, N: OperandType, S1: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"B": B, "G": G, "R": R, "N": N, "S1": S1, "S2": S2})])
[docs] self.B = B
[docs] self.G = G
[docs] self.R = R
[docs] self.N = N
[docs] self.S1 = S1
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class ARI(WCPSExpr): """Anthocyanin Reflectance Index"""
[docs] short_name = "ARI"
[docs] long_name = "Anthocyanin Reflectance Index"
[docs] bands = ['G', 'RE1']
[docs] formula = "(1 / G) - (1 / RE1)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1562/0031-8655(2001)074%3C0038:OPANEO%3E2.0.CO;2"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, RE1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "RE1": RE1})])
[docs] self.G = G
[docs] self.RE1 = RE1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class ARI2(WCPSExpr): """Anthocyanin Reflectance Index 2"""
[docs] short_name = "ARI2"
[docs] long_name = "Anthocyanin Reflectance Index 2"
[docs] bands = ['N', 'G', 'RE1']
[docs] formula = "N * ((1 / G) - (1 / RE1))"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1562/0031-8655(2001)074%3C0038:OPANEO%3E2.0.CO;2"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, G: OperandType, RE1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "G": G, "RE1": RE1})])
[docs] self.N = N
[docs] self.G = G
[docs] self.RE1 = RE1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class ARVI(WCPSExpr): """Atmospherically Resistant Vegetation Index"""
[docs] short_name = "ARVI"
[docs] long_name = "Atmospherically Resistant Vegetation Index"
[docs] bands = ['N', 'R', 'gamma', 'B']
[docs] formula = "(N - (R - gamma * (R - B))) / (N + (R - gamma * (R - B)))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1109/36.134076"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType, gamma: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "gamma": gamma, "B": B})])
[docs] self.N = N
[docs] self.R = R
[docs] self.gamma = gamma
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class ATSAVI(WCPSExpr): """Adjusted Transformed Soil-Adjusted Vegetation Index"""
[docs] short_name = "ATSAVI"
[docs] long_name = "Adjusted Transformed Soil-Adjusted Vegetation Index"
[docs] bands = ['sla', 'N', 'R', 'slb']
[docs] formula = "sla * (N - sla * R - slb) / (sla * N + R - sla * slb + 0.08 * (1 + sla ** 2.0))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/0034-4257(91)90009-U"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, sla: OperandType, N: OperandType, R: OperandType, slb: OperandType): super().__init__(operands=[eval(self.formula, {}, {"sla": sla, "N": N, "R": R, "slb": slb})])
[docs] self.sla = sla
[docs] self.N = N
[docs] self.R = R
[docs] self.slb = slb
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class AVI(WCPSExpr): """Advanced Vegetation Index"""
[docs] short_name = "AVI"
[docs] long_name = "Advanced Vegetation Index"
[docs] bands = ['N', 'R']
[docs] formula = "(N * (1.0 - R) * (N - R)) ** (1/3)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.465.8749&rep=rep1&type=pdf"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R})])
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class AWEInsh(WCPSExpr): """Automated Water Extraction Index"""
[docs] short_name = "AWEInsh"
[docs] long_name = "Automated Water Extraction Index"
[docs] bands = ['G', 'S1', 'N', 'S2']
[docs] formula = "4.0 * (G - S1) - 0.25 * N + 2.75 * S2"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/j.rse.2013.08.029"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, S1: OperandType, N: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "S1": S1, "N": N, "S2": S2})])
[docs] self.G = G
[docs] self.S1 = S1
[docs] self.N = N
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class AWEIsh(WCPSExpr): """Automated Water Extraction Index with Shadows Elimination"""
[docs] short_name = "AWEIsh"
[docs] long_name = "Automated Water Extraction Index with Shadows Elimination"
[docs] bands = ['B', 'G', 'N', 'S1', 'S2']
[docs] formula = "B + 2.5 * G - 1.5 * (N + S1) - 0.25 * S2"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/j.rse.2013.08.029"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, B: OperandType, G: OperandType, N: OperandType, S1: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"B": B, "G": G, "N": N, "S1": S1, "S2": S2})])
[docs] self.B = B
[docs] self.G = G
[docs] self.N = N
[docs] self.S1 = S1
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class BAI(WCPSExpr): """Burned Area Index"""
[docs] short_name = "BAI"
[docs] long_name = "Burned Area Index"
[docs] bands = ['R', 'N']
[docs] formula = "1.0 / ((0.1 - R) ** 2.0 + (0.06 - N) ** 2.0)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://digital.csic.es/bitstream/10261/6426/1/Martin_Isabel_Serie_Geografica.pdf"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "N": N})])
[docs] self.R = R
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class BAIM(WCPSExpr): """Burned Area Index adapted to MODIS"""
[docs] short_name = "BAIM"
[docs] long_name = "Burned Area Index adapted to MODIS"
[docs] bands = ['N', 'S2']
[docs] formula = "1.0/((0.05 - N) ** 2.0) + ((0.2 - S2) ** 2.0)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/j.foreco.2006.08.248"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S2": S2})])
[docs] self.N = N
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class BAIS2(WCPSExpr): """Burned Area Index for Sentinel 2"""
[docs] short_name = "BAIS2"
[docs] long_name = "Burned Area Index for Sentinel 2"
[docs] bands = ['RE2', 'RE3', 'N2', 'R', 'S2']
[docs] formula = "(1.0 - ((RE2 * RE3 * N2) / R) ** 0.5) * (((S2 - N2)/(S2 + N2) ** 0.5) + 1.0)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.3390/ecrs-2-05177"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE2: OperandType, RE3: OperandType, N2: OperandType, R: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE2": RE2, "RE3": RE3, "N2": N2, "R": R, "S2": S2})])
[docs] self.RE2 = RE2
[docs] self.RE3 = RE3
[docs] self.N2 = N2
[docs] self.R = R
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class BCC(WCPSExpr): """Blue Chromatic Coordinate"""
[docs] short_name = "BCC"
[docs] long_name = "Blue Chromatic Coordinate"
[docs] bands = ['B', 'R', 'G']
[docs] formula = "B / (R + G + B)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/0034-4257(87)90088-5"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, B: OperandType, R: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"B": B, "R": R, "G": G})])
[docs] self.B = B
[docs] self.R = R
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class BI(WCPSExpr): """Bare Soil Index"""
[docs] short_name = "BI"
[docs] long_name = "Bare Soil Index"
[docs] bands = ['S1', 'R', 'N', 'B']
[docs] formula = "((S1 + R) - (N + B))/((S1 + R) + (N + B))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.465.8749&rep=rep1&type=pdf"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S1: OperandType, R: OperandType, N: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "R": R, "N": N, "B": B})])
[docs] self.S1 = S1
[docs] self.R = R
[docs] self.N = N
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class BITM(WCPSExpr): """Landsat TM-based Brightness Index"""
[docs] short_name = "BITM"
[docs] long_name = "Landsat TM-based Brightness Index"
[docs] bands = ['B', 'G', 'R']
[docs] formula = "(((B**2.0)+(G**2.0)+(R**2.0))/3.0)**0.5"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/S0034-4257(98)00030-3"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, B: OperandType, G: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"B": B, "G": G, "R": R})])
[docs] self.B = B
[docs] self.G = G
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class BIXS(WCPSExpr): """SPOT HRV XS-based Brightness Index"""
[docs] short_name = "BIXS"
[docs] long_name = "SPOT HRV XS-based Brightness Index"
[docs] bands = ['G', 'R']
[docs] formula = "(((G**2.0)+(R**2.0))/2.0)**0.5"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/S0034-4257(98)00030-3"
[docs] contributor = "https://github.com/remi-braun"
def __init__(self, G: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "R": R})])
[docs] self.G = G
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class BLFEI(WCPSExpr): """Built-Up Land Features Extraction Index"""
[docs] short_name = "BLFEI"
[docs] long_name = "Built-Up Land Features Extraction Index"
[docs] bands = ['G', 'R', 'S2', 'S1']
[docs] formula = "(((G+R+S2)/3.0)-S1)/(((G+R+S2)/3.0)+S1)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1080/10106049.2018.1497094"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, R: OperandType, S2: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "R": R, "S2": S2, "S1": S1})])
[docs] self.G = G
[docs] self.R = R
[docs] self.S2 = S2
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class BNDVI(WCPSExpr): """Blue Normalized Difference Vegetation Index"""
[docs] short_name = "BNDVI"
[docs] long_name = "Blue Normalized Difference Vegetation Index"
[docs] bands = ['N', 'B']
[docs] formula = "(N - B)/(N + B)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/S1672-6308(07)60027-4"
[docs] contributor = "https://github.com/MATRIX4284"
def __init__(self, N: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "B": B})])
[docs] self.N = N
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class BRBA(WCPSExpr): """Band Ratio for Built-up Area"""
[docs] short_name = "BRBA"
[docs] long_name = "Band Ratio for Built-up Area"
[docs] bands = ['R', 'S1']
[docs] formula = "R/S1"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://www.omicsonline.org/scientific-reports/JGRS-SR136.pdf"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "S1": S1})])
[docs] self.R = R
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class BWDRVI(WCPSExpr): """Blue Wide Dynamic Range Vegetation Index"""
[docs] short_name = "BWDRVI"
[docs] long_name = "Blue Wide Dynamic Range Vegetation Index"
[docs] bands = ['alpha', 'N', 'B']
[docs] formula = "(alpha * N - B) / (alpha * N + B)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.2135/cropsci2007.01.0031"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, alpha: OperandType, N: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"alpha": alpha, "N": N, "B": B})])
[docs] self.alpha = alpha
[docs] self.N = N
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class BaI(WCPSExpr): """Bareness Index"""
[docs] short_name = "BaI"
[docs] long_name = "Bareness Index"
[docs] bands = ['R', 'S1', 'N']
[docs] formula = "R + S1 - N"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1109/IGARSS.2005.1525743"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, S1: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "S1": S1, "N": N})])
[docs] self.R = R
[docs] self.S1 = S1
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class CCI(WCPSExpr): """Chlorophyll Carotenoid Index"""
[docs] short_name = "CCI"
[docs] long_name = "Chlorophyll Carotenoid Index"
[docs] bands = ['G1', 'R']
[docs] formula = "(G1 - R)/(G1 + R)"
[docs] platforms = ['MODIS']
[docs] reference = "https://doi.org/10.1073/pnas.1606162113"
[docs] contributor = "https://github.com/joanvlasschaert"
def __init__(self, G1: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G1": G1, "R": R})])
[docs] self.G1 = G1
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class CIG(WCPSExpr): """Chlorophyll Index Green"""
[docs] short_name = "CIG"
[docs] long_name = "Chlorophyll Index Green"
[docs] bands = ['N', 'G']
[docs] formula = "(N / G) - 1.0"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1078/0176-1617-00887"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "G": G})])
[docs] self.N = N
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class CIRE(WCPSExpr): """Chlorophyll Index Red Edge"""
[docs] short_name = "CIRE"
[docs] long_name = "Chlorophyll Index Red Edge"
[docs] bands = ['N', 'RE1']
[docs] formula = "(N / RE1) - 1"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1078/0176-1617-00887"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, RE1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "RE1": RE1})])
[docs] self.N = N
[docs] self.RE1 = RE1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class CRI550(WCPSExpr): """Carotenoid Reflectance Index using 550 nm"""
[docs] short_name = "CRI550"
[docs] long_name = "Carotenoid Reflectance Index using 550 nm"
[docs] bands = ['B', 'G']
[docs] formula = "(1.0 / B) - (1.0 / G)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1562/0031-8655(2002)0750272ACCIPL2.0.CO2"
[docs] contributor = "https://github.com/eomasters-repos"
def __init__(self, B: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"B": B, "G": G})])
[docs] self.B = B
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class CRI700(WCPSExpr): """Carotenoid Reflectance Index using 700 nm"""
[docs] short_name = "CRI700"
[docs] long_name = "Carotenoid Reflectance Index using 700 nm"
[docs] bands = ['B', 'RE1']
[docs] formula = "(1.0 / B) - (1.0 / RE1)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1562/0031-8655(2002)0750272ACCIPL2.0.CO2"
[docs] contributor = "https://github.com/eomasters-repos"
def __init__(self, B: OperandType, RE1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"B": B, "RE1": RE1})])
[docs] self.B = B
[docs] self.RE1 = RE1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class CSI(WCPSExpr): """Char Soil Index"""
[docs] short_name = "CSI"
[docs] long_name = "Char Soil Index"
[docs] bands = ['N', 'S2']
[docs] formula = "N/S2"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/j.rse.2005.04.014"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S2": S2})])
[docs] self.N = N
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class CSIT(WCPSExpr): """Char Soil Index Thermal"""
[docs] short_name = "CSIT"
[docs] long_name = "Char Soil Index Thermal"
[docs] bands = ['N', 'S2', 'T']
[docs] formula = "N / (S2 * T / 10000.0)"
[docs] platforms = ['Landsat-TM', 'Landsat-ETM+']
[docs] reference = "https://doi.org/10.1080/01431160600954704"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S2: OperandType, T: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S2": S2, "T": T})])
[docs] self.N = N
[docs] self.S2 = S2
[docs] self.T = T
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class CVI(WCPSExpr): """Chlorophyll Vegetation Index"""
[docs] short_name = "CVI"
[docs] long_name = "Chlorophyll Vegetation Index"
[docs] bands = ['N', 'R', 'G']
[docs] formula = "(N * R) / (G ** 2.0)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1007/s11119-010-9204-3"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "G": G})])
[docs] self.N = N
[docs] self.R = R
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class DBI(WCPSExpr): """Dry Built-Up Index"""
[docs] short_name = "DBI"
[docs] long_name = "Dry Built-Up Index"
[docs] bands = ['B', 'T1', 'N', 'R']
[docs] formula = "((B - T1)/(B + T1)) - ((N - R)/(N + R))"
[docs] platforms = ['Landsat-OLI']
[docs] reference = "https://doi.org/10.3390/land7030081"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, B: OperandType, T1: OperandType, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"B": B, "T1": T1, "N": N, "R": R})])
[docs] self.B = B
[docs] self.T1 = T1
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class DBSI(WCPSExpr): """Dry Bareness Index"""
[docs] short_name = "DBSI"
[docs] long_name = "Dry Bareness Index"
[docs] bands = ['S1', 'G', 'N', 'R']
[docs] formula = "((S1 - G)/(S1 + G)) - ((N - R)/(N + R))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.3390/land7030081"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S1: OperandType, G: OperandType, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "G": G, "N": N, "R": R})])
[docs] self.S1 = S1
[docs] self.G = G
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class DPDD(WCPSExpr): """Dual-Pol Diagonal Distance"""
[docs] short_name = "DPDD"
[docs] long_name = "Dual-Pol Diagonal Distance"
[docs] bands = ['VV', 'VH']
[docs] formula = "(VV + VH)/2.0 ** 0.5"
[docs] platforms = ['Sentinel-1 (Dual Polarisation VV-VH)']
[docs] reference = "https://doi.org/10.1016/j.rse.2018.09.003"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, VV: OperandType, VH: OperandType): super().__init__(operands=[eval(self.formula, {}, {"VV": VV, "VH": VH})])
[docs] self.VV = VV
[docs] self.VH = VH
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class DSI(WCPSExpr): """Drought Stress Index"""
[docs] short_name = "DSI"
[docs] long_name = "Drought Stress Index"
[docs] bands = ['S1', 'N']
[docs] formula = "S1/N"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://www.asprs.org/wp-content/uploads/pers/1999journal/apr/1999_apr_495-501.pdf"
[docs] contributor = "https://github.com/remi-braun"
def __init__(self, S1: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "N": N})])
[docs] self.S1 = S1
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class DSWI1(WCPSExpr): """Disease-Water Stress Index 1"""
[docs] short_name = "DSWI1"
[docs] long_name = "Disease-Water Stress Index 1"
[docs] bands = ['N', 'S1']
[docs] formula = "N/S1"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1080/01431160310001618031"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S1": S1})])
[docs] self.N = N
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class DSWI2(WCPSExpr): """Disease-Water Stress Index 2"""
[docs] short_name = "DSWI2"
[docs] long_name = "Disease-Water Stress Index 2"
[docs] bands = ['S1', 'G']
[docs] formula = "S1/G"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1080/01431160310001618031"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S1: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "G": G})])
[docs] self.S1 = S1
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class DSWI3(WCPSExpr): """Disease-Water Stress Index 3"""
[docs] short_name = "DSWI3"
[docs] long_name = "Disease-Water Stress Index 3"
[docs] bands = ['S1', 'R']
[docs] formula = "S1/R"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1080/01431160310001618031"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S1: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "R": R})])
[docs] self.S1 = S1
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class DSWI4(WCPSExpr): """Disease-Water Stress Index 4"""
[docs] short_name = "DSWI4"
[docs] long_name = "Disease-Water Stress Index 4"
[docs] bands = ['G', 'R']
[docs] formula = "G/R"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1080/01431160310001618031"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "R": R})])
[docs] self.G = G
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class DSWI5(WCPSExpr): """Disease-Water Stress Index 5"""
[docs] short_name = "DSWI5"
[docs] long_name = "Disease-Water Stress Index 5"
[docs] bands = ['N', 'G', 'S1', 'R']
[docs] formula = "(N + G)/(S1 + R)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1080/01431160310001618031"
[docs] contributor = "https://github.com/remi-braun"
def __init__(self, N: OperandType, G: OperandType, S1: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "G": G, "S1": S1, "R": R})])
[docs] self.N = N
[docs] self.G = G
[docs] self.S1 = S1
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class DVI(WCPSExpr): """Difference Vegetation Index"""
[docs] short_name = "DVI"
[docs] long_name = "Difference Vegetation Index"
[docs] bands = ['N', 'R']
[docs] formula = "N - R"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/0034-4257(94)00114-3"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R})])
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class DVIplus(WCPSExpr): """Difference Vegetation Index Plus"""
[docs] short_name = "DVIplus"
[docs] long_name = "Difference Vegetation Index Plus"
[docs] bands = ['lambdaN', 'lambdaR', 'lambdaG', 'G', 'N', 'R']
[docs] formula = "((lambdaN - lambdaR)/(lambdaN - lambdaG)) * G + (1.0 - ((lambdaN - lambdaR)/(lambdaN - lambdaG))) * N - R"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.rse.2019.03.028"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, lambdaN: OperandType, lambdaR: OperandType, lambdaG: OperandType, G: OperandType, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"lambdaN": lambdaN, "lambdaR": lambdaR, "lambdaG": lambdaG, "G": G, "N": N, "R": R})])
[docs] self.lambdaN = lambdaN
[docs] self.lambdaR = lambdaR
[docs] self.lambdaG = lambdaG
[docs] self.G = G
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class DpRVIHH(WCPSExpr): """Dual-Polarized Radar Vegetation Index HH"""
[docs] short_name = "DpRVIHH"
[docs] long_name = "Dual-Polarized Radar Vegetation Index HH"
[docs] bands = ['HV', 'HH']
[docs] formula = "(4.0 * HV)/(HH + HV)"
[docs] platforms = ['Sentinel-1 (Dual Polarisation HH-HV)']
[docs] reference = "https://www.tandfonline.com/doi/abs/10.5589/m12-043"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, HV: OperandType, HH: OperandType): super().__init__(operands=[eval(self.formula, {}, {"HV": HV, "HH": HH})])
[docs] self.HV = HV
[docs] self.HH = HH
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class DpRVIVV(WCPSExpr): """Dual-Polarized Radar Vegetation Index VV"""
[docs] short_name = "DpRVIVV"
[docs] long_name = "Dual-Polarized Radar Vegetation Index VV"
[docs] bands = ['VH', 'VV']
[docs] formula = "(4.0 * VH)/(VV + VH)"
[docs] platforms = ['Sentinel-1 (Dual Polarisation VV-VH)']
[docs] reference = "https://doi.org/10.3390/app9040655"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, VH: OperandType, VV: OperandType): super().__init__(operands=[eval(self.formula, {}, {"VH": VH, "VV": VV})])
[docs] self.VH = VH
[docs] self.VV = VV
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class EBBI(WCPSExpr): """Enhanced Built-Up and Bareness Index"""
[docs] short_name = "EBBI"
[docs] long_name = "Enhanced Built-Up and Bareness Index"
[docs] bands = ['S1', 'N', 'T']
[docs] formula = "(S1 - N) / (10.0 * ((S1 + T) ** 0.5))"
[docs] platforms = ['Landsat-TM', 'Landsat-ETM+']
[docs] reference = "https://doi.org/10.3390/rs4102957"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S1: OperandType, N: OperandType, T: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "N": N, "T": T})])
[docs] self.S1 = S1
[docs] self.N = N
[docs] self.T = T
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class EBI(WCPSExpr): """Enhanced Bloom Index"""
[docs] short_name = "EBI"
[docs] long_name = "Enhanced Bloom Index"
[docs] bands = ['R', 'G', 'B', 'epsilon']
[docs] formula = "(R + G + B)/((G/B) * (R - B + epsilon))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.isprsjprs.2019.08.006"
[docs] contributor = "https://github.com/geoSanjeeb"
def __init__(self, R: OperandType, G: OperandType, B: OperandType, epsilon: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "G": G, "B": B, "epsilon": epsilon})])
[docs] self.R = R
[docs] self.G = G
[docs] self.B = B
[docs] self.epsilon = epsilon
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class EMBI(WCPSExpr): """Enhanced Modified Bare Soil Index"""
[docs] short_name = "EMBI"
[docs] long_name = "Enhanced Modified Bare Soil Index"
[docs] bands = ['S1', 'S2', 'N', 'G']
[docs] formula = "((((S1 - S2 - N)/(S1 + S2 + N)) + 0.5) - ((G - S1)/(G + S1)) - 0.5)/((((S1 - S2 - N)/(S1 + S2 + N)) + 0.5) + ((G - S1)/(G + S1)) + 1.5)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/j.jag.2022.102703"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S1: OperandType, S2: OperandType, N: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "S2": S2, "N": N, "G": G})])
[docs] self.S1 = S1
[docs] self.S2 = S2
[docs] self.N = N
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class ENDVI(WCPSExpr): """Enhanced Normalized Difference Vegetation Index"""
[docs] short_name = "ENDVI"
[docs] long_name = "Enhanced Normalized Difference Vegetation Index"
[docs] bands = ['N', 'G', 'B']
[docs] formula = "((N + G) - (2 * B)) / ((N + G) + (2 * B))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1371/journal.pone.0186193"
[docs] contributor = "https://github.com/gagev"
def __init__(self, N: OperandType, G: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "G": G, "B": B})])
[docs] self.N = N
[docs] self.G = G
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class EVI(WCPSExpr): """Enhanced Vegetation Index"""
[docs] short_name = "EVI"
[docs] long_name = "Enhanced Vegetation Index"
[docs] bands = ['g', 'N', 'R', 'C1', 'C2', 'B', 'L']
[docs] formula = "g * (N - R) / (N + C1 * R - C2 * B + L)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/S0034-4257(96)00112-5"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, g: OperandType, N: OperandType, R: OperandType, C1: OperandType, C2: OperandType, B: OperandType, L: OperandType): super().__init__(operands=[eval(self.formula, {}, {"g": g, "N": N, "R": R, "C1": C1, "C2": C2, "B": B, "L": L})])
[docs] self.g = g
[docs] self.N = N
[docs] self.R = R
[docs] self.C1 = C1
[docs] self.C2 = C2
[docs] self.B = B
[docs] self.L = L
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class EVI2(WCPSExpr): """Two-Band Enhanced Vegetation Index"""
[docs] short_name = "EVI2"
[docs] long_name = "Two-Band Enhanced Vegetation Index"
[docs] bands = ['g', 'N', 'R', 'L']
[docs] formula = "g * (N - R) / (N + 2.4 * R + L)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.rse.2008.06.006"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, g: OperandType, N: OperandType, R: OperandType, L: OperandType): super().__init__(operands=[eval(self.formula, {}, {"g": g, "N": N, "R": R, "L": L})])
[docs] self.g = g
[docs] self.N = N
[docs] self.R = R
[docs] self.L = L
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class EVIv(WCPSExpr): """Enhanced Vegetation Index of Vegetation"""
[docs] short_name = "EVIv"
[docs] long_name = "Enhanced Vegetation Index of Vegetation"
[docs] bands = ['N', 'R', 'B']
[docs] formula = "2.5 * ((N - R)/(N + 6 * R - 7.5 * B + 1.0)) * N"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1029/2024JG008240"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "B": B})])
[docs] self.N = N
[docs] self.R = R
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class ExG(WCPSExpr): """Excess Green Index"""
[docs] short_name = "ExG"
[docs] long_name = "Excess Green Index"
[docs] bands = ['G', 'R', 'B']
[docs] formula = "2 * G - R - B"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.13031/2013.27838"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, R: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "R": R, "B": B})])
[docs] self.G = G
[docs] self.R = R
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class ExGR(WCPSExpr): """ExG - ExR Vegetation Index"""
[docs] short_name = "ExGR"
[docs] long_name = "ExG - ExR Vegetation Index"
[docs] bands = ['G', 'R', 'B']
[docs] formula = "(2.0 * G - R - B) - (1.3 * R - G)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.compag.2008.03.009"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, R: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "R": R, "B": B})])
[docs] self.G = G
[docs] self.R = R
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class ExR(WCPSExpr): """Excess Red Index"""
[docs] short_name = "ExR"
[docs] long_name = "Excess Red Index"
[docs] bands = ['R', 'G']
[docs] formula = "1.3 * R - G"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1117/12.336896"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "G": G})])
[docs] self.R = R
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class FAI(WCPSExpr): """Floating Algae Index"""
[docs] short_name = "FAI"
[docs] long_name = "Floating Algae Index"
[docs] bands = ['N', 'R', 'S1', 'lambdaN', 'lambdaR', 'lambdaS1']
[docs] formula = "N - (R + (S1 - R)*((lambdaN - lambdaR)/(lambdaS1 - lambdaR)))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/j.rse.2009.05.012"
[docs] contributor = "https://github.com/emanuelcastanho"
def __init__(self, N: OperandType, R: OperandType, S1: OperandType, lambdaN: OperandType, lambdaR: OperandType, lambdaS1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "S1": S1, "lambdaN": lambdaN, "lambdaR": lambdaR, "lambdaS1": lambdaS1})])
[docs] self.N = N
[docs] self.R = R
[docs] self.S1 = S1
[docs] self.lambdaN = lambdaN
[docs] self.lambdaR = lambdaR
[docs] self.lambdaS1 = lambdaS1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class FCVI(WCPSExpr): """Fluorescence Correction Vegetation Index"""
[docs] short_name = "FCVI"
[docs] long_name = "Fluorescence Correction Vegetation Index"
[docs] bands = ['N', 'R', 'G', 'B']
[docs] formula = "N - ((R + G + B)/3.0)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.rse.2020.111676"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType, G: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "G": G, "B": B})])
[docs] self.N = N
[docs] self.R = R
[docs] self.G = G
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class GARI(WCPSExpr): """Green Atmospherically Resistant Vegetation Index"""
[docs] short_name = "GARI"
[docs] long_name = "Green Atmospherically Resistant Vegetation Index"
[docs] bands = ['N', 'G', 'B', 'R']
[docs] formula = "(N - (G - (B - R))) / (N - (G + (B - R)))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/S0034-4257(96)00072-7"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, G: OperandType, B: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "G": G, "B": B, "R": R})])
[docs] self.N = N
[docs] self.G = G
[docs] self.B = B
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class GBNDVI(WCPSExpr): """Green-Blue Normalized Difference Vegetation Index"""
[docs] short_name = "GBNDVI"
[docs] long_name = "Green-Blue Normalized Difference Vegetation Index"
[docs] bands = ['N', 'G', 'B']
[docs] formula = "(N - (G + B))/(N + (G + B))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/S1672-6308(07)60027-4"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, G: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "G": G, "B": B})])
[docs] self.N = N
[docs] self.G = G
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class GCC(WCPSExpr): """Green Chromatic Coordinate"""
[docs] short_name = "GCC"
[docs] long_name = "Green Chromatic Coordinate"
[docs] bands = ['G', 'R', 'B']
[docs] formula = "G / (R + G + B)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/0034-4257(87)90088-5"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, R: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "R": R, "B": B})])
[docs] self.G = G
[docs] self.R = R
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class GDVI(WCPSExpr): """Generalized Difference Vegetation Index"""
[docs] short_name = "GDVI"
[docs] long_name = "Generalized Difference Vegetation Index"
[docs] bands = ['N', 'nexp', 'R']
[docs] formula = "((N ** nexp) - (R ** nexp)) / ((N ** nexp) + (R ** nexp))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.3390/rs6021211"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, nexp: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "nexp": nexp, "R": R})])
[docs] self.N = N
[docs] self.nexp = nexp
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class GEMI(WCPSExpr): """Global Environment Monitoring Index"""
[docs] short_name = "GEMI"
[docs] long_name = "Global Environment Monitoring Index"
[docs] bands = ['N', 'R']
[docs] formula = "((2.0*((N ** 2.0)-(R ** 2.0)) + 1.5*N + 0.5*R)/(N + R + 0.5))*(1.0 - 0.25*((2.0 * ((N ** 2.0) - (R ** 2)) + 1.5 * N + 0.5 * R)/(N + R + 0.5)))-((R - 0.125)/(1 - R))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "http://dx.doi.org/10.1007/bf00031911"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R})])
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class GLI(WCPSExpr): """Green Leaf Index"""
[docs] short_name = "GLI"
[docs] long_name = "Green Leaf Index"
[docs] bands = ['G', 'R', 'B']
[docs] formula = "(2.0 * G - R - B) / (2.0 * G + R + B)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "http://dx.doi.org/10.1080/10106040108542184"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, R: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "R": R, "B": B})])
[docs] self.G = G
[docs] self.R = R
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class GM1(WCPSExpr): """Gitelson and Merzlyak Index 1"""
[docs] short_name = "GM1"
[docs] long_name = "Gitelson and Merzlyak Index 1"
[docs] bands = ['RE2', 'G']
[docs] formula = "RE2/G"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/S0176-1617(96)80284-7"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE2: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE2": RE2, "G": G})])
[docs] self.RE2 = RE2
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class GM2(WCPSExpr): """Gitelson and Merzlyak Index 2"""
[docs] short_name = "GM2"
[docs] long_name = "Gitelson and Merzlyak Index 2"
[docs] bands = ['RE2', 'RE1']
[docs] formula = "RE2/RE1"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/S0176-1617(96)80284-7"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE2: OperandType, RE1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE2": RE2, "RE1": RE1})])
[docs] self.RE2 = RE2
[docs] self.RE1 = RE1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class GNDVI(WCPSExpr): """Green Normalized Difference Vegetation Index"""
[docs] short_name = "GNDVI"
[docs] long_name = "Green Normalized Difference Vegetation Index"
[docs] bands = ['N', 'G']
[docs] formula = "(N - G)/(N + G)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/S0034-4257(96)00072-7"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "G": G})])
[docs] self.N = N
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class GOSAVI(WCPSExpr): """Green Optimized Soil Adjusted Vegetation Index"""
[docs] short_name = "GOSAVI"
[docs] long_name = "Green Optimized Soil Adjusted Vegetation Index"
[docs] bands = ['N', 'G']
[docs] formula = "(N - G) / (N + G + 0.16)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.2134/agronj2004.0314"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "G": G})])
[docs] self.N = N
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class GRNDVI(WCPSExpr): """Green-Red Normalized Difference Vegetation Index"""
[docs] short_name = "GRNDVI"
[docs] long_name = "Green-Red Normalized Difference Vegetation Index"
[docs] bands = ['N', 'G', 'R']
[docs] formula = "(N - (G + R))/(N + (G + R))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/S1672-6308(07)60027-4"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, G: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "G": G, "R": R})])
[docs] self.N = N
[docs] self.G = G
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class GRVI(WCPSExpr): """Green Ratio Vegetation Index"""
[docs] short_name = "GRVI"
[docs] long_name = "Green Ratio Vegetation Index"
[docs] bands = ['N', 'G']
[docs] formula = "N/G"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.2134/agronj2004.0314"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "G": G})])
[docs] self.N = N
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class GSAVI(WCPSExpr): """Green Soil Adjusted Vegetation Index"""
[docs] short_name = "GSAVI"
[docs] long_name = "Green Soil Adjusted Vegetation Index"
[docs] bands = ['L', 'N', 'G']
[docs] formula = "(1.0 + L) * (N - G) / (N + G + L)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.2134/agronj2004.0314"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, L: OperandType, N: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"L": L, "N": N, "G": G})])
[docs] self.L = L
[docs] self.N = N
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class GVMI(WCPSExpr): """Global Vegetation Moisture Index"""
[docs] short_name = "GVMI"
[docs] long_name = "Global Vegetation Moisture Index"
[docs] bands = ['N', 'S2']
[docs] formula = "((N + 0.1) - (S2 + 0.02)) / ((N + 0.1) + (S2 + 0.02))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/S0034-4257(02)00037-8"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S2": S2})])
[docs] self.N = N
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class IAVI(WCPSExpr): """New Atmospherically Resistant Vegetation Index"""
[docs] short_name = "IAVI"
[docs] long_name = "New Atmospherically Resistant Vegetation Index"
[docs] bands = ['N', 'R', 'gamma', 'B']
[docs] formula = "(N - (R - gamma * (B - R)))/(N + (R - gamma * (B - R)))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://www.jipb.net/EN/abstract/abstract23925.shtml"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType, gamma: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "gamma": gamma, "B": B})])
[docs] self.N = N
[docs] self.R = R
[docs] self.gamma = gamma
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class IBI(WCPSExpr): """Index-Based Built-Up Index"""
[docs] short_name = "IBI"
[docs] long_name = "Index-Based Built-Up Index"
[docs] bands = ['S1', 'N', 'R', 'L', 'G']
[docs] formula = "(((S1-N)/(S1+N))-(((N-R)*(1.0+L)/(N+R+L))+((G-S1)/(G+S1)))/2.0)/(((S1-N)/(S1+N))+(((N-R)*(1.0+L)/(N+R+L))+((G-S1)/(G+S1)))/2.0)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1080/01431160802039957"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S1: OperandType, N: OperandType, R: OperandType, L: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "N": N, "R": R, "L": L, "G": G})])
[docs] self.S1 = S1
[docs] self.N = N
[docs] self.R = R
[docs] self.L = L
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class IKAW(WCPSExpr): """Kawashima Index"""
[docs] short_name = "IKAW"
[docs] long_name = "Kawashima Index"
[docs] bands = ['R', 'B']
[docs] formula = "(R - B)/(R + B)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1006/anbo.1997.0544"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "B": B})])
[docs] self.R = R
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class IPVI(WCPSExpr): """Infrared Percentage Vegetation Index"""
[docs] short_name = "IPVI"
[docs] long_name = "Infrared Percentage Vegetation Index"
[docs] bands = ['N', 'R']
[docs] formula = "N/(N + R)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/0034-4257(90)90085-Z"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R})])
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class IRECI(WCPSExpr): """Inverted Red-Edge Chlorophyll Index"""
[docs] short_name = "IRECI"
[docs] long_name = "Inverted Red-Edge Chlorophyll Index"
[docs] bands = ['RE3', 'R', 'RE1', 'RE2']
[docs] formula = "(RE3 - R) / (RE1 / RE2)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/j.isprsjprs.2013.04.007"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE3: OperandType, R: OperandType, RE1: OperandType, RE2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE3": RE3, "R": R, "RE1": RE1, "RE2": RE2})])
[docs] self.RE3 = RE3
[docs] self.R = R
[docs] self.RE1 = RE1
[docs] self.RE2 = RE2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class LSWI(WCPSExpr): """Land Surface Water Index"""
[docs] short_name = "LSWI"
[docs] long_name = "Land Surface Water Index"
[docs] bands = ['N', 'S1']
[docs] formula = "(N - S1)/(N + S1)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/j.rse.2003.11.008"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S1": S1})])
[docs] self.N = N
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MBI(WCPSExpr): """Modified Bare Soil Index"""
[docs] short_name = "MBI"
[docs] long_name = "Modified Bare Soil Index"
[docs] bands = ['S1', 'S2', 'N']
[docs] formula = "((S1 - S2 - N)/(S1 + S2 + N)) + 0.5"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.3390/land10030231"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S1: OperandType, S2: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "S2": S2, "N": N})])
[docs] self.S1 = S1
[docs] self.S2 = S2
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MBWI(WCPSExpr): """Multi-Band Water Index"""
[docs] short_name = "MBWI"
[docs] long_name = "Multi-Band Water Index"
[docs] bands = ['omega', 'G', 'R', 'N', 'S1', 'S2']
[docs] formula = "(omega * G) - R - N - S1 - S2"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/j.jag.2018.01.018"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, omega: OperandType, G: OperandType, R: OperandType, N: OperandType, S1: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"omega": omega, "G": G, "R": R, "N": N, "S1": S1, "S2": S2})])
[docs] self.omega = omega
[docs] self.G = G
[docs] self.R = R
[docs] self.N = N
[docs] self.S1 = S1
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MCARI(WCPSExpr): """Modified Chlorophyll Absorption in Reflectance Index"""
[docs] short_name = "MCARI"
[docs] long_name = "Modified Chlorophyll Absorption in Reflectance Index"
[docs] bands = ['RE1', 'R', 'G']
[docs] formula = "((RE1 - R) - 0.2 * (RE1 - G)) * (RE1 / R)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "http://dx.doi.org/10.1016/S0034-4257(00)00113-9"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE1: OperandType, R: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE1": RE1, "R": R, "G": G})])
[docs] self.RE1 = RE1
[docs] self.R = R
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MCARI1(WCPSExpr): """Modified Chlorophyll Absorption in Reflectance Index 1"""
[docs] short_name = "MCARI1"
[docs] long_name = "Modified Chlorophyll Absorption in Reflectance Index 1"
[docs] bands = ['N', 'R', 'G']
[docs] formula = "1.2 * (2.5 * (N - R) - 1.3 * (N - G))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.rse.2003.12.013"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "G": G})])
[docs] self.N = N
[docs] self.R = R
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MCARI2(WCPSExpr): """Modified Chlorophyll Absorption in Reflectance Index 2"""
[docs] short_name = "MCARI2"
[docs] long_name = "Modified Chlorophyll Absorption in Reflectance Index 2"
[docs] bands = ['N', 'R', 'G']
[docs] formula = "(1.5 * (2.5 * (N - R) - 1.3 * (N - G))) / ((((2.0 * N + 1) ** 2) - (6.0 * N - 5 * (R ** 0.5)) - 0.5) ** 0.5)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.rse.2003.12.013"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "G": G})])
[docs] self.N = N
[docs] self.R = R
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MCARI705(WCPSExpr): """Modified Chlorophyll Absorption in Reflectance Index (705 and 750 nm)"""
[docs] short_name = "MCARI705"
[docs] long_name = "Modified Chlorophyll Absorption in Reflectance Index (705 and 750 nm)"
[docs] bands = ['RE2', 'RE1', 'G']
[docs] formula = "((RE2 - RE1) - 0.2 * (RE2 - G)) * (RE2 / RE1)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/j.agrformet.2008.03.005"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE2: OperandType, RE1: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE2": RE2, "RE1": RE1, "G": G})])
[docs] self.RE2 = RE2
[docs] self.RE1 = RE1
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MCARIOSAVI(WCPSExpr): """MCARI/OSAVI Ratio"""
[docs] short_name = "MCARIOSAVI"
[docs] long_name = "MCARI/OSAVI Ratio"
[docs] bands = ['RE1', 'R', 'G', 'N']
[docs] formula = "(((RE1 - R) - 0.2 * (RE1 - G)) * (RE1 / R)) / (1.16 * (N - R) / (N + R + 0.16))"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/S0034-4257(00)00113-9"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE1: OperandType, R: OperandType, G: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE1": RE1, "R": R, "G": G, "N": N})])
[docs] self.RE1 = RE1
[docs] self.R = R
[docs] self.G = G
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MCARIOSAVI705(WCPSExpr): """MCARI/OSAVI Ratio (705 and 750 nm)"""
[docs] short_name = "MCARIOSAVI705"
[docs] long_name = "MCARI/OSAVI Ratio (705 and 750 nm)"
[docs] bands = ['RE2', 'RE1', 'G']
[docs] formula = "(((RE2 - RE1) - 0.2 * (RE2 - G)) * (RE2 / RE1)) / (1.16 * (RE2 - RE1) / (RE2 + RE1 + 0.16))"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/j.agrformet.2008.03.005"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE2: OperandType, RE1: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE2": RE2, "RE1": RE1, "G": G})])
[docs] self.RE2 = RE2
[docs] self.RE1 = RE1
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MGRVI(WCPSExpr): """Modified Green Red Vegetation Index"""
[docs] short_name = "MGRVI"
[docs] long_name = "Modified Green Red Vegetation Index"
[docs] bands = ['G', 'R']
[docs] formula = "(G ** 2.0 - R ** 2.0) / (G ** 2.0 + R ** 2.0)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.jag.2015.02.012"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "R": R})])
[docs] self.G = G
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MIRBI(WCPSExpr): """Mid-Infrared Burn Index"""
[docs] short_name = "MIRBI"
[docs] long_name = "Mid-Infrared Burn Index"
[docs] bands = ['S2', 'S1']
[docs] formula = "10.0 * S2 - 9.8 * S1 + 2.0"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1080/01431160110053185"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S2: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S2": S2, "S1": S1})])
[docs] self.S2 = S2
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MLSWI26(WCPSExpr): """Modified Land Surface Water Index (MODIS Bands 2 and 6)"""
[docs] short_name = "MLSWI26"
[docs] long_name = "Modified Land Surface Water Index (MODIS Bands 2 and 6)"
[docs] bands = ['N', 'S1']
[docs] formula = "(1.0 - N - S1)/(1.0 - N + S1)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.3390/rs71215805"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S1": S1})])
[docs] self.N = N
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MLSWI27(WCPSExpr): """Modified Land Surface Water Index (MODIS Bands 2 and 7)"""
[docs] short_name = "MLSWI27"
[docs] long_name = "Modified Land Surface Water Index (MODIS Bands 2 and 7)"
[docs] bands = ['N', 'S2']
[docs] formula = "(1.0 - N - S2)/(1.0 - N + S2)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.3390/rs71215805"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S2": S2})])
[docs] self.N = N
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MNDVI(WCPSExpr): """Modified Normalized Difference Vegetation Index"""
[docs] short_name = "MNDVI"
[docs] long_name = "Modified Normalized Difference Vegetation Index"
[docs] bands = ['N', 'S2']
[docs] formula = "(N - S2)/(N + S2)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1080/014311697216810"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S2": S2})])
[docs] self.N = N
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MNDWI(WCPSExpr): """Modified Normalized Difference Water Index"""
[docs] short_name = "MNDWI"
[docs] long_name = "Modified Normalized Difference Water Index"
[docs] bands = ['G', 'S1']
[docs] formula = "(G - S1) / (G + S1)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1080/01431160600589179"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "S1": S1})])
[docs] self.G = G
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MNLI(WCPSExpr): """Modified Non-Linear Vegetation Index"""
[docs] short_name = "MNLI"
[docs] long_name = "Modified Non-Linear Vegetation Index"
[docs] bands = ['L', 'N', 'R']
[docs] formula = "(1 + L)*((N ** 2) - R)/((N ** 2) + R + L)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1109/TGRS.2003.812910"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, L: OperandType, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"L": L, "N": N, "R": R})])
[docs] self.L = L
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MRBVI(WCPSExpr): """Modified Red Blue Vegetation Index"""
[docs] short_name = "MRBVI"
[docs] long_name = "Modified Red Blue Vegetation Index"
[docs] bands = ['R', 'B']
[docs] formula = "(R ** 2.0 - B ** 2.0)/(R ** 2.0 + B ** 2.0)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.3390/s20185055"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "B": B})])
[docs] self.R = R
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MSAVI(WCPSExpr): """Modified Soil-Adjusted Vegetation Index"""
[docs] short_name = "MSAVI"
[docs] long_name = "Modified Soil-Adjusted Vegetation Index"
[docs] bands = ['N', 'R']
[docs] formula = "0.5 * (2.0 * N + 1 - (((2 * N + 1) ** 2) - 8 * (N - R)) ** 0.5)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/0034-4257(94)90134-1"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R})])
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MSI(WCPSExpr): """Moisture Stress Index"""
[docs] short_name = "MSI"
[docs] long_name = "Moisture Stress Index"
[docs] bands = ['S1', 'N']
[docs] formula = "S1/N"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/0034-4257(89)90046-1"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S1: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "N": N})])
[docs] self.S1 = S1
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MSR(WCPSExpr): """Modified Simple Ratio"""
[docs] short_name = "MSR"
[docs] long_name = "Modified Simple Ratio"
[docs] bands = ['N', 'R']
[docs] formula = "(N / R - 1) / ((N / R + 1) ** 0.5)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1080/07038992.1996.10855178"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R})])
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MSR705(WCPSExpr): """Modified Simple Ratio (705 and 750 nm)"""
[docs] short_name = "MSR705"
[docs] long_name = "Modified Simple Ratio (705 and 750 nm)"
[docs] bands = ['RE2', 'RE1']
[docs] formula = "(RE2 / RE1 - 1) / ((RE2 / RE1 + 1) ** 0.5)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/j.agrformet.2008.03.005"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE2: OperandType, RE1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE2": RE2, "RE1": RE1})])
[docs] self.RE2 = RE2
[docs] self.RE1 = RE1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MTCI(WCPSExpr): """MERIS Terrestrial Chlorophyll Index"""
[docs] short_name = "MTCI"
[docs] long_name = "MERIS Terrestrial Chlorophyll Index"
[docs] bands = ['RE2', 'RE1', 'R']
[docs] formula = "(RE2 - RE1) / (RE1 - R)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1080/0143116042000274015"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE2: OperandType, RE1: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE2": RE2, "RE1": RE1, "R": R})])
[docs] self.RE2 = RE2
[docs] self.RE1 = RE1
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MTVI1(WCPSExpr): """Modified Triangular Vegetation Index 1"""
[docs] short_name = "MTVI1"
[docs] long_name = "Modified Triangular Vegetation Index 1"
[docs] bands = ['N', 'G', 'R']
[docs] formula = "1.2 * (1.2 * (N - G) - 2.5 * (R - G))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.rse.2003.12.013"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, G: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "G": G, "R": R})])
[docs] self.N = N
[docs] self.G = G
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MTVI2(WCPSExpr): """Modified Triangular Vegetation Index 2"""
[docs] short_name = "MTVI2"
[docs] long_name = "Modified Triangular Vegetation Index 2"
[docs] bands = ['N', 'G', 'R']
[docs] formula = "(1.5 * (1.2 * (N - G) - 2.5 * (R - G))) / ((((2.0 * N + 1) ** 2) - (6.0 * N - 5 * (R ** 0.5)) - 0.5) ** 0.5)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.rse.2003.12.013"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, G: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "G": G, "R": R})])
[docs] self.N = N
[docs] self.G = G
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class MuWIR(WCPSExpr): """Revised Multi-Spectral Water Index"""
[docs] short_name = "MuWIR"
[docs] long_name = "Revised Multi-Spectral Water Index"
[docs] bands = ['B', 'G', 'N', 'S2', 'S1']
[docs] formula = "-4.0 * ((B - G)/(B + G)) + 2.0 * ((G - N)/(G + N)) + 2.0 * ((G - S2)/(G + S2)) - ((G - S1)/(G + S1))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.3390/rs10101643"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, B: OperandType, G: OperandType, N: OperandType, S2: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"B": B, "G": G, "N": N, "S2": S2, "S1": S1})])
[docs] self.B = B
[docs] self.G = G
[docs] self.N = N
[docs] self.S2 = S2
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NBAI(WCPSExpr): """Normalized Built-up Area Index"""
[docs] short_name = "NBAI"
[docs] long_name = "Normalized Built-up Area Index"
[docs] bands = ['S2', 'S1', 'G']
[docs] formula = "(S2 - S1/G)/(S2 + S1/G)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://www.omicsonline.org/scientific-reports/JGRS-SR136.pdf"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S2: OperandType, S1: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S2": S2, "S1": S1, "G": G})])
[docs] self.S2 = S2
[docs] self.S1 = S1
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NBLI(WCPSExpr): """Normalized Difference Bare Land Index"""
[docs] short_name = "NBLI"
[docs] long_name = "Normalized Difference Bare Land Index"
[docs] bands = ['R', 'T']
[docs] formula = "(R - T)/(R + T)"
[docs] platforms = ['Landsat-TM', 'Landsat-ETM+']
[docs] reference = "https://doi.org/10.3390/rs9030249"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, T: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "T": T})])
[docs] self.R = R
[docs] self.T = T
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NBLIOLI(WCPSExpr): """Normalized Difference Bare Land Index for Landsat-OLI"""
[docs] short_name = "NBLIOLI"
[docs] long_name = "Normalized Difference Bare Land Index for Landsat-OLI"
[docs] bands = ['R', 'T1']
[docs] formula = "(R - T1)/(R + T1)"
[docs] platforms = ['Landsat-OLI']
[docs] reference = "https://doi.org/10.3390/rs9030249"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, T1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "T1": T1})])
[docs] self.R = R
[docs] self.T1 = T1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NBR(WCPSExpr): """Normalized Burn Ratio"""
[docs] short_name = "NBR"
[docs] long_name = "Normalized Burn Ratio"
[docs] bands = ['N', 'S2']
[docs] formula = "(N - S2) / (N + S2)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.3133/ofr0211"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S2": S2})])
[docs] self.N = N
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NBR2(WCPSExpr): """Normalized Burn Ratio 2"""
[docs] short_name = "NBR2"
[docs] long_name = "Normalized Burn Ratio 2"
[docs] bands = ['S1', 'S2']
[docs] formula = "(S1 - S2) / (S1 + S2)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://www.usgs.gov/core-science-systems/nli/landsat/landsat-normalized-burn-ratio-2"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S1: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "S2": S2})])
[docs] self.S1 = S1
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NBRSWIR(WCPSExpr): """Normalized Burn Ratio SWIR"""
[docs] short_name = "NBRSWIR"
[docs] long_name = "Normalized Burn Ratio SWIR"
[docs] bands = ['S2', 'S1']
[docs] formula = "(S2 - S1 - 0.02)/(S2 + S1 + 0.1)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1080/22797254.2020.1738900"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S2: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S2": S2, "S1": S1})])
[docs] self.S2 = S2
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NBRT1(WCPSExpr): """Normalized Burn Ratio Thermal 1"""
[docs] short_name = "NBRT1"
[docs] long_name = "Normalized Burn Ratio Thermal 1"
[docs] bands = ['N', 'S2', 'T']
[docs] formula = "(N - (S2 * T / 10000.0)) / (N + (S2 * T / 10000.0))"
[docs] platforms = ['Landsat-TM', 'Landsat-ETM+']
[docs] reference = "https://doi.org/10.1080/01431160500239008"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S2: OperandType, T: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S2": S2, "T": T})])
[docs] self.N = N
[docs] self.S2 = S2
[docs] self.T = T
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NBRT2(WCPSExpr): """Normalized Burn Ratio Thermal 2"""
[docs] short_name = "NBRT2"
[docs] long_name = "Normalized Burn Ratio Thermal 2"
[docs] bands = ['N', 'T', 'S2']
[docs] formula = "((N / (T / 10000.0)) - S2) / ((N / (T / 10000.0)) + S2)"
[docs] platforms = ['Landsat-TM', 'Landsat-ETM+']
[docs] reference = "https://doi.org/10.1080/01431160500239008"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, T: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "T": T, "S2": S2})])
[docs] self.N = N
[docs] self.T = T
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NBRT3(WCPSExpr): """Normalized Burn Ratio Thermal 3"""
[docs] short_name = "NBRT3"
[docs] long_name = "Normalized Burn Ratio Thermal 3"
[docs] bands = ['N', 'T', 'S2']
[docs] formula = "((N - (T / 10000.0)) - S2) / ((N - (T / 10000.0)) + S2)"
[docs] platforms = ['Landsat-TM', 'Landsat-ETM+']
[docs] reference = "https://doi.org/10.1080/01431160500239008"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, T: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "T": T, "S2": S2})])
[docs] self.N = N
[docs] self.T = T
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NBRplus(WCPSExpr): """Normalized Burn Ratio Plus"""
[docs] short_name = "NBRplus"
[docs] long_name = "Normalized Burn Ratio Plus"
[docs] bands = ['S2', 'N2', 'G', 'B']
[docs] formula = "(S2 - N2 - G - B)/(S2 + N2 + G + B)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.3390/rs14071727"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S2: OperandType, N2: OperandType, G: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S2": S2, "N2": N2, "G": G, "B": B})])
[docs] self.S2 = S2
[docs] self.N2 = N2
[docs] self.G = G
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NBSIMS(WCPSExpr): """Non-Binary Snow Index for Multi-Component Surfaces"""
[docs] short_name = "NBSIMS"
[docs] long_name = "Non-Binary Snow Index for Multi-Component Surfaces"
[docs] bands = ['G', 'R', 'N', 'B', 'S2', 'S1']
[docs] formula = "0.36 * (G + R + N) - (((B + S2)/G) + S1)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.3390/rs13142777"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, R: OperandType, N: OperandType, B: OperandType, S2: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "R": R, "N": N, "B": B, "S2": S2, "S1": S1})])
[docs] self.G = G
[docs] self.R = R
[docs] self.N = N
[docs] self.B = B
[docs] self.S2 = S2
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NBUI(WCPSExpr): """New Built-Up Index"""
[docs] short_name = "NBUI"
[docs] long_name = "New Built-Up Index"
[docs] bands = ['S1', 'N', 'T', 'R', 'L', 'G']
[docs] formula = "((S1 - N)/(10.0 * (T + S1) ** 0.5)) - (((N - R) * (1.0 + L))/(N - R + L)) - (G - S1)/(G + S1)"
[docs] platforms = ['Landsat-TM', 'Landsat-ETM+']
[docs] reference = "https://hdl.handle.net/1959.11/29500"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S1: OperandType, N: OperandType, T: OperandType, R: OperandType, L: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "N": N, "T": T, "R": R, "L": L, "G": G})])
[docs] self.S1 = S1
[docs] self.N = N
[docs] self.T = T
[docs] self.R = R
[docs] self.L = L
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class ND705(WCPSExpr): """Normalized Difference (705 and 750 nm)"""
[docs] short_name = "ND705"
[docs] long_name = "Normalized Difference (705 and 750 nm)"
[docs] bands = ['RE2', 'RE1']
[docs] formula = "(RE2 - RE1)/(RE2 + RE1)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/S0034-4257(02)00010-X"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE2: OperandType, RE1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE2": RE2, "RE1": RE1})])
[docs] self.RE2 = RE2
[docs] self.RE1 = RE1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDBI(WCPSExpr): """Normalized Difference Built-Up Index"""
[docs] short_name = "NDBI"
[docs] long_name = "Normalized Difference Built-Up Index"
[docs] bands = ['S1', 'N']
[docs] formula = "(S1 - N) / (S1 + N)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "http://dx.doi.org/10.1080/01431160304987"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S1: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "N": N})])
[docs] self.S1 = S1
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDBaI(WCPSExpr): """Normalized Difference Bareness Index"""
[docs] short_name = "NDBaI"
[docs] long_name = "Normalized Difference Bareness Index"
[docs] bands = ['S1', 'T']
[docs] formula = "(S1 - T) / (S1 + T)"
[docs] platforms = ['Landsat-TM', 'Landsat-ETM+']
[docs] reference = "https://doi.org/10.1109/IGARSS.2005.1526319"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S1: OperandType, T: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "T": T})])
[docs] self.S1 = S1
[docs] self.T = T
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDCI(WCPSExpr): """Normalized Difference Chlorophyll Index"""
[docs] short_name = "NDCI"
[docs] long_name = "Normalized Difference Chlorophyll Index"
[docs] bands = ['RE1', 'R']
[docs] formula = "(RE1 - R)/(RE1 + R)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/j.rse.2011.10.016"
[docs] contributor = "https://github.com/kalab-oto"
def __init__(self, RE1: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE1": RE1, "R": R})])
[docs] self.RE1 = RE1
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDDI(WCPSExpr): """Normalized Difference Drought Index"""
[docs] short_name = "NDDI"
[docs] long_name = "Normalized Difference Drought Index"
[docs] bands = ['N', 'R', 'G']
[docs] formula = "(((N - R)/(N + R)) - ((G - N)/(G + N)))/(((N - R)/(N + R)) + ((G - N)/(G + N)))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1029/2006GL029127"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "G": G})])
[docs] self.N = N
[docs] self.R = R
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDGI(WCPSExpr): """Normalized Difference Greenness Index"""
[docs] short_name = "NDGI"
[docs] long_name = "Normalized Difference Greenness Index"
[docs] bands = ['lambdaN', 'lambdaR', 'lambdaG', 'G', 'N', 'R']
[docs] formula = "(((lambdaN - lambdaR)/(lambdaN - lambdaG)) * G + (1.0 - ((lambdaN - lambdaR)/(lambdaN - lambdaG))) * N - R)/(((lambdaN - lambdaR)/(lambdaN - lambdaG)) * G + (1.0 - ((lambdaN - lambdaR)/(lambdaN - lambdaG))) * N + R)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.rse.2019.03.028"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, lambdaN: OperandType, lambdaR: OperandType, lambdaG: OperandType, G: OperandType, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"lambdaN": lambdaN, "lambdaR": lambdaR, "lambdaG": lambdaG, "G": G, "N": N, "R": R})])
[docs] self.lambdaN = lambdaN
[docs] self.lambdaR = lambdaR
[docs] self.lambdaG = lambdaG
[docs] self.G = G
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDGlaI(WCPSExpr): """Normalized Difference Glacier Index"""
[docs] short_name = "NDGlaI"
[docs] long_name = "Normalized Difference Glacier Index"
[docs] bands = ['G', 'R']
[docs] formula = "(G - R)/(G + R)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1080/01431160802385459"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "R": R})])
[docs] self.G = G
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDII(WCPSExpr): """Normalized Difference Infrared Index"""
[docs] short_name = "NDII"
[docs] long_name = "Normalized Difference Infrared Index"
[docs] bands = ['N', 'S1']
[docs] formula = "(N - S1)/(N + S1)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://www.asprs.org/wp-content/uploads/pers/1983journal/jan/1983_jan_77-83.pdf"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S1": S1})])
[docs] self.N = N
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDISIb(WCPSExpr): """Normalized Difference Impervious Surface Index Blue"""
[docs] short_name = "NDISIb"
[docs] long_name = "Normalized Difference Impervious Surface Index Blue"
[docs] bands = ['T', 'B', 'N', 'S1']
[docs] formula = "(T - (B + N + S1) / 3.0)/(T + (B + N + S1) / 3.0)"
[docs] platforms = ['Landsat-TM', 'Landsat-ETM+']
[docs] reference = "https://doi.org/10.14358/PERS.76.5.557"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, T: OperandType, B: OperandType, N: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"T": T, "B": B, "N": N, "S1": S1})])
[docs] self.T = T
[docs] self.B = B
[docs] self.N = N
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDISIg(WCPSExpr): """Normalized Difference Impervious Surface Index Green"""
[docs] short_name = "NDISIg"
[docs] long_name = "Normalized Difference Impervious Surface Index Green"
[docs] bands = ['T', 'G', 'N', 'S1']
[docs] formula = "(T - (G + N + S1) / 3.0)/(T + (G + N + S1) / 3.0)"
[docs] platforms = ['Landsat-TM', 'Landsat-ETM+']
[docs] reference = "https://doi.org/10.14358/PERS.76.5.557"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, T: OperandType, G: OperandType, N: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"T": T, "G": G, "N": N, "S1": S1})])
[docs] self.T = T
[docs] self.G = G
[docs] self.N = N
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDISImndwi(WCPSExpr): """Normalized Difference Impervious Surface Index with MNDWI"""
[docs] short_name = "NDISImndwi"
[docs] long_name = "Normalized Difference Impervious Surface Index with MNDWI"
[docs] bands = ['T', 'G', 'S1', 'N']
[docs] formula = "(T - (((G - S1)/(G + S1)) + N + S1) / 3.0)/(T + (((G - S1)/(G + S1)) + N + S1) / 3.0)"
[docs] platforms = ['Landsat-TM', 'Landsat-ETM+']
[docs] reference = "https://doi.org/10.14358/PERS.76.5.557"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, T: OperandType, G: OperandType, S1: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"T": T, "G": G, "S1": S1, "N": N})])
[docs] self.T = T
[docs] self.G = G
[docs] self.S1 = S1
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDISIndwi(WCPSExpr): """Normalized Difference Impervious Surface Index with NDWI"""
[docs] short_name = "NDISIndwi"
[docs] long_name = "Normalized Difference Impervious Surface Index with NDWI"
[docs] bands = ['T', 'G', 'N', 'S1']
[docs] formula = "(T - (((G - N)/(G + N)) + N + S1) / 3.0)/(T + (((G - N)/(G + N)) + N + S1) / 3.0)"
[docs] platforms = ['Landsat-TM', 'Landsat-ETM+']
[docs] reference = "https://doi.org/10.14358/PERS.76.5.557"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, T: OperandType, G: OperandType, N: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"T": T, "G": G, "N": N, "S1": S1})])
[docs] self.T = T
[docs] self.G = G
[docs] self.N = N
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDISIr(WCPSExpr): """Normalized Difference Impervious Surface Index Red"""
[docs] short_name = "NDISIr"
[docs] long_name = "Normalized Difference Impervious Surface Index Red"
[docs] bands = ['T', 'R', 'N', 'S1']
[docs] formula = "(T - (R + N + S1) / 3.0)/(T + (R + N + S1) / 3.0)"
[docs] platforms = ['Landsat-TM', 'Landsat-ETM+']
[docs] reference = "https://doi.org/10.14358/PERS.76.5.557"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, T: OperandType, R: OperandType, N: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"T": T, "R": R, "N": N, "S1": S1})])
[docs] self.T = T
[docs] self.R = R
[docs] self.N = N
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDMI(WCPSExpr): """Normalized Difference Moisture Index"""
[docs] short_name = "NDMI"
[docs] long_name = "Normalized Difference Moisture Index"
[docs] bands = ['N', 'S1']
[docs] formula = "(N - S1)/(N + S1)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/S0034-4257(01)00318-2"
[docs] contributor = "https://github.com/bpurinton"
def __init__(self, N: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S1": S1})])
[docs] self.N = N
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDPI(WCPSExpr): """Normalized Difference Phenology Index"""
[docs] short_name = "NDPI"
[docs] long_name = "Normalized Difference Phenology Index"
[docs] bands = ['N', 'alpha', 'R', 'S1']
[docs] formula = "(N - (alpha * R + (1.0 - alpha) * S1))/(N + (alpha * R + (1.0 - alpha) * S1))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/j.rse.2017.04.031"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, alpha: OperandType, R: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "alpha": alpha, "R": R, "S1": S1})])
[docs] self.N = N
[docs] self.alpha = alpha
[docs] self.R = R
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDPolI(WCPSExpr): """Normalized Difference Polarization Index"""
[docs] short_name = "NDPolI"
[docs] long_name = "Normalized Difference Polarization Index"
[docs] bands = ['VV', 'VH']
[docs] formula = "(VV - VH)/(VV + VH)"
[docs] platforms = ['Sentinel-1 (Dual Polarisation VV-VH)']
[docs] reference = "https://www.isprs.org/proceedings/XXXVII/congress/4_pdf/267.pdf"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, VV: OperandType, VH: OperandType): super().__init__(operands=[eval(self.formula, {}, {"VV": VV, "VH": VH})])
[docs] self.VV = VV
[docs] self.VH = VH
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDPonI(WCPSExpr): """Normalized Difference Pond Index"""
[docs] short_name = "NDPonI"
[docs] long_name = "Normalized Difference Pond Index"
[docs] bands = ['S1', 'G']
[docs] formula = "(S1-G)/(S1+G)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/j.rse.2006.07.012"
[docs] contributor = "https://github.com/CvenGeo"
def __init__(self, S1: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "G": G})])
[docs] self.S1 = S1
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDREI(WCPSExpr): """Normalized Difference Red Edge Index"""
[docs] short_name = "NDREI"
[docs] long_name = "Normalized Difference Red Edge Index"
[docs] bands = ['N', 'RE1']
[docs] formula = "(N - RE1) / (N + RE1)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/1011-1344(93)06963-4"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, RE1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "RE1": RE1})])
[docs] self.N = N
[docs] self.RE1 = RE1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDSI(WCPSExpr): """Normalized Difference Snow Index"""
[docs] short_name = "NDSI"
[docs] long_name = "Normalized Difference Snow Index"
[docs] bands = ['G', 'S1']
[docs] formula = "(G - S1) / (G + S1)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1109/IGARSS.1994.399618"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "S1": S1})])
[docs] self.G = G
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDSII(WCPSExpr): """Normalized Difference Snow Ice Index"""
[docs] short_name = "NDSII"
[docs] long_name = "Normalized Difference Snow Ice Index"
[docs] bands = ['G', 'N']
[docs] formula = "(G - N)/(G + N)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1080/01431160802385459"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "N": N})])
[docs] self.G = G
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDSIWV(WCPSExpr): """WorldView Normalized Difference Soil Index"""
[docs] short_name = "NDSIWV"
[docs] long_name = "WorldView Normalized Difference Soil Index"
[docs] bands = ['G', 'Y']
[docs] formula = "(G - Y)/(G + Y)"
[docs] platforms = []
[docs] reference = "https://www.semanticscholar.org/paper/Using-WorldView-2-Vis-NIR-MSI-Imagery-to-Support-Wolf/5e5063ccc4ee76b56b721c866e871d47a77f9fb4"
[docs] contributor = "https://github.com/remi-braun"
def __init__(self, G: OperandType, Y: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "Y": Y})])
[docs] self.G = G
[docs] self.Y = Y
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDSInw(WCPSExpr): """Normalized Difference Snow Index with no Water"""
[docs] short_name = "NDSInw"
[docs] long_name = "Normalized Difference Snow Index with no Water"
[docs] bands = ['N', 'S1', 'beta']
[docs] formula = "(N - S1 - beta)/(N + S1)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.3390/w12051339"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S1: OperandType, beta: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S1": S1, "beta": beta})])
[docs] self.N = N
[docs] self.S1 = S1
[docs] self.beta = beta
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDSWIR(WCPSExpr): """Normalized Difference SWIR"""
[docs] short_name = "NDSWIR"
[docs] long_name = "Normalized Difference SWIR"
[docs] bands = ['N', 'S1']
[docs] formula = "(N - S1)/(N + S1)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1109/TGRS.2003.819190"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S1": S1})])
[docs] self.N = N
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDSaII(WCPSExpr): """Normalized Difference Snow and Ice Index"""
[docs] short_name = "NDSaII"
[docs] long_name = "Normalized Difference Snow and Ice Index"
[docs] bands = ['R', 'S1']
[docs] formula = "(R - S1) / (R + S1)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1080/01431160119766"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "S1": S1})])
[docs] self.R = R
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDSoI(WCPSExpr): """Normalized Difference Soil Index"""
[docs] short_name = "NDSoI"
[docs] long_name = "Normalized Difference Soil Index"
[docs] bands = ['S2', 'G']
[docs] formula = "(S2 - G)/(S2 + G)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/j.jag.2015.02.010"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S2: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S2": S2, "G": G})])
[docs] self.S2 = S2
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDTI(WCPSExpr): """Normalized Difference Turbidity Index"""
[docs] short_name = "NDTI"
[docs] long_name = "Normalized Difference Turbidity Index"
[docs] bands = ['R', 'G']
[docs] formula = "(R-G)/(R+G)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.rse.2006.07.012"
[docs] contributor = "https://github.com/CvenGeo"
def __init__(self, R: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "G": G})])
[docs] self.R = R
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDVI(WCPSExpr): """Normalized Difference Vegetation Index"""
[docs] short_name = "NDVI"
[docs] long_name = "Normalized Difference Vegetation Index"
[docs] bands = ['N', 'R']
[docs] formula = "(N - R)/(N + R)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://ntrs.nasa.gov/citations/19740022614"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R})])
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDVI705(WCPSExpr): """Normalized Difference Vegetation Index (705 and 750 nm)"""
[docs] short_name = "NDVI705"
[docs] long_name = "Normalized Difference Vegetation Index (705 and 750 nm)"
[docs] bands = ['RE2', 'RE1']
[docs] formula = "(RE2 - RE1) / (RE2 + RE1)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/S0176-1617(11)81633-0"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE2: OperandType, RE1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE2": RE2, "RE1": RE1})])
[docs] self.RE2 = RE2
[docs] self.RE1 = RE1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDVIMNDWI(WCPSExpr): """NDVI-MNDWI Model"""
[docs] short_name = "NDVIMNDWI"
[docs] long_name = "NDVI-MNDWI Model"
[docs] bands = ['N', 'R', 'G', 'S1']
[docs] formula = "((N - R)/(N + R)) - ((G - S1)/(G + S1))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1007/978-3-662-45737-5_51"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType, G: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "G": G, "S1": S1})])
[docs] self.N = N
[docs] self.R = R
[docs] self.G = G
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDVIT(WCPSExpr): """Normalized Difference Vegetation Index Thermal"""
[docs] short_name = "NDVIT"
[docs] long_name = "Normalized Difference Vegetation Index Thermal"
[docs] bands = ['N', 'R', 'T']
[docs] formula = "(N - (R * T / 10000.0))/(N + (R * T / 10000.0))"
[docs] platforms = ['Landsat-TM', 'Landsat-ETM+']
[docs] reference = "https://doi.org/10.1080/01431160600954704"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType, T: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "T": T})])
[docs] self.N = N
[docs] self.R = R
[docs] self.T = T
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDWI(WCPSExpr): """Normalized Difference Water Index"""
[docs] short_name = "NDWI"
[docs] long_name = "Normalized Difference Water Index"
[docs] bands = ['G', 'N']
[docs] formula = "(G - N) / (G + N)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1080/01431169608948714"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "N": N})])
[docs] self.G = G
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDWIns(WCPSExpr): """Normalized Difference Water Index with no Snow Cover and Glaciers"""
[docs] short_name = "NDWIns"
[docs] long_name = "Normalized Difference Water Index with no Snow Cover and Glaciers"
[docs] bands = ['G', 'alpha', 'N']
[docs] formula = "(G - alpha * N)/(G + N)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.3390/w12051339"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, alpha: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "alpha": alpha, "N": N})])
[docs] self.G = G
[docs] self.alpha = alpha
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NDYI(WCPSExpr): """Normalized Difference Yellowness Index"""
[docs] short_name = "NDYI"
[docs] long_name = "Normalized Difference Yellowness Index"
[docs] bands = ['G', 'B']
[docs] formula = "(G - B) / (G + B)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.rse.2016.06.016"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "B": B})])
[docs] self.G = G
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NGRDI(WCPSExpr): """Normalized Green Red Difference Index"""
[docs] short_name = "NGRDI"
[docs] long_name = "Normalized Green Red Difference Index"
[docs] bands = ['G', 'R']
[docs] formula = "(G - R) / (G + R)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/0034-4257(79)90013-0"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "R": R})])
[docs] self.G = G
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NHFD(WCPSExpr): """Non-Homogeneous Feature Difference"""
[docs] short_name = "NHFD"
[docs] long_name = "Non-Homogeneous Feature Difference"
[docs] bands = ['RE1', 'A']
[docs] formula = "(RE1 - A) / (RE1 + A)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://www.semanticscholar.org/paper/Using-WorldView-2-Vis-NIR-MSI-Imagery-to-Support-Wolf/5e5063ccc4ee76b56b721c866e871d47a77f9fb4"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE1: OperandType, A: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE1": RE1, "A": A})])
[docs] self.RE1 = RE1
[docs] self.A = A
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NIRv(WCPSExpr): """Near-Infrared Reflectance of Vegetation"""
[docs] short_name = "NIRv"
[docs] long_name = "Near-Infrared Reflectance of Vegetation"
[docs] bands = ['N', 'R']
[docs] formula = "((N - R) / (N + R)) * N"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1126/sciadv.1602244"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R})])
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NIRvH2(WCPSExpr): """Hyperspectral Near-Infrared Reflectance of Vegetation"""
[docs] short_name = "NIRvH2"
[docs] long_name = "Hyperspectral Near-Infrared Reflectance of Vegetation"
[docs] bands = ['N', 'R', 'k', 'lambdaN', 'lambdaR']
[docs] formula = "N - R - k * (lambdaN - lambdaR)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.rse.2021.112723"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType, k: OperandType, lambdaN: OperandType, lambdaR: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "k": k, "lambdaN": lambdaN, "lambdaR": lambdaR})])
[docs] self.N = N
[docs] self.R = R
[docs] self.k = k
[docs] self.lambdaN = lambdaN
[docs] self.lambdaR = lambdaR
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NIRvP(WCPSExpr): """Near-Infrared Reflectance of Vegetation and Incoming PAR"""
[docs] short_name = "NIRvP"
[docs] long_name = "Near-Infrared Reflectance of Vegetation and Incoming PAR"
[docs] bands = ['N', 'R', 'PAR']
[docs] formula = "((N - R) / (N + R)) * N * PAR"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.rse.2021.112763"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType, PAR: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "PAR": PAR})])
[docs] self.N = N
[docs] self.R = R
[docs] self.PAR = PAR
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NLI(WCPSExpr): """Non-Linear Vegetation Index"""
[docs] short_name = "NLI"
[docs] long_name = "Non-Linear Vegetation Index"
[docs] bands = ['N', 'R']
[docs] formula = "((N ** 2) - R)/((N ** 2) + R)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1080/02757259409532252"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R})])
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NMDI(WCPSExpr): """Normalized Multi-band Drought Index"""
[docs] short_name = "NMDI"
[docs] long_name = "Normalized Multi-band Drought Index"
[docs] bands = ['N', 'S1', 'S2']
[docs] formula = "(N - (S1 - S2))/(N + (S1 - S2))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1029/2007GL031021"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S1: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S1": S1, "S2": S2})])
[docs] self.N = N
[docs] self.S1 = S1
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NRFIg(WCPSExpr): """Normalized Rapeseed Flowering Index Green"""
[docs] short_name = "NRFIg"
[docs] long_name = "Normalized Rapeseed Flowering Index Green"
[docs] bands = ['G', 'S2']
[docs] formula = "(G - S2) / (G + S2)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.3390/rs13010105"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "S2": S2})])
[docs] self.G = G
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NRFIr(WCPSExpr): """Normalized Rapeseed Flowering Index Red"""
[docs] short_name = "NRFIr"
[docs] long_name = "Normalized Rapeseed Flowering Index Red"
[docs] bands = ['R', 'S2']
[docs] formula = "(R - S2) / (R + S2)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.3390/rs13010105"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "S2": S2})])
[docs] self.R = R
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NSDS(WCPSExpr): """Normalized Shortwave Infrared Difference Soil-Moisture"""
[docs] short_name = "NSDS"
[docs] long_name = "Normalized Shortwave Infrared Difference Soil-Moisture"
[docs] bands = ['S1', 'S2']
[docs] formula = "(S1 - S2)/(S1 + S2)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.3390/land10030231"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S1: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "S2": S2})])
[docs] self.S1 = S1
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NSDSI1(WCPSExpr): """Normalized Shortwave-Infrared Difference Bare Soil Moisture Index 1"""
[docs] short_name = "NSDSI1"
[docs] long_name = "Normalized Shortwave-Infrared Difference Bare Soil Moisture Index 1"
[docs] bands = ['S1', 'S2']
[docs] formula = "(S1-S2)/S1"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/j.isprsjprs.2019.06.012"
[docs] contributor = "https://github.com/CvenGeo"
def __init__(self, S1: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "S2": S2})])
[docs] self.S1 = S1
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NSDSI2(WCPSExpr): """Normalized Shortwave-Infrared Difference Bare Soil Moisture Index 2"""
[docs] short_name = "NSDSI2"
[docs] long_name = "Normalized Shortwave-Infrared Difference Bare Soil Moisture Index 2"
[docs] bands = ['S1', 'S2']
[docs] formula = "(S1-S2)/S2"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/j.isprsjprs.2019.06.012"
[docs] contributor = "https://github.com/CvenGeo"
def __init__(self, S1: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "S2": S2})])
[docs] self.S1 = S1
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NSDSI3(WCPSExpr): """Normalized Shortwave-Infrared Difference Bare Soil Moisture Index 3"""
[docs] short_name = "NSDSI3"
[docs] long_name = "Normalized Shortwave-Infrared Difference Bare Soil Moisture Index 3"
[docs] bands = ['S1', 'S2']
[docs] formula = "(S1-S2)/(S1+S2)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/j.isprsjprs.2019.06.012"
[docs] contributor = "https://github.com/CvenGeo"
def __init__(self, S1: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S1": S1, "S2": S2})])
[docs] self.S1 = S1
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NSTv1(WCPSExpr): """NIR-SWIR-Temperature Version 1"""
[docs] short_name = "NSTv1"
[docs] long_name = "NIR-SWIR-Temperature Version 1"
[docs] bands = ['N', 'S2', 'T']
[docs] formula = "((N-S2)/(N+S2))*T"
[docs] platforms = ['Landsat-TM', 'Landsat-ETM+']
[docs] reference = "https://doi.org/10.1016/j.rse.2011.06.010"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S2: OperandType, T: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S2": S2, "T": T})])
[docs] self.N = N
[docs] self.S2 = S2
[docs] self.T = T
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NSTv2(WCPSExpr): """NIR-SWIR-Temperature Version 2"""
[docs] short_name = "NSTv2"
[docs] long_name = "NIR-SWIR-Temperature Version 2"
[docs] bands = ['N', 'S2', 'T']
[docs] formula = "(N-(S2+T))/(N+(S2+T))"
[docs] platforms = ['Landsat-TM', 'Landsat-ETM+']
[docs] reference = "https://doi.org/10.1016/j.rse.2011.06.010"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S2: OperandType, T: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S2": S2, "T": T})])
[docs] self.N = N
[docs] self.S2 = S2
[docs] self.T = T
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NWI(WCPSExpr): """New Water Index"""
[docs] short_name = "NWI"
[docs] long_name = "New Water Index"
[docs] bands = ['B', 'N', 'S1', 'S2']
[docs] formula = "(B - (N + S1 + S2))/(B + (N + S1 + S2))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.11873/j.issn.1004-0323.2009.2.167"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, B: OperandType, N: OperandType, S1: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"B": B, "N": N, "S1": S1, "S2": S2})])
[docs] self.B = B
[docs] self.N = N
[docs] self.S1 = S1
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NormG(WCPSExpr): """Normalized Green"""
[docs] short_name = "NormG"
[docs] long_name = "Normalized Green"
[docs] bands = ['G', 'N', 'R']
[docs] formula = "G/(N + G + R)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.2134/agronj2004.0314"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "N": N, "R": R})])
[docs] self.G = G
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NormNIR(WCPSExpr): """Normalized NIR"""
[docs] short_name = "NormNIR"
[docs] long_name = "Normalized NIR"
[docs] bands = ['N', 'G', 'R']
[docs] formula = "N/(N + G + R)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.2134/agronj2004.0314"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, G: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "G": G, "R": R})])
[docs] self.N = N
[docs] self.G = G
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class NormR(WCPSExpr): """Normalized Red"""
[docs] short_name = "NormR"
[docs] long_name = "Normalized Red"
[docs] bands = ['R', 'N', 'G']
[docs] formula = "R/(N + G + R)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.2134/agronj2004.0314"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, N: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "N": N, "G": G})])
[docs] self.R = R
[docs] self.N = N
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class OCVI(WCPSExpr): """Optimized Chlorophyll Vegetation Index"""
[docs] short_name = "OCVI"
[docs] long_name = "Optimized Chlorophyll Vegetation Index"
[docs] bands = ['N', 'G', 'R', 'cexp']
[docs] formula = "(N / G) * (R / G) ** cexp"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "http://dx.doi.org/10.1007/s11119-008-9075-z"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, G: OperandType, R: OperandType, cexp: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "G": G, "R": R, "cexp": cexp})])
[docs] self.N = N
[docs] self.G = G
[docs] self.R = R
[docs] self.cexp = cexp
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class OSAVI(WCPSExpr): """Optimized Soil-Adjusted Vegetation Index"""
[docs] short_name = "OSAVI"
[docs] long_name = "Optimized Soil-Adjusted Vegetation Index"
[docs] bands = ['N', 'R']
[docs] formula = "(N - R) / (N + R + 0.16)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/0034-4257(95)00186-7"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R})])
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class OSI(WCPSExpr): """Oil Spill Index"""
[docs] short_name = "OSI"
[docs] long_name = "Oil Spill Index"
[docs] bands = ['G', 'R', 'B']
[docs] formula = "(G + R)/B"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.mex.2021.101327"
[docs] contributor = "https://github.com/emanuelcastanho"
def __init__(self, G: OperandType, R: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "R": R, "B": B})])
[docs] self.G = G
[docs] self.R = R
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class PI(WCPSExpr): """Plastic Index"""
[docs] short_name = "PI"
[docs] long_name = "Plastic Index"
[docs] bands = ['N', 'R']
[docs] formula = "N/(N + R)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.3390/rs12162648"
[docs] contributor = "https://github.com/emanuelcastanho"
def __init__(self, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R})])
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class PISI(WCPSExpr): """Perpendicular Impervious Surface Index"""
[docs] short_name = "PISI"
[docs] long_name = "Perpendicular Impervious Surface Index"
[docs] bands = ['B', 'N']
[docs] formula = "0.8192 * B - 0.5735 * N + 0.0750"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.3390/rs10101521"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, B: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"B": B, "N": N})])
[docs] self.B = B
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class PSRI(WCPSExpr): """Plant Senescing Reflectance Index"""
[docs] short_name = "PSRI"
[docs] long_name = "Plant Senescing Reflectance Index"
[docs] bands = ['R', 'B', 'RE2']
[docs] formula = "(R - B)/RE2"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1034/j.1399-3054.1999.106119.x"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, B: OperandType, RE2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "B": B, "RE2": RE2})])
[docs] self.R = R
[docs] self.B = B
[docs] self.RE2 = RE2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class QpRVI(WCPSExpr): """Quad-Polarized Radar Vegetation Index"""
[docs] short_name = "QpRVI"
[docs] long_name = "Quad-Polarized Radar Vegetation Index"
[docs] bands = ['HV', 'HH', 'VV']
[docs] formula = "(8.0 * HV)/(HH + VV + 2.0 * HV)"
[docs] platforms = []
[docs] reference = "https://doi.org/10.1109/IGARSS.2001.976856"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, HV: OperandType, HH: OperandType, VV: OperandType): super().__init__(operands=[eval(self.formula, {}, {"HV": HV, "HH": HH, "VV": VV})])
[docs] self.HV = HV
[docs] self.HH = HH
[docs] self.VV = VV
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class RCC(WCPSExpr): """Red Chromatic Coordinate"""
[docs] short_name = "RCC"
[docs] long_name = "Red Chromatic Coordinate"
[docs] bands = ['R', 'G', 'B']
[docs] formula = "R / (R + G + B)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/0034-4257(87)90088-5"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, G: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "G": G, "B": B})])
[docs] self.R = R
[docs] self.G = G
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class RDVI(WCPSExpr): """Renormalized Difference Vegetation Index"""
[docs] short_name = "RDVI"
[docs] long_name = "Renormalized Difference Vegetation Index"
[docs] bands = ['N', 'R']
[docs] formula = "(N - R) / ((N + R) ** 0.5)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/0034-4257(94)00114-3"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R})])
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class REDSI(WCPSExpr): """Red-Edge Disease Stress Index"""
[docs] short_name = "REDSI"
[docs] long_name = "Red-Edge Disease Stress Index"
[docs] bands = ['RE3', 'R', 'RE1']
[docs] formula = "((705.0 - 665.0) * (RE3 - R) - (783.0 - 665.0) * (RE1 - R)) / (2.0 * R)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.3390/s18030868"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE3: OperandType, R: OperandType, RE1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE3": RE3, "R": R, "RE1": RE1})])
[docs] self.RE3 = RE3
[docs] self.R = R
[docs] self.RE1 = RE1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class RENDVI(WCPSExpr): """Red Edge Normalized Difference Vegetation Index"""
[docs] short_name = "RENDVI"
[docs] long_name = "Red Edge Normalized Difference Vegetation Index"
[docs] bands = ['RE2', 'RE1']
[docs] formula = "(RE2 - RE1)/(RE2 + RE1)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/S0176-1617(11)81633-0"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE2: OperandType, RE1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE2": RE2, "RE1": RE1})])
[docs] self.RE2 = RE2
[docs] self.RE1 = RE1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class RFDI(WCPSExpr): """Radar Forest Degradation Index"""
[docs] short_name = "RFDI"
[docs] long_name = "Radar Forest Degradation Index"
[docs] bands = ['HH', 'HV']
[docs] formula = "(HH - HV)/(HH + HV)"
[docs] platforms = ['Sentinel-1 (Dual Polarisation HH-HV)']
[docs] reference = "https://doi.org/10.5194/bg-9-179-2012"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, HH: OperandType, HV: OperandType): super().__init__(operands=[eval(self.formula, {}, {"HH": HH, "HV": HV})])
[docs] self.HH = HH
[docs] self.HV = HV
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class RGBVI(WCPSExpr): """Red Green Blue Vegetation Index"""
[docs] short_name = "RGBVI"
[docs] long_name = "Red Green Blue Vegetation Index"
[docs] bands = ['G', 'B', 'R']
[docs] formula = "(G ** 2.0 - B * R)/(G ** 2.0 + B * R)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.jag.2015.02.012"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, B: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "B": B, "R": R})])
[docs] self.G = G
[docs] self.B = B
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class RGRI(WCPSExpr): """Red-Green Ratio Index"""
[docs] short_name = "RGRI"
[docs] long_name = "Red-Green Ratio Index"
[docs] bands = ['R', 'G']
[docs] formula = "R/G"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.jag.2014.03.018"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "G": G})])
[docs] self.R = R
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class RI(WCPSExpr): """Redness Index"""
[docs] short_name = "RI"
[docs] long_name = "Redness Index"
[docs] bands = ['R', 'G']
[docs] formula = "(R - G)/(R + G)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://www.documentation.ird.fr/hor/fdi:34390"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "G": G})])
[docs] self.R = R
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class RI4XS(WCPSExpr): """SPOT HRV XS-based Redness Index 4"""
[docs] short_name = "RI4XS"
[docs] long_name = "SPOT HRV XS-based Redness Index 4"
[docs] bands = ['R', 'G']
[docs] formula = "(R**2.0)/(G**4.0)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/S0034-4257(98)00030-3"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "G": G})])
[docs] self.R = R
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class RNDVI(WCPSExpr): """Reversed Normalized Difference Vegetation Index"""
[docs] short_name = "RNDVI"
[docs] long_name = "Reversed Normalized Difference Vegetation Index"
[docs] bands = ['R', 'N']
[docs] formula = "(R - N)/(R + N)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.3390/rs12162648"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "N": N})])
[docs] self.R = R
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class RVI(WCPSExpr): """Ratio Vegetation Index"""
[docs] short_name = "RVI"
[docs] long_name = "Ratio Vegetation Index"
[docs] bands = ['RE2', 'R']
[docs] formula = "RE2 / R"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.2134/agronj1968.00021962006000060016x"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE2: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE2": RE2, "R": R})])
[docs] self.RE2 = RE2
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class S2REP(WCPSExpr): """Sentinel-2 Red-Edge Position"""
[docs] short_name = "S2REP"
[docs] long_name = "Sentinel-2 Red-Edge Position"
[docs] bands = ['RE3', 'R', 'RE1', 'RE2']
[docs] formula = "705.0 + 35.0 * ((((RE3 + R) / 2.0) - RE1) / (RE2 - RE1))"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/j.isprsjprs.2013.04.007"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE3: OperandType, R: OperandType, RE1: OperandType, RE2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE3": RE3, "R": R, "RE1": RE1, "RE2": RE2})])
[docs] self.RE3 = RE3
[docs] self.R = R
[docs] self.RE1 = RE1
[docs] self.RE2 = RE2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class S2WI(WCPSExpr): """Sentinel-2 Water Index"""
[docs] short_name = "S2WI"
[docs] long_name = "Sentinel-2 Water Index"
[docs] bands = ['RE1', 'S2']
[docs] formula = "(RE1 - S2)/(RE1 + S2)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.3390/w13121647"
[docs] contributor = "https://github.com/MATRIX4284"
def __init__(self, RE1: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE1": RE1, "S2": S2})])
[docs] self.RE1 = RE1
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class S3(WCPSExpr): """S3 Snow Index"""
[docs] short_name = "S3"
[docs] long_name = "S3 Snow Index"
[docs] bands = ['N', 'R', 'S1']
[docs] formula = "(N * (R - S1)) / ((N + R) * (N + S1))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.3178/jjshwr.12.28"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "S1": S1})])
[docs] self.N = N
[docs] self.R = R
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class SARVI(WCPSExpr): """Soil Adjusted and Atmospherically Resistant Vegetation Index"""
[docs] short_name = "SARVI"
[docs] long_name = "Soil Adjusted and Atmospherically Resistant Vegetation Index"
[docs] bands = ['L', 'N', 'R', 'B']
[docs] formula = "(1 + L)*(N - (R - (R - B))) / (N + (R - (R - B)) + L)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1109/36.134076"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, L: OperandType, N: OperandType, R: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"L": L, "N": N, "R": R, "B": B})])
[docs] self.L = L
[docs] self.N = N
[docs] self.R = R
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class SAVI(WCPSExpr): """Soil-Adjusted Vegetation Index"""
[docs] short_name = "SAVI"
[docs] long_name = "Soil-Adjusted Vegetation Index"
[docs] bands = ['L', 'N', 'R']
[docs] formula = "(1.0 + L) * (N - R) / (N + R + L)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/0034-4257(88)90106-X"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, L: OperandType, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"L": L, "N": N, "R": R})])
[docs] self.L = L
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class SAVI2(WCPSExpr): """Soil-Adjusted Vegetation Index 2"""
[docs] short_name = "SAVI2"
[docs] long_name = "Soil-Adjusted Vegetation Index 2"
[docs] bands = ['N', 'R', 'slb', 'sla']
[docs] formula = "N / (R + (slb / sla))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1080/01431169008955053"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType, slb: OperandType, sla: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "slb": slb, "sla": sla})])
[docs] self.N = N
[docs] self.R = R
[docs] self.slb = slb
[docs] self.sla = sla
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class SAVIT(WCPSExpr): """Soil-Adjusted Vegetation Index Thermal"""
[docs] short_name = "SAVIT"
[docs] long_name = "Soil-Adjusted Vegetation Index Thermal"
[docs] bands = ['L', 'N', 'R', 'T']
[docs] formula = "(1.0 + L) * (N - (R * T / 10000.0)) / (N + (R * T / 10000.0) + L)"
[docs] platforms = ['Landsat-TM', 'Landsat-ETM+']
[docs] reference = "https://doi.org/10.1080/01431160600954704"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, L: OperandType, N: OperandType, R: OperandType, T: OperandType): super().__init__(operands=[eval(self.formula, {}, {"L": L, "N": N, "R": R, "T": T})])
[docs] self.L = L
[docs] self.N = N
[docs] self.R = R
[docs] self.T = T
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class SEVI(WCPSExpr): """Shadow-Eliminated Vegetation Index"""
[docs] short_name = "SEVI"
[docs] long_name = "Shadow-Eliminated Vegetation Index"
[docs] bands = ['N', 'R', 'fdelta']
[docs] formula = "(N/R) + fdelta * (1.0/R)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1080/17538947.2018.1495770"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType, fdelta: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "fdelta": fdelta})])
[docs] self.N = N
[docs] self.R = R
[docs] self.fdelta = fdelta
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class SI(WCPSExpr): """Shadow Index"""
[docs] short_name = "SI"
[docs] long_name = "Shadow Index"
[docs] bands = ['B', 'G', 'R']
[docs] formula = "((1.0 - B) * (1.0 - G) * (1.0 - R)) ** (1/3)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.465.8749&rep=rep1&type=pdf"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, B: OperandType, G: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"B": B, "G": G, "R": R})])
[docs] self.B = B
[docs] self.G = G
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class SIPI(WCPSExpr): """Structure Insensitive Pigment Index"""
[docs] short_name = "SIPI"
[docs] long_name = "Structure Insensitive Pigment Index"
[docs] bands = ['N', 'A', 'R']
[docs] formula = "(N - A) / (N - R)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI']
[docs] reference = "https://eurekamag.com/research/009/395/009395053.php"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, A: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "A": A, "R": R})])
[docs] self.N = N
[docs] self.A = A
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class SLAVI(WCPSExpr): """Specific Leaf Area Vegetation Index"""
[docs] short_name = "SLAVI"
[docs] long_name = "Specific Leaf Area Vegetation Index"
[docs] bands = ['N', 'R', 'S2']
[docs] formula = "N/(R + S2)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://www.asprs.org/wp-content/uploads/pers/2000journal/february/2000_feb_183-191.pdf"
[docs] contributor = "https://github.com/geoSanjeeb"
def __init__(self, N: OperandType, R: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "S2": S2})])
[docs] self.N = N
[docs] self.R = R
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class SR(WCPSExpr): """Simple Ratio"""
[docs] short_name = "SR"
[docs] long_name = "Simple Ratio"
[docs] bands = ['N', 'R']
[docs] formula = "N/R"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.2307/1936256"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R})])
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class SR2(WCPSExpr): """Simple Ratio (800 and 550 nm)"""
[docs] short_name = "SR2"
[docs] long_name = "Simple Ratio (800 and 550 nm)"
[docs] bands = ['N', 'G']
[docs] formula = "N/G"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1080/01431169308904370"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "G": G})])
[docs] self.N = N
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class SR3(WCPSExpr): """Simple Ratio (860, 550 and 708 nm)"""
[docs] short_name = "SR3"
[docs] long_name = "Simple Ratio (860, 550 and 708 nm)"
[docs] bands = ['N2', 'G', 'RE1']
[docs] formula = "N2/(G * RE1)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/S0034-4257(98)00046-7"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N2: OperandType, G: OperandType, RE1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N2": N2, "G": G, "RE1": RE1})])
[docs] self.N2 = N2
[docs] self.G = G
[docs] self.RE1 = RE1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class SR555(WCPSExpr): """Simple Ratio (555 and 750 nm)"""
[docs] short_name = "SR555"
[docs] long_name = "Simple Ratio (555 and 750 nm)"
[docs] bands = ['RE2', 'G']
[docs] formula = "RE2 / G"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/S0176-1617(11)81633-0"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE2: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE2": RE2, "G": G})])
[docs] self.RE2 = RE2
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class SR705(WCPSExpr): """Simple Ratio (705 and 750 nm)"""
[docs] short_name = "SR705"
[docs] long_name = "Simple Ratio (705 and 750 nm)"
[docs] bands = ['RE2', 'RE1']
[docs] formula = "RE2 / RE1"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/S0176-1617(11)81633-0"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE2: OperandType, RE1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE2": RE2, "RE1": RE1})])
[docs] self.RE2 = RE2
[docs] self.RE1 = RE1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class SWI(WCPSExpr): """Snow Water Index"""
[docs] short_name = "SWI"
[docs] long_name = "Snow Water Index"
[docs] bands = ['G', 'N', 'S1']
[docs] formula = "(G * (N - S1)) / ((G + N) * (N + S1))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.3390/rs11232774"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, N: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "N": N, "S1": S1})])
[docs] self.G = G
[docs] self.N = N
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class SWM(WCPSExpr): """Sentinel Water Mask"""
[docs] short_name = "SWM"
[docs] long_name = "Sentinel Water Mask"
[docs] bands = ['B', 'G', 'N', 'S1']
[docs] formula = "(B + G)/(N + S1)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://eoscience.esa.int/landtraining2017/files/posters/MILCZAREK.pdf"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, B: OperandType, G: OperandType, N: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"B": B, "G": G, "N": N, "S1": S1})])
[docs] self.B = B
[docs] self.G = G
[docs] self.N = N
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class SeLI(WCPSExpr): """Sentinel-2 LAI Green Index"""
[docs] short_name = "SeLI"
[docs] long_name = "Sentinel-2 LAI Green Index"
[docs] bands = ['N2', 'RE1']
[docs] formula = "(N2 - RE1) / (N2 + RE1)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.3390/s19040904"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N2: OperandType, RE1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N2": N2, "RE1": RE1})])
[docs] self.N2 = N2
[docs] self.RE1 = RE1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class TCARI(WCPSExpr): """Transformed Chlorophyll Absorption in Reflectance Index"""
[docs] short_name = "TCARI"
[docs] long_name = "Transformed Chlorophyll Absorption in Reflectance Index"
[docs] bands = ['RE1', 'R', 'G']
[docs] formula = "3 * ((RE1 - R) - 0.2 * (RE1 - G) * (RE1 / R))"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/S0034-4257(02)00018-4"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE1: OperandType, R: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE1": RE1, "R": R, "G": G})])
[docs] self.RE1 = RE1
[docs] self.R = R
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class TCARIOSAVI(WCPSExpr): """TCARI/OSAVI Ratio"""
[docs] short_name = "TCARIOSAVI"
[docs] long_name = "TCARI/OSAVI Ratio"
[docs] bands = ['RE1', 'R', 'G', 'N']
[docs] formula = "(3 * ((RE1 - R) - 0.2 * (RE1 - G) * (RE1 / R))) / (1.16 * (N - R) / (N + R + 0.16))"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/S0034-4257(02)00018-4"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE1: OperandType, R: OperandType, G: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE1": RE1, "R": R, "G": G, "N": N})])
[docs] self.RE1 = RE1
[docs] self.R = R
[docs] self.G = G
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class TCARIOSAVI705(WCPSExpr): """TCARI/OSAVI Ratio (705 and 750 nm)"""
[docs] short_name = "TCARIOSAVI705"
[docs] long_name = "TCARI/OSAVI Ratio (705 and 750 nm)"
[docs] bands = ['RE2', 'RE1', 'G']
[docs] formula = "(3 * ((RE2 - RE1) - 0.2 * (RE2 - G) * (RE2 / RE1))) / (1.16 * (RE2 - RE1) / (RE2 + RE1 + 0.16))"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/j.agrformet.2008.03.005"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE2: OperandType, RE1: OperandType, G: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE2": RE2, "RE1": RE1, "G": G})])
[docs] self.RE2 = RE2
[docs] self.RE1 = RE1
[docs] self.G = G
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class TCI(WCPSExpr): """Triangular Chlorophyll Index"""
[docs] short_name = "TCI"
[docs] long_name = "Triangular Chlorophyll Index"
[docs] bands = ['RE1', 'G', 'R']
[docs] formula = "1.2 * (RE1 - G) - 1.5 * (R - G) * (RE1 / R) ** 0.5"
[docs] platforms = ['Sentinel-2']
[docs] reference = "http://dx.doi.org/10.1109/TGRS.2007.904836"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE1: OperandType, G: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE1": RE1, "G": G, "R": R})])
[docs] self.RE1 = RE1
[docs] self.G = G
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class TDVI(WCPSExpr): """Transformed Difference Vegetation Index"""
[docs] short_name = "TDVI"
[docs] long_name = "Transformed Difference Vegetation Index"
[docs] bands = ['N', 'R']
[docs] formula = "1.5 * ((N - R)/((N ** 2.0 + R + 0.5) ** 0.5))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1109/IGARSS.2002.1026867"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R})])
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class TGI(WCPSExpr): """Triangular Greenness Index"""
[docs] short_name = "TGI"
[docs] long_name = "Triangular Greenness Index"
[docs] bands = ['R', 'G', 'B']
[docs] formula = "- 0.5 * (190 * (R - G) - 120 * (R - B))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "http://dx.doi.org/10.1016/j.jag.2012.07.020"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, G: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "G": G, "B": B})])
[docs] self.R = R
[docs] self.G = G
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class TRRVI(WCPSExpr): """Transformed Red Range Vegetation Index"""
[docs] short_name = "TRRVI"
[docs] long_name = "Transformed Red Range Vegetation Index"
[docs] bands = ['RE2', 'R', 'N']
[docs] formula = "((RE2 - R) / (RE2 + R)) / (((N - R) / (N + R)) + 1.0)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.3390/rs12152359"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE2: OperandType, R: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE2": RE2, "R": R, "N": N})])
[docs] self.RE2 = RE2
[docs] self.R = R
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class TSAVI(WCPSExpr): """Transformed Soil-Adjusted Vegetation Index"""
[docs] short_name = "TSAVI"
[docs] long_name = "Transformed Soil-Adjusted Vegetation Index"
[docs] bands = ['sla', 'N', 'R', 'slb']
[docs] formula = "sla * (N - sla * R - slb) / (sla * N + R - sla * slb)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1109/IGARSS.1989.576128"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, sla: OperandType, N: OperandType, R: OperandType, slb: OperandType): super().__init__(operands=[eval(self.formula, {}, {"sla": sla, "N": N, "R": R, "slb": slb})])
[docs] self.sla = sla
[docs] self.N = N
[docs] self.R = R
[docs] self.slb = slb
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class TTVI(WCPSExpr): """Transformed Triangular Vegetation Index"""
[docs] short_name = "TTVI"
[docs] long_name = "Transformed Triangular Vegetation Index"
[docs] bands = ['RE3', 'RE2', 'N2']
[docs] formula = "0.5 * ((865.0 - 740.0) * (RE3 - RE2) - (N2 - RE2) * (783.0 - 740))"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.3390/rs12010016"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE3: OperandType, RE2: OperandType, N2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE3": RE3, "RE2": RE2, "N2": N2})])
[docs] self.RE3 = RE3
[docs] self.RE2 = RE2
[docs] self.N2 = N2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class TVI(WCPSExpr): """Transformed Vegetation Index"""
[docs] short_name = "TVI"
[docs] long_name = "Transformed Vegetation Index"
[docs] bands = ['N', 'R']
[docs] formula = "(((N - R)/(N + R)) + 0.5) ** 0.5"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://ntrs.nasa.gov/citations/19740022614"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R})])
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class TWI(WCPSExpr): """Triangle Water Index"""
[docs] short_name = "TWI"
[docs] long_name = "Triangle Water Index"
[docs] bands = ['RE1', 'RE2', 'G', 'S2', 'B', 'N']
[docs] formula = "(2.84 * (RE1 - RE2) / (G + S2)) + ((1.25 * (G - B) - (N - B)) / (N + 1.25 * G - 0.25 * B))"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.3390/rs14215289"
[docs] contributor = "https://github.com/remi-braun"
def __init__(self, RE1: OperandType, RE2: OperandType, G: OperandType, S2: OperandType, B: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE1": RE1, "RE2": RE2, "G": G, "S2": S2, "B": B, "N": N})])
[docs] self.RE1 = RE1
[docs] self.RE2 = RE2
[docs] self.G = G
[docs] self.S2 = S2
[docs] self.B = B
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class TriVI(WCPSExpr): """Triangular Vegetation Index"""
[docs] short_name = "TriVI"
[docs] long_name = "Triangular Vegetation Index"
[docs] bands = ['N', 'G', 'R']
[docs] formula = "0.5 * (120 * (N - G) - 200 * (R - G))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "http://dx.doi.org/10.1016/S0034-4257(00)00197-8"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, G: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "G": G, "R": R})])
[docs] self.N = N
[docs] self.G = G
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class UI(WCPSExpr): """Urban Index"""
[docs] short_name = "UI"
[docs] long_name = "Urban Index"
[docs] bands = ['S2', 'N']
[docs] formula = "(S2 - N)/(S2 + N)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://www.isprs.org/proceedings/XXXI/congress/part7/321_XXXI-part7.pdf"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, S2: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"S2": S2, "N": N})])
[docs] self.S2 = S2
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class VARI(WCPSExpr): """Visible Atmospherically Resistant Index"""
[docs] short_name = "VARI"
[docs] long_name = "Visible Atmospherically Resistant Index"
[docs] bands = ['G', 'R', 'B']
[docs] formula = "(G - R) / (G + R - B)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/S0034-4257(01)00289-9"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, R: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "R": R, "B": B})])
[docs] self.G = G
[docs] self.R = R
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class VARI700(WCPSExpr): """Visible Atmospherically Resistant Index (700 nm)"""
[docs] short_name = "VARI700"
[docs] long_name = "Visible Atmospherically Resistant Index (700 nm)"
[docs] bands = ['RE1', 'R', 'B']
[docs] formula = "(RE1 - 1.7 * R + 0.7 * B) / (RE1 + 1.3 * R - 1.3 * B)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/S0034-4257(01)00289-9"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE1: OperandType, R: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE1": RE1, "R": R, "B": B})])
[docs] self.RE1 = RE1
[docs] self.R = R
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class VDDPI(WCPSExpr): """Vertical Dual De-Polarization Index"""
[docs] short_name = "VDDPI"
[docs] long_name = "Vertical Dual De-Polarization Index"
[docs] bands = ['VV', 'VH']
[docs] formula = "(VV + VH)/VV"
[docs] platforms = ['Sentinel-1 (Dual Polarisation VV-VH)']
[docs] reference = "https://doi.org/10.1016/j.rse.2018.09.003"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, VV: OperandType, VH: OperandType): super().__init__(operands=[eval(self.formula, {}, {"VV": VV, "VH": VH})])
[docs] self.VV = VV
[docs] self.VH = VH
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class VHVVD(WCPSExpr): """VH-VV Difference"""
[docs] short_name = "VHVVD"
[docs] long_name = "VH-VV Difference"
[docs] bands = ['VH', 'VV']
[docs] formula = "VH - VV"
[docs] platforms = ['Sentinel-1 (Dual Polarisation VV-VH)']
[docs] reference = "https://doi.org/10.3390/app9040655"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, VH: OperandType, VV: OperandType): super().__init__(operands=[eval(self.formula, {}, {"VH": VH, "VV": VV})])
[docs] self.VH = VH
[docs] self.VV = VV
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class VHVVP(WCPSExpr): """VH-VV Product"""
[docs] short_name = "VHVVP"
[docs] long_name = "VH-VV Product"
[docs] bands = ['VH', 'VV']
[docs] formula = "VH * VV"
[docs] platforms = ['Sentinel-1 (Dual Polarisation VV-VH)']
[docs] reference = "https://doi.org/10.1109/IGARSS47720.2021.9554099"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, VH: OperandType, VV: OperandType): super().__init__(operands=[eval(self.formula, {}, {"VH": VH, "VV": VV})])
[docs] self.VH = VH
[docs] self.VV = VV
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class VHVVR(WCPSExpr): """VH-VV Ratio"""
[docs] short_name = "VHVVR"
[docs] long_name = "VH-VV Ratio"
[docs] bands = ['VH', 'VV']
[docs] formula = "VH/VV"
[docs] platforms = ['Sentinel-1 (Dual Polarisation VV-VH)']
[docs] reference = "https://doi.org/10.1109/IGARSS47720.2021.9554099"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, VH: OperandType, VV: OperandType): super().__init__(operands=[eval(self.formula, {}, {"VH": VH, "VV": VV})])
[docs] self.VH = VH
[docs] self.VV = VV
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class VI6T(WCPSExpr): """VI6T Index"""
[docs] short_name = "VI6T"
[docs] long_name = "VI6T Index"
[docs] bands = ['N', 'T']
[docs] formula = "(N - T/10000.0)/(N + T/10000.0)"
[docs] platforms = ['Landsat-TM', 'Landsat-ETM+']
[docs] reference = "https://doi.org/10.1080/01431160500239008"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, T: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "T": T})])
[docs] self.N = N
[docs] self.T = T
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class VI700(WCPSExpr): """Vegetation Index (700 nm)"""
[docs] short_name = "VI700"
[docs] long_name = "Vegetation Index (700 nm)"
[docs] bands = ['RE1', 'R']
[docs] formula = "(RE1 - R) / (RE1 + R)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/S0034-4257(01)00289-9"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE1: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE1": RE1, "R": R})])
[docs] self.RE1 = RE1
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class VIBI(WCPSExpr): """Vegetation Index Built-up Index"""
[docs] short_name = "VIBI"
[docs] long_name = "Vegetation Index Built-up Index"
[docs] bands = ['N', 'R', 'S1']
[docs] formula = "((N-R)/(N+R))/(((N-R)/(N+R)) + ((S1-N)/(S1+N)))"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "http://dx.doi.org/10.1080/01431161.2012.687842"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "S1": S1})])
[docs] self.N = N
[docs] self.R = R
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class VIG(WCPSExpr): """Vegetation Index Green"""
[docs] short_name = "VIG"
[docs] long_name = "Vegetation Index Green"
[docs] bands = ['G', 'R']
[docs] formula = "(G - R) / (G + R)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/S0034-4257(01)00289-9"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "R": R})])
[docs] self.G = G
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class VVVHD(WCPSExpr): """VV-VH Difference"""
[docs] short_name = "VVVHD"
[docs] long_name = "VV-VH Difference"
[docs] bands = ['VV', 'VH']
[docs] formula = "VV - VH"
[docs] platforms = ['Sentinel-1 (Dual Polarisation VV-VH)']
[docs] reference = "https://doi.org/10.1109/IGARSS47720.2021.9554099"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, VV: OperandType, VH: OperandType): super().__init__(operands=[eval(self.formula, {}, {"VV": VV, "VH": VH})])
[docs] self.VV = VV
[docs] self.VH = VH
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class VVVHR(WCPSExpr): """VV-VH Ratio"""
[docs] short_name = "VVVHR"
[docs] long_name = "VV-VH Ratio"
[docs] bands = ['VV', 'VH']
[docs] formula = "VV/VH"
[docs] platforms = ['Sentinel-1 (Dual Polarisation VV-VH)']
[docs] reference = "https://doi.org/10.3390/app9040655"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, VV: OperandType, VH: OperandType): super().__init__(operands=[eval(self.formula, {}, {"VV": VV, "VH": VH})])
[docs] self.VV = VV
[docs] self.VH = VH
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class VVVHS(WCPSExpr): """VV-VH Sum"""
[docs] short_name = "VVVHS"
[docs] long_name = "VV-VH Sum"
[docs] bands = ['VV', 'VH']
[docs] formula = "VV + VH"
[docs] platforms = ['Sentinel-1 (Dual Polarisation VV-VH)']
[docs] reference = "https://doi.org/10.1109/IGARSS47720.2021.9554099"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, VV: OperandType, VH: OperandType): super().__init__(operands=[eval(self.formula, {}, {"VV": VV, "VH": VH})])
[docs] self.VV = VV
[docs] self.VH = VH
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class VgNIRBI(WCPSExpr): """Visible Green-Based Built-Up Index"""
[docs] short_name = "VgNIRBI"
[docs] long_name = "Visible Green-Based Built-Up Index"
[docs] bands = ['G', 'N']
[docs] formula = "(G - N)/(G + N)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.ecolind.2015.03.037"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "N": N})])
[docs] self.G = G
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class VrNIRBI(WCPSExpr): """Visible Red-Based Built-Up Index"""
[docs] short_name = "VrNIRBI"
[docs] long_name = "Visible Red-Based Built-Up Index"
[docs] bands = ['R', 'N']
[docs] formula = "(R - N)/(R + N)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/j.ecolind.2015.03.037"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, R: OperandType, N: OperandType): super().__init__(operands=[eval(self.formula, {}, {"R": R, "N": N})])
[docs] self.R = R
[docs] self.N = N
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class WDRVI(WCPSExpr): """Wide Dynamic Range Vegetation Index"""
[docs] short_name = "WDRVI"
[docs] long_name = "Wide Dynamic Range Vegetation Index"
[docs] bands = ['alpha', 'N', 'R']
[docs] formula = "(alpha * N - R) / (alpha * N + R)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1078/0176-1617-01176"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, alpha: OperandType, N: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"alpha": alpha, "N": N, "R": R})])
[docs] self.alpha = alpha
[docs] self.N = N
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class WDVI(WCPSExpr): """Weighted Difference Vegetation Index"""
[docs] short_name = "WDVI"
[docs] long_name = "Weighted Difference Vegetation Index"
[docs] bands = ['N', 'sla', 'R']
[docs] formula = "N - sla * R"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1016/0034-4257(89)90076-X"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, sla: OperandType, R: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "sla": sla, "R": R})])
[docs] self.N = N
[docs] self.sla = sla
[docs] self.R = R
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class WI1(WCPSExpr): """Water Index 1"""
[docs] short_name = "WI1"
[docs] long_name = "Water Index 1"
[docs] bands = ['G', 'S2']
[docs] formula = "(G - S2) / (G + S2)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.3390/rs11182186"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "S2": S2})])
[docs] self.G = G
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class WI2(WCPSExpr): """Water Index 2"""
[docs] short_name = "WI2"
[docs] long_name = "Water Index 2"
[docs] bands = ['B', 'S2']
[docs] formula = "(B - S2) / (B + S2)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.3390/rs11182186"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, B: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"B": B, "S2": S2})])
[docs] self.B = B
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class WI2015(WCPSExpr): """Water Index 2015"""
[docs] short_name = "WI2015"
[docs] long_name = "Water Index 2015"
[docs] bands = ['G', 'R', 'N', 'S1', 'S2']
[docs] formula = "1.7204 + 171 * G + 3 * R - 70 * N - 45 * S1 - 71 * S2"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1016/j.rse.2015.12.055"
[docs] contributor = "https://github.com/remi-braun"
def __init__(self, G: OperandType, R: OperandType, N: OperandType, S1: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "R": R, "N": N, "S1": S1, "S2": S2})])
[docs] self.G = G
[docs] self.R = R
[docs] self.N = N
[docs] self.S1 = S1
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class WRI(WCPSExpr): """Water Ratio Index"""
[docs] short_name = "WRI"
[docs] long_name = "Water Ratio Index"
[docs] bands = ['G', 'R', 'N', 'S1']
[docs] formula = "(G + R)/(N + S1)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1109/GEOINFORMATICS.2010.5567762"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, G: OperandType, R: OperandType, N: OperandType, S1: OperandType): super().__init__(operands=[eval(self.formula, {}, {"G": G, "R": R, "N": N, "S1": S1})])
[docs] self.G = G
[docs] self.R = R
[docs] self.N = N
[docs] self.S1 = S1
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class bNIRv(WCPSExpr): """Blue Near-Infrared Reflectance of Vegetation"""
[docs] short_name = "bNIRv"
[docs] long_name = "Blue Near-Infrared Reflectance of Vegetation"
[docs] bands = ['N', 'B']
[docs] formula = "((N - B)/(N + B)) * N"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1029/2024JG008240"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, B: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "B": B})])
[docs] self.N = N
[docs] self.B = B
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class kEVI(WCPSExpr): """Kernel Enhanced Vegetation Index"""
[docs] short_name = "kEVI"
[docs] long_name = "Kernel Enhanced Vegetation Index"
[docs] bands = ['g', 'kNN', 'kNR', 'C1', 'C2', 'kNB', 'kNL']
[docs] formula = "g * (kNN - kNR) / (kNN + C1 * kNR - C2 * kNB + kNL)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1126/sciadv.abc7447"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, g: OperandType, kNN: OperandType, kNR: OperandType, C1: OperandType, C2: OperandType, kNB: OperandType, kNL: OperandType): super().__init__(operands=[eval(self.formula, {}, {"g": g, "kNN": kNN, "kNR": kNR, "C1": C1, "C2": C2, "kNB": kNB, "kNL": kNL})])
[docs] self.g = g
[docs] self.kNN = kNN
[docs] self.kNR = kNR
[docs] self.C1 = C1
[docs] self.C2 = C2
[docs] self.kNB = kNB
[docs] self.kNL = kNL
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class kIPVI(WCPSExpr): """Kernel Infrared Percentage Vegetation Index"""
[docs] short_name = "kIPVI"
[docs] long_name = "Kernel Infrared Percentage Vegetation Index"
[docs] bands = ['kNN', 'kNR']
[docs] formula = "kNN/(kNN + kNR)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1126/sciadv.abc7447"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, kNN: OperandType, kNR: OperandType): super().__init__(operands=[eval(self.formula, {}, {"kNN": kNN, "kNR": kNR})])
[docs] self.kNN = kNN
[docs] self.kNR = kNR
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class kNDVI(WCPSExpr): """Kernel Normalized Difference Vegetation Index"""
[docs] short_name = "kNDVI"
[docs] long_name = "Kernel Normalized Difference Vegetation Index"
[docs] bands = ['kNN', 'kNR']
[docs] formula = "(kNN - kNR)/(kNN + kNR)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1126/sciadv.abc7447"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, kNN: OperandType, kNR: OperandType): super().__init__(operands=[eval(self.formula, {}, {"kNN": kNN, "kNR": kNR})])
[docs] self.kNN = kNN
[docs] self.kNR = kNR
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class kRVI(WCPSExpr): """Kernel Ratio Vegetation Index"""
[docs] short_name = "kRVI"
[docs] long_name = "Kernel Ratio Vegetation Index"
[docs] bands = ['kNN', 'kNR']
[docs] formula = "kNN / kNR"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1126/sciadv.abc7447"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, kNN: OperandType, kNR: OperandType): super().__init__(operands=[eval(self.formula, {}, {"kNN": kNN, "kNR": kNR})])
[docs] self.kNN = kNN
[docs] self.kNR = kNR
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class kVARI(WCPSExpr): """Kernel Visible Atmospherically Resistant Index"""
[docs] short_name = "kVARI"
[docs] long_name = "Kernel Visible Atmospherically Resistant Index"
[docs] bands = ['kGG', 'kGR', 'kGB']
[docs] formula = "(kGG - kGR) / (kGG + kGR - kGB)"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS', 'Planet-Fusion']
[docs] reference = "https://doi.org/10.1126/sciadv.abc7447"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, kGG: OperandType, kGR: OperandType, kGB: OperandType): super().__init__(operands=[eval(self.formula, {}, {"kGG": kGG, "kGR": kGR, "kGB": kGB})])
[docs] self.kGG = kGG
[docs] self.kGR = kGR
[docs] self.kGB = kGB
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class mND705(WCPSExpr): """Modified Normalized Difference (705, 750 and 445 nm)"""
[docs] short_name = "mND705"
[docs] long_name = "Modified Normalized Difference (705, 750 and 445 nm)"
[docs] bands = ['RE2', 'RE1', 'A']
[docs] formula = "(RE2 - RE1)/(RE2 + RE1 - A)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/S0034-4257(02)00010-X"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE2: OperandType, RE1: OperandType, A: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE2": RE2, "RE1": RE1, "A": A})])
[docs] self.RE2 = RE2
[docs] self.RE1 = RE1
[docs] self.A = A
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class mSR705(WCPSExpr): """Modified Simple Ratio (705 and 445 nm)"""
[docs] short_name = "mSR705"
[docs] long_name = "Modified Simple Ratio (705 and 445 nm)"
[docs] bands = ['RE2', 'A']
[docs] formula = "(RE2 - A)/(RE2 + A)"
[docs] platforms = ['Sentinel-2']
[docs] reference = "https://doi.org/10.1016/S0034-4257(02)00010-X"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, RE2: OperandType, A: OperandType): super().__init__(operands=[eval(self.formula, {}, {"RE2": RE2, "A": A})])
[docs] self.RE2 = RE2
[docs] self.A = A
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class sNIRvLSWI(WCPSExpr): """SWIR-enhanced Near-Infrared Reflectance of Vegetation for LSWI"""
[docs] short_name = "sNIRvLSWI"
[docs] long_name = "SWIR-enhanced Near-Infrared Reflectance of Vegetation for LSWI"
[docs] bands = ['N', 'S2']
[docs] formula = "((N - S2)/(N + S2)) * N"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1029/2024JG008240"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "S2": S2})])
[docs] self.N = N
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class sNIRvNDPI(WCPSExpr): """SWIR-enhanced Near-Infrared Reflectance of Vegetation for NDPI"""
[docs] short_name = "sNIRvNDPI"
[docs] long_name = "SWIR-enhanced Near-Infrared Reflectance of Vegetation for NDPI"
[docs] bands = ['N', 'alpha', 'R', 'S2']
[docs] formula = "(N - (alpha * R + (1.0 - alpha) * S2))/(N + (alpha * R + (1.0 - alpha) * S2)) * N"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1029/2024JG008240"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, alpha: OperandType, R: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "alpha": alpha, "R": R, "S2": S2})])
[docs] self.N = N
[docs] self.alpha = alpha
[docs] self.R = R
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class sNIRvNDVILSWIP(WCPSExpr): """SWIR-enhanced Near-Infrared Reflectance of Vegetation for the NDVI-LSWI Product"""
[docs] short_name = "sNIRvNDVILSWIP"
[docs] long_name = "SWIR-enhanced Near-Infrared Reflectance of Vegetation for the NDVI-LSWI Product"
[docs] bands = ['N', 'R', 'S2']
[docs] formula = "((N - R)/(N + R)) * ((N - S2)/(N + S2)) * N"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1029/2024JG008240"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "S2": S2})])
[docs] self.N = N
[docs] self.R = R
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class sNIRvNDVILSWIS(WCPSExpr): """SWIR-enhanced Near-Infrared Reflectance of Vegetation for the NDVI-LSWI Sum"""
[docs] short_name = "sNIRvNDVILSWIS"
[docs] long_name = "SWIR-enhanced Near-Infrared Reflectance of Vegetation for the NDVI-LSWI Sum"
[docs] bands = ['N', 'R', 'S2']
[docs] formula = "(((N - R)/(N + R)) + ((N - S2)/(N + S2))) * N"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1029/2024JG008240"
[docs] contributor = "https://github.com/davemlz"
def __init__(self, N: OperandType, R: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "S2": S2})])
[docs] self.N = N
[docs] self.R = R
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])
[docs] class sNIRvSWIR(WCPSExpr): """SWIR-enhanced Near-Infrared Reflectance of Vegetation"""
[docs] short_name = "sNIRvSWIR"
[docs] long_name = "SWIR-enhanced Near-Infrared Reflectance of Vegetation"
[docs] bands = ['N', 'R', 'S2']
[docs] formula = "((N - R - S2 ** 2.0)/(N + R + S2 ** 2.0)) * N"
[docs] platforms = ['Sentinel-2', 'Landsat-OLI', 'Landsat-TM', 'Landsat-ETM+', 'MODIS']
[docs] reference = "https://doi.org/10.1029/2024JG008240"
[docs] contributor = "https://github.com/MartinuzziFrancesco"
def __init__(self, N: OperandType, R: OperandType, S2: OperandType): super().__init__(operands=[eval(self.formula, {}, {"N": N, "R": R, "S2": S2})])
[docs] self.N = N
[docs] self.R = R
[docs] self.S2 = S2
def __str__(self): return super().__str__() + str(self.operands[0])