diff --git a/planetary-variables/forest-carbon-diligence/aboveground-carbon-density/README.md b/planetary-variables/forest-carbon-diligence/aboveground-carbon-density/README.md new file mode 100644 index 00000000..d5b35e45 --- /dev/null +++ b/planetary-variables/forest-carbon-diligence/aboveground-carbon-density/README.md @@ -0,0 +1,39 @@ +--- +title: Aboveground Carbon Density, Forest Carbon Diligence +parent: Forest Carbon Diligence +grand_parent: Planetary Variables +layout: script +permalink: /forest-carbon-diligence/aboveground-carbon-density/ +nav_exclude: true +scripts: + - [Visualization, script.js] + - [EO Browser, eob.js] + - [Raw Values, raw.js] +--- + + +## Evaluate and visualize + +As Forest Carbon Diligence is commercial data, brought into Sentinel Hub as Bring Your Own Data, direct EO Browser and Sentinel Playground links are not possible due to the personalized data credentials. + +## General description + +Aboveground carbon density quantifies the expected density of carbon stored in woody biomass across the +landscape, measured in mass per area (megagrams of carbon per hectare). It is not a direct estimate of the total +carbon in that pixel, as the spatial resolution of each pixel is less than one hectare. To estimate total carbon in a +pixel, users should normalize these values to account for the size of each pixel, or average the density values to 1 +hectare in an equal area projection. + +The data layer has four bands: + - **Aboveground Carbon Density** quantifies the density of carbon stored in woody vegetation, +primarily trees and shrubs. Grassland, herbaceous, and soil carbon stocks are not quantified. + - **Lower prediction bound (5th percentile)** of the 90% prediction interval for model predictions at each pixel. + - **Upper prediction bound (95th percentile)** of the 90% prediction interval for model predictions at each pixel. + - **Quality Assurance Flags** describing the expected quality of satellite data measurements, and +whether any temporal gap-filling was applied. + +## Description of representative images + +Aboveground Carbon Density in 2022 near Apui, Brazil. + +![Aboveground Carbon Density Example](fig/abovegroundcarbon.jpg) \ No newline at end of file diff --git a/planetary-variables/forest-carbon-diligence/aboveground-carbon-density/eob.js b/planetary-variables/forest-carbon-diligence/aboveground-carbon-density/eob.js new file mode 100644 index 00000000..a0015098 --- /dev/null +++ b/planetary-variables/forest-carbon-diligence/aboveground-carbon-density/eob.js @@ -0,0 +1,55 @@ +//VERSION=3 +const defaultVis = true +const max = 175 +const min = 0 + +function setup() { + return { + input: ["ACD", "dataMask"], + output: [ + { id: "default", bands: 4 }, + { id: "index", bands: 1, sampleType: "INT16" }, + { id: "eobrowserStats", bands: 1, sampleType: "FLOAT32" }, + { id: "dataMask", bands: 1 } + ] + }; +} + +function updateMap(max, min) { + const numIntervals = map.length + const intervalLength = (max - min) / (numIntervals - 1); + for (let i = 0; i < numIntervals; i++) { + map[i][0] = max - intervalLength * i + } +} + +const map = [ + [175, 0xE5DD26], + [155, 0xCED62F], + [140, 0x9EC54A], + [125, 0x63B16E], + [110, 0x38A183], + [95, 0x1B8583], + [80, 0x1E8589], + [65, 0x206378], + [50, 0x2E4C67], + [35, 0x2A3F62], + [20, 0x2D1A4E], + [5, 0x2E164C], + [0, 0x360245], +]; + +if (!defaultVis) updateMap(max, min); +const visualizer = new ColorRampVisualizer(map); + +function evaluatePixel(sample) { + let val = sample.ACD; + let imgVals = visualizer.process(val) + + return { + default: imgVals.concat(sample.dataMask), + index: [val], + eobrowserStats: [val], + dataMask: [sample.dataMask] + }; +} diff --git a/planetary-variables/forest-carbon-diligence/aboveground-carbon-density/fig/abovegroundcarbon.jpg b/planetary-variables/forest-carbon-diligence/aboveground-carbon-density/fig/abovegroundcarbon.jpg new file mode 100644 index 00000000..ad843f86 Binary files /dev/null and b/planetary-variables/forest-carbon-diligence/aboveground-carbon-density/fig/abovegroundcarbon.jpg differ diff --git a/planetary-variables/forest-carbon-diligence/aboveground-carbon-density/raw.js b/planetary-variables/forest-carbon-diligence/aboveground-carbon-density/raw.js new file mode 100644 index 00000000..1bc4b868 --- /dev/null +++ b/planetary-variables/forest-carbon-diligence/aboveground-carbon-density/raw.js @@ -0,0 +1,11 @@ +//VERSION=3 +function setup() { + return { + input: ["ACD"], + output: { bands: 1, sampleType: "INT16" }, + }; +} + +function evaluatePixel(sample) { + return [sample.ACD] +} diff --git a/planetary-variables/forest-carbon-diligence/aboveground-carbon-density/script.js b/planetary-variables/forest-carbon-diligence/aboveground-carbon-density/script.js new file mode 100644 index 00000000..7815610a --- /dev/null +++ b/planetary-variables/forest-carbon-diligence/aboveground-carbon-density/script.js @@ -0,0 +1,46 @@ +//VERSION=3 + +const defaultVis = true +const max = 175 +const min = 0 + +function setup() { + return { + input: ["ACD", "dataMask"], + output: { bands: 4, sampleType: "AUTO" }, + }; +} + +function updateMap(max, min) { + const numIntervals = map.length + const intervalLength = (max - min) / (numIntervals - 1); + for (let i = 0; i < numIntervals; i++) { + map[i][0] = max - intervalLength * i + } +} + +const map = [ + [175, 0xE5DD26], + [155, 0xCED62F], + [140, 0x9EC54A], + [125, 0x63B16E], + [110, 0x38A183], + [95, 0x1B8583], + [80, 0x1E8589], + [65, 0x206378], + [50, 0x2E4C67], + [35, 0x2A3F62], + [20, 0x2D1A4E], + [5, 0x2E164C], + [0, 0x360245], +]; + +if (!defaultVis) updateMap(max, min); +const visualizer = new ColorRampVisualizer(map); + +function evaluatePixel(sample) { + let val = sample.ACD; + let imgVals = visualizer.process(val) + + return [...imgVals, sample.dataMask] +} diff --git a/planetary-variables/forest-carbon-diligence/canopy-cover/README.md b/planetary-variables/forest-carbon-diligence/canopy-cover/README.md new file mode 100644 index 00000000..d025fac1 --- /dev/null +++ b/planetary-variables/forest-carbon-diligence/canopy-cover/README.md @@ -0,0 +1,36 @@ +--- +title: Canopy Cover, Forest Carbon Diligence +parent: Forest Carbon Diligence +grand_parent: Planetary Variables +layout: script +permalink: /forest-carbon-diligence/canopy-cover/ +nav_exclude: true +scripts: + - [Visualization, script.js] + - [EO Browser, eob.js] + - [Raw Values, raw.js] +--- + + +## Evaluate and visualize + +As Forest Carbon Diligence is commercial data, brought into Sentinel Hub as Bring Your Own Data, direct EO Browser and Sentinel Playground links are not possible due to the personalized data credentials. + +## General description + +Canopy cover quantifies the percentage of area occupied by trees within a +pixel, where a tree is defined as vegetation 5 meters or taller. This metric will be most sensitive to tree clearing +events like timber harvest or deforestation, but is also sensitive to seasonal leaf-on variation and to drought. + +The data layer has four bands: + - **Canopy Cover** quantifies the horizontal area occupied by tree canopies that are > 5m tall. + - **Lower prediction bound (5th percentile)** of the 90% prediction interval for model predictions at each pixel. + - **Upper prediction bound (95th percentile)** of the 90% prediction interval for model predictions at each pixel. + - **Quality Assurance Flags** describing the expected quality of satellite data measurements, and +whether any temporal gap-filling was applied. + +## Description of representative images + +Canopy Cover in 2022 near Apui, Brazil. + +![Canopy Cover Example](fig/canopycover.jpg) \ No newline at end of file diff --git a/planetary-variables/forest-carbon-diligence/canopy-cover/eob.js b/planetary-variables/forest-carbon-diligence/canopy-cover/eob.js new file mode 100644 index 00000000..6f0e6033 --- /dev/null +++ b/planetary-variables/forest-carbon-diligence/canopy-cover/eob.js @@ -0,0 +1,53 @@ +//VERSION=3 +const defaultVis = true +const max = 100 +const min = 0 + +function setup() { + return { + input: ["CC", "dataMask"], + output: [ + { id: "default", bands: 4 }, + { id: "index", bands: 1, sampleType: "UINT8" }, + { id: "eobrowserStats", bands: 1, sampleType: "FLOAT32" }, + { id: "dataMask", bands: 1 } + ] + }; +} + +function updateMap(max, min) { + const numIntervals = map.length + const intervalLength = (max - min) / (numIntervals - 1); + for (let i = 0; i < numIntervals; i++) { + map[i][0] = max - intervalLength * i + } +} + +const map = [ + [100, 0x183D19], + [90, 0x124F24], + [80, 0x0E6327], + [70, 0x246D29], + [60, 0x498418], + [50, 0x669516], + [40, 0x859E25], + [30, 0xA4AB38], + [20, 0xD3C058], + [10, 0xDDD17C], + [0, 0xF0F5D5], +]; + +if (!defaultVis) updateMap(max, min); +const visualizer = new ColorRampVisualizer(map); + +function evaluatePixel(sample) { + let val = sample.CC; + let imgVals = visualizer.process(val) + + return { + default: imgVals.concat(sample.dataMask), + index: [val], + eobrowserStats: [val], + dataMask: [sample.dataMask] + }; +} diff --git a/planetary-variables/forest-carbon-diligence/canopy-cover/fig/canopycover.jpg b/planetary-variables/forest-carbon-diligence/canopy-cover/fig/canopycover.jpg new file mode 100644 index 00000000..5b35f0d6 Binary files /dev/null and b/planetary-variables/forest-carbon-diligence/canopy-cover/fig/canopycover.jpg differ diff --git a/planetary-variables/forest-carbon-diligence/canopy-cover/raw.js b/planetary-variables/forest-carbon-diligence/canopy-cover/raw.js new file mode 100644 index 00000000..dd0b2988 --- /dev/null +++ b/planetary-variables/forest-carbon-diligence/canopy-cover/raw.js @@ -0,0 +1,11 @@ +//VERSION=3 +function setup() { + return { + input: ["CC"], + output: { bands: 1, sampleType: "UINT8" }, + }; +} + +function evaluatePixel(sample) { + return [sample.CC] +} diff --git a/planetary-variables/forest-carbon-diligence/canopy-cover/script.js b/planetary-variables/forest-carbon-diligence/canopy-cover/script.js new file mode 100644 index 00000000..01d6b976 --- /dev/null +++ b/planetary-variables/forest-carbon-diligence/canopy-cover/script.js @@ -0,0 +1,43 @@ +//VERSION=3 +const defaultVis = true +const max = 100 +const min = 0 + +function setup() { + return { + input: ["CC", "dataMask"], + output: { bands: 4, sampleTYPE: "AUTO" }, + }; +} + +function updateMap(max, min) { + const numIntervals = map.length + const intervalLength = (max - min) / (numIntervals - 1); + for (let i = 0; i < numIntervals; i++) { + map[i][0] = max - intervalLength * i + } +} + +const map = [ + [100, 0x183D19], + [90, 0x124F24], + [80, 0x0E6327], + [70, 0x246D29], + [60, 0x498418], + [50, 0x669516], + [40, 0x859E25], + [30, 0xA4AB38], + [20, 0xD3C058], + [10, 0xDDD17C], + [0, 0xF0F5D5], +]; + +if (!defaultVis) updateMap(max, min); +const visualizer = new ColorRampVisualizer(map); + +function evaluatePixel(sample) { + let val = sample.CC; + let imgVals = visualizer.process(val) + + return [...imgVals, sample.dataMask] +} diff --git a/planetary-variables/forest-carbon-diligence/canopy-height/README.md b/planetary-variables/forest-carbon-diligence/canopy-height/README.md new file mode 100644 index 00000000..7e84de37 --- /dev/null +++ b/planetary-variables/forest-carbon-diligence/canopy-height/README.md @@ -0,0 +1,36 @@ +--- +title: Canopy Height, Forest Carbon Diligence +parent: Forest Carbon Diligence +grand_parent: Planetary Variables +layout: script +permalink: /forest-carbon-diligence/canopy-height/ +nav_exclude: true +scripts: + - [Visualization, script.js] + - [EO Browser, eob.js] + - [Raw Values, raw.js] +--- + + +## Evaluate and visualize + +As Forest Carbon Diligence is commercial data, brought into Sentinel Hub as Bring Your Own Data, direct EO Browser and Sentinel Playground links are not possible due to the personalized data credentials. + +## General description + +Canopy height quantifies the average stand height of trees within each pixel. Because this is a spatial average +over a moderate resolution, the modeled height values are shorter than the tallest individual tree within a pixel. + +The data layer has four bands: + - **Canopy Height** quantifies the average height of all vegetation in that pixel. + - **Lower prediction bound (5th percentile)** of the 90% prediction interval for model predictions at each pixel. + - **Upper prediction bound (95th percentile)** of the 90% prediction interval for model predictions at each pixel. + - **Quality Assurance Flags** describing the expected quality of satellite data measurements, and +whether any temporal gap-filling was applied. + + +## Description of representative images + +Canopy Height in 2022 near Apui, Brazil. + +![Canopy Height Example](fig/canopyheight.jpg) \ No newline at end of file diff --git a/planetary-variables/forest-carbon-diligence/canopy-height/eob.js b/planetary-variables/forest-carbon-diligence/canopy-height/eob.js new file mode 100644 index 00000000..359b9067 --- /dev/null +++ b/planetary-variables/forest-carbon-diligence/canopy-height/eob.js @@ -0,0 +1,46 @@ +//VERSION=3 +const defaultVis = true +const max = 30 +const min = 0 + +function setup() { + return { + input: ["CH", "dataMask"], + output: [ + { id: "default", bands: 4 }, + { id: "index", bands: 1, sampleType: "UINT8" }, + { id: "eobrowserStats", bands: 1, sampleType: "FLOAT32" }, + { id: "dataMask", bands: 1 } + ] + }; +} + +function updateMap(max, min) { + const numIntervals = map.length + const intervalLength = (max - min) / (numIntervals - 1); + for (let i = 0; i < numIntervals; i++) { + map[i][0] = max - intervalLength * i + } +} + +const map = [ + [30, 0x345E03], + [20, 0x6DA20C], + [10, 0xBACE6E], + [0, 0xF0F5D5], +]; + +if (!defaultVis) updateMap(max, min); +const visualizer = new ColorRampVisualizer(map); + +function evaluatePixel(sample) { + let val = sample.CH; + let imgVals = visualizer.process(val) + + return { + default: imgVals.concat(sample.dataMask), + index: [val], + eobrowserStats: [val], + dataMask: [sample.dataMask] + }; +} diff --git a/planetary-variables/forest-carbon-diligence/canopy-height/fig/canopyheight.jpg b/planetary-variables/forest-carbon-diligence/canopy-height/fig/canopyheight.jpg new file mode 100644 index 00000000..309ccd06 Binary files /dev/null and b/planetary-variables/forest-carbon-diligence/canopy-height/fig/canopyheight.jpg differ diff --git a/planetary-variables/forest-carbon-diligence/canopy-height/raw.js b/planetary-variables/forest-carbon-diligence/canopy-height/raw.js new file mode 100644 index 00000000..45f864fa --- /dev/null +++ b/planetary-variables/forest-carbon-diligence/canopy-height/raw.js @@ -0,0 +1,11 @@ +//VERSION=3 +function setup() { + return { + input: ["CH"], + output: { bands: 1, sampleType: "UINT8" }, + }; +} + +function evaluatePixel(sample) { + return [sample.CH] +} diff --git a/planetary-variables/forest-carbon-diligence/canopy-height/script.js b/planetary-variables/forest-carbon-diligence/canopy-height/script.js new file mode 100644 index 00000000..4a101636 --- /dev/null +++ b/planetary-variables/forest-carbon-diligence/canopy-height/script.js @@ -0,0 +1,36 @@ +//VERSION=3 +const defaultVis = true +const max = 0 +const min = 30 + +function setup() { + return { + input: ["CH", "dataMask"], + output: { bands: 4, sampleTYPE: "AUTO" }, + }; +} + +function updateMap(max, min) { + const numIntervals = map.length + const intervalLength = (max - min) / (numIntervals - 1); + for (let i = 0; i < numIntervals; i++) { + map[i][0] = max - intervalLength * i + } +} + +const map = [ + [30, 0x345E03], + [20, 0x6DA20C], + [10, 0xBACE6E], + [0, 0xF0F5D5], +]; + +if (!defaultVis) updateMap(max, min); +const visualizer = new ColorRampVisualizer(map); + +function evaluatePixel(sample) { + let val = sample.CH; + let imgVals = visualizer.process(val) + + return [...imgVals, sample.dataMask] +} diff --git a/planetary-variables/forest-carbon-diligence/forest-carbon-diligence.md b/planetary-variables/forest-carbon-diligence/forest-carbon-diligence.md new file mode 100644 index 00000000..ae4a72ed --- /dev/null +++ b/planetary-variables/forest-carbon-diligence/forest-carbon-diligence.md @@ -0,0 +1,17 @@ +--- +layout: default +title: Forest Carbon Diligence +nav_order: 1 +parent: Planetary Variables +permalink: /planetary-variables/forest-carbon-diligence/ +--- + +# Forest Carbon Diligence +The Forest Carbon Diligence product includes global maps of aboveground carbon density, canopy height, and +canopy cover, for the year 2013 - 2022 at 30 m resolution (0.00025 degree). These are model-derived products, trained using high quality, laser-guided reference data. + +- [Aboveground Carbon Density](/forest-carbon-diligence/aboveground-carbon-density) +- [Canopy Height](/forest-carbon-diligence/canopy-height) +- [Canopy Cover](/forest-carbon-diligence/canopy-cover) + + diff --git a/planetary-variables/planetary-variables.md b/planetary-variables/planetary-variables.md new file mode 100644 index 00000000..10eb631c --- /dev/null +++ b/planetary-variables/planetary-variables.md @@ -0,0 +1,9 @@ +--- +layout: default +title: Planetary Variables +nav_order: 7 +has_children: true +permalink: /planetary-variables/ +--- + +# Planetary Variables