Skip to content

Instantly share code, notes, and snippets.

@csaybar
Created February 4, 2020 21:22
Show Gist options
  • Save csaybar/19a9db35f8c8044448d885b68e8c9eb8 to your computer and use it in GitHub Desktop.
Save csaybar/19a9db35f8c8044448d885b68e8c9eb8 to your computer and use it in GitHub Desktop.
mastergis resultos
@csaybar
Copy link
Author

csaybar commented Feb 7, 2020

from datetime import datetime
import time 

def ee_monitoring(ee_task):
  while ee_task.active():
    print('Sondeo de la tarea (id: {}).'.format(ee_task.id))
    time.sleep(5)    
    
def rusle(roi, prefix, folder, scale):
  """ Estima la Erosion mediante RUSLE
  Args:
    roi (ee.Geometry): Ambito de estudio
    prefix: Palabra que se agregara al inicio de cada Imagen a descargar
    folder: Folder en Google Drive donde se exportara los resultados
    scale: Escala de trabajo del proyecto
  """
  #-----------
  # R factor
  #-----------

  clim_rainmap = ee.Image("OpenLandMap/CLM/CLM_PRECIPITATION_SM2RAIN_M/v01").clip(roi)
  year = clim_rainmap.reduce(ee.Reducer.sum())
  R_monthly = ee.Image(10).pow(ee.Image(1.5).multiply(clim_rainmap.pow(2).divide(year).log10().subtract(-0.08188))).multiply(1.735)
  factorR = R_monthly.reduce(ee.Reducer.sum()).rename('factorR')
  
  #-----------
  # K factor
  #-----------

  # Cargamos toda la informacion necesaria para estimar el factor K
  sand = ee.Image("OpenLandMap/SOL/SOL_CLAY-WFRACTION_USDA-3A1A1A_M/v02").select('b0').clip(roi)
  silt = ee.Image('users/aschwantes/SLTPPT_I').divide(100).clip(roi)
  clay = ee.Image("OpenLandMap/SOL/SOL_SAND-WFRACTION_USDA-3A1A1A_M/v02").select('b0').clip(roi)
  morg = ee.Image("OpenLandMap/SOL/SOL_ORGANIC-CARBON_USDA-6A1C_M/v02").select('b0').multiply(0.58).clip(roi)
  sn1 = sand.expression('1 - b0 / 100', {'b0': sand})
  orgcar = ee.Image("OpenLandMap/SOL/SOL_ORGANIC-CARBON_USDA-6A1C_M/v02").select('b0').clip(roi)
  #Juntando todas las imagenes en una sola
  soil = ee.Image([sand, silt, clay, morg, sn1, orgcar]).rename(['sand', 'silt', 'clay', 'morg', 'sn1', 'orgcar'] )
  factorK = soil.expression(
    '(0.2 + 0.3 * exp(-0.0256 * SAND * (1 - (SILT / 100)))) * (1 - (0.25 * CLAY / (CLAY + exp(3.72 - 2.95 * CLAY)))) * (1 - (0.7 * SN1 / (SN1 + exp(-5.51 + 22.9 * SN1))))',
    {
      'SAND': soil.select('sand'),
      'SILT': soil.select('silt'),
      'CLAY': soil.select('clay'),
      'MORG': soil.select('morg'),
      'SN1':  soil.select('sn1'),
      'CORG': soil.select('orgcar')
    }).rename('factorK')
  
  #-----------
  # LS factor
  #-----------

  facc = ee.Image("WWF/HydroSHEDS/15ACC").clip(roi)
  dem = ee.Image("WWF/HydroSHEDS/03CONDEM").clip(roi)
  slope = ee.Terrain.slope(dem)

  ls_factors = ee.Image([facc, slope]).rename(['facc','slope'])

  factorLS = ls_factors.expression(
    '(FACC*270/22.13)**0.4*(SLOPE/0.0896)**1.3',
    {
      'FACC': ls_factors.select('facc'),
      'SLOPE': ls_factors.select('slope')     
    }).rename('factorLS')
  
  #-----------
  # C factor
  #-----------
  ndvi_median = ee.ImageCollection("MODIS/006/MOD13A2").filterBounds(roi).median().multiply(0.0001).select('NDVI').clip(roi)
  factorC = ee.Image(0.805).multiply(ndvi_median).multiply(-1).add(0.431).rename('factorC')

  erosion = factorC.multiply(factorR).multiply(factorLS).multiply(factorK).rename('A')
  erosion_output = ee.Image([erosion,factorC,factorR,factorLS,factorK])

  #-----------
  # Descarga de datos
  #-----------
  task = ee.batch.Export.image.toDrive(
    image=erosion_output,
    description= prefix+'output',
    folder=folder,     
    scale=scale,
    region = roi)  
  task.start()
  print('Descargando los datos de erosion (A)')
  return task

@csaybar
Copy link
Author

csaybar commented Feb 7, 2020

RUSLE_result

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment