samapriya / awesome-gee-community-datasets

Community Datasets added by users and made available for use at large
https://gee-community-catalog.org/
Creative Commons Attribution 4.0 International
755 stars 120 forks source link

Global Leaf trait estimates for land modelling #86

Closed almoma153 closed 1 year ago

almoma153 commented 1 year ago

Global Leaf trait estimates for land modelling

At the organismal level, plant traits, which are measurable morphological, anatomical, physiological, and phenological characteristics, can influence individuals' establishment, fitness, and survival. These measurable characteristics provide essential information to explain long-term (e.g., annual) patterns underlying carbon, water, energy fluxes, and biodiversity globally. We provide the only global remotely sensed-based maps of leaf traits at 1km spatial resolution. In particular, we present global maps of specific leaf area (SLA), leaf dry matter content (LDMC), leaf nitrogen content per dry mass (LNC), and leaf phosphorus content per dry mass (LPC). The methodology combines MODIS and Landsat data, climatological data (Worldclim), the largest traits database (TRY), and machine learning algorithms. The following figure shows a flowchart of the methodology for providing our traits estimates. The numbered boxes indicate the three main components of the methods: (1) gap filling the traits database; (2) calculating the community weighted mean (CWM) trait values at the canopy level for MODIS pixels with nearby trait observations; and (3) spatialization of CWMs to global trait maps at 500 m resolution.

The full information about the methodology can be found here. The users can also explore the dataset in GEE with the following app.

The data is also available at two spatial resolutions, 3km and 1km. It can be downloaded from these links 1, 2.

Regarding some negative values you can find in the data, we also provide some information: -2 corresponds with water areas, -1 corresponds with cropland areas, -100 is unprocessed due to problems with the regression algorithm, and 0 with non-vegetated unprocessed areas, like bare soil, urban, and permanent ice.

In addition to the trait estimates (e.g., SLA_1km_v3), we also include additional data layers with the estimated predictive standard error maps obtained from the RF models (e.g., SLA_sd_1km_v3). We computed this ancillary information layer for model evaluation and as an approximation of model uncertainty.

Citation

Moreno-Martínez, Á., Camps-Valls, G., Kattge, J., Robinson, N., Reichstein, M., Bodegom, P. V., Kramer, K., Cornelissen, J. H. C., Reich, P. B., Bahn, M., Niinemets, Ü., Peñuelas, J., Craine, J., Cerabolini, B., Minden, V., Laughlin, D. C., Sack, L., Allred, B., Baraloto, C., Byun, C., Soudzilovskaia, N. A., Running, S. W. (2018). A methodology to derive global maps of leaf traits using remote sensing and climate data. Remote Sensing of Environment, 218, 69-88. doi

Earth Engine Snippet to import and visualize data

///////////////      SLA (mm2/g)            ////////////
var SLA=ee.Image('projects/ee-almoma153/assets/Global_leaf_traits_v3/SLA_1km_v3').select([0],['SLA']);
///////////////      LNC (mg/g)            ////////////
var LNC=ee.Image('projects/ee-almoma153/assets/Global_leaf_traits_v3/LNC_1km_v3').select([0],['LNC']);
///////////////      LPC (mg/g)            ////////////
var LPC=ee.Image('projects/ee-almoma153/assets/Global_leaf_traits_v3/LPC_1km_v3').select([0],['LPC']);
///////////////      Leaf dry matter content LDMC (g/g)            ////////////
var LDMC=ee.Image('projects/ee-almoma153/assets/Global_leaf_traits_v3/LDMC_1km_v3').select([0],['LDMC']);

//let's mask unprocessed data (Positive values correspond with natural vegetated areas)
SLA = SLA.mask(SLA.gt(0));
LNC = LNC.mask(LNC.gt(0));
LPC = LPC.mask(LPC.gt(0));
LDMC = LDMC.mask(LDMC.gt(0));

var vis_vi = {min:7 , max: 22, palette: ["ffffd9", "edf8b1", "c7e9b4", "7fcdbb", "41b6c4", "1d91c0", "225ea8", "253494", "081d58"]};
Map.addLayer(SLA, vis_vi,  'SLA (mm2 / g)',true)

image

If you have any further questions or doubts, please don't hesitate to contact us.

Information about the updated version:

Version 3.0 of the processing chain prevents extrapolation and uses an updated categorical trait table. To prevent extrapolations, this updated version of the processing chain uses the random forest algorithm (RF) with surrogates for the estimation of trait values. RF with surrogates allows obtaining an ensemble of models inside the convex hull of the input data for the predictions. Additionally, the use of an updated and more extensive categorical trait table allowed increasing the amount of training samples to produce the maps.

License

This work is licensed under a Creative Commons Attribution 4.0 International License. You are free to copy and redistribute the material in any medium or format, and to transform and build upon the material for any purpose, even commercially. You must give appropriate credit, provide a link to the license, and indicate if changes were made.

Curated by: Alvaro Moreno-Martínez, Gustau Camps-Valls, Jens Kattge, Nathaniel Robinson, Markus Reichstein, Peter van Bodegom, Josep Peñuelas, Brady Allred, Steve W. Running

Keywords: Plant traits, Machine learning, Remote sensing, Plant ecology, Climate, MODIS, Landsat

Last updated: Nov 2021

samapriya commented 1 year ago

Seems these assets are not shared can you make this publicly readable

almoma153 commented 1 year ago

They have to be shared now. Sorry for that.

samapriya commented 1 year ago

Hi @almoma153 I made a copy of the assets to maintain consistency of the path let me know if these look okay with you or if you would like me to revert to your paths. I will share permissions to the copied assets once we confirm

// SLA (mm2/g)
var SLA=ee.Image('projects/sat-io/open-datasets/GLOBAL-LEAF-TRAITS/SLA_1km_v3').select([0],['SLA']);
var SLA_SD = ee.Image('projects/sat-io/open-datasets/GLOBAL-LEAF-TRAITS/SLA_sd_1km_v3');

// LNC (mg/g) 
var LNC=ee.Image('projects/sat-io/open-datasets/GLOBAL-LEAF-TRAITS/LNC_1km_v3').select([0],['LNC']);
var LNC_SD = ee.Image('projects/sat-io/open-datasets/GLOBAL-LEAF-TRAITS/LNC_sd_1km_v3');

// LPC (mg/g)
var LPC=ee.Image('projects/sat-io/open-datasets/GLOBAL-LEAF-TRAITS/LPC_1km_v3').select([0],['LPC']);
var LPC_SD=ee.Image('projects/sat-io/open-datasets/GLOBAL-LEAF-TRAITS/LPC_sd_1km_v3')

// Leaf dry matter content LDMC (g/g)
var LDMC=ee.Image('projects/sat-io/open-datasets/GLOBAL-LEAF-TRAITS/LDMC_1km_v3').select([0],['LDMC']);
var LDMC_SD = ee.Image('projects/sat-io/open-datasets/GLOBAL-LEAF-TRAITS/LDMC_sd_1km_v3')

//let's mask unprocessed data (Positive values correspond with natural vegetated areas)
SLA = SLA.mask(SLA.gt(0));
LNC = LNC.mask(LNC.gt(0));
LPC = LPC.mask(LPC.gt(0));
LDMC = LDMC.mask(LDMC.gt(0));

var vis_vi = {min:7 , max: 22, palette: ["ffffd9", "edf8b1", "c7e9b4", "7fcdbb", "41b6c4", "1d91c0", "225ea8", "253494", "081d58"]};
Map.addLayer(SLA, vis_vi,  'SLA (mm2 / g)',true)
almoma153 commented 1 year ago

Thank you so much, Samapriya. It looks perfect to me. I have just added the image band name for the standard deviations for consistency.

// SLA (mm2/g)
var SLA=ee.Image('projects/sat-io/open-datasets/GLOBAL-LEAF-TRAITS/SLA_1km_v3').select([0],['SLA']);
var SLA_SD = ee.Image('projects/sat-io/open-datasets/GLOBAL-LEAF-TRAITS/SLA_sd_1km_v3').select([0],['SLA_sd']);

// LNC (mg/g) 
var LNC=ee.Image('projects/sat-io/open-datasets/GLOBAL-LEAF-TRAITS/LNC_1km_v3').select([0],['LNC']);
var LNC_SD = ee.Image('projects/sat-io/open-datasets/GLOBAL-LEAF-TRAITS/LNC_sd_1km_v3').select([0],['LNC_sd']);

// LPC (mg/g)
var LPC=ee.Image('projects/sat-io/open-datasets/GLOBAL-LEAF-TRAITS/LPC_1km_v3').select([0],['LPC']);
var LPC_SD=ee.Image('projects/sat-io/open-datasets/GLOBAL-LEAF-TRAITS/LPC_sd_1km_v3').select([0],['LPC_sd']);

// Leaf dry matter content LDMC (g/g)
var LDMC=ee.Image('projects/sat-io/open-datasets/GLOBAL-LEAF-TRAITS/LDMC_1km_v3').select([0],['LDMC']);
var LDMC_SD = ee.Image('projects/sat-io/open-datasets/GLOBAL-LEAF-TRAITS/LDMC_sd_1km_v3').select([0],['LDMC_sd']);

//let's mask unprocessed data (Positive values correspond with natural vegetated areas)
SLA = SLA.mask(SLA.gt(0));
LNC = LNC.mask(LNC.gt(0));
LPC = LPC.mask(LPC.gt(0));
LDMC = LDMC.mask(LDMC.gt(0));

var vis_vi = {min:7 , max: 22, palette: ["ffffd9", "edf8b1", "c7e9b4", "7fcdbb", "41b6c4", "1d91c0", "225ea8", "253494", "081d58"]};
Map.addLayer(SLA, vis_vi,  'SLA (mm2 / g)',true)
samapriya commented 1 year ago

This has now been completed, thank you for contributing https://gee-community-catalog.org/projects/ltrait/

almoma153 commented 1 year ago

Thank you so much!!!