Hi guys,
I am trying to use a custom script in statistical api. It seems the aggregation is taking the right dates but I got "NaN"in the most dates. Could you help me to figure out what I am doing wrong?
It should give me the s2 ndvi if no clouds and s1 ndvi if so.
//VERSION=3
function setup() {
return {
input: [
// Sepcify input bands using the id of datasource set in the payload under data parameter
{datasource: 's2', bands: ['B04', 'B08', 'SCL', 'dataMask']},
{datasource: 's1', bands: ['VV', 'VH', 'dataMask']}
],
output: [
{
id: 'ndvi',
bands: 1
},
{
id: 'dataMask',
bands: 1
}],
mosaicking: 'SIMPLE'
};
}
function evaluatePixel(samples) {
var s1 = samples.s1[0]
var s2 = samples.s2[0]
// Use the S2-L2A classification to identify clouds
if ([7, 8, 9, 10].includes(s2.SCL)) {
// If clouds are present use S1 NDVI
let s1_ndvi = calc_s1_ndvi(s1.VV, s1.VH) // Calculate S1 NDVI
let validNDVIMask = 1;
if (!isFinite(s1_ndvi)) {
validNDVIMask = 0;
}
return {
ndvi: [s1_ndvi], dataMask: [samples.s2[0].dataMask * samples.s1[0].dataMask * validNDVIMask]
}
} else {
// Otherwise use s2 NDVI
let ndvi = index(s2.B08, s2.B04) // Calculate S2 NDVI
let validNDVIMask = 1;
if (!isFinite(ndvi)) {
validNDVIMask = 0;
}
return {
ndvi: [ndvi], dataMask: [samples.s2[0].dataMask * samples.s1[0].dataMask * validNDVIMask]
}
}
}
function calc_s1_ndvi(sigmaVV, sigmaVH) {
// Convert sigma0 to Decibels
let vh_Db = toDb(sigmaVH)
let vv_Db = toDb(sigmaVV)
// Calculate NRPB (Filgueiras et al. (2019), eq. 4)
let NRPB = (vh_Db - vv_Db) / (vh_Db + vv_Db)
// Calculate NDVI_nc with approach A3 (Filgueiras et al. (2019), eq. 14)
let NDVInc = 2.572 - 0.05047 * vh_Db + 0.176 * vv_Db + 3.422 * NRPB
return NDVInc
}
function toDb(linear) {
// Convert the linear backscatter to DB (Filgueiras et al. (2019), eq. 3)
return 10 * Math.LN10 * linear
}
{
\"input\": {
\"bounds\": {
\"geometry\": {
\"type\": \"Polygon\",
\"coordinates\": [
[
[
-57.51975291377155,-14.205968661454873
],
[
-57.518731982092056,-14.221243309719119
],
[
-57.52433747328446,-14.220981893817928
],
[
-57.52538171878425,-14.205814285762376
],
[
-57.51975291377155,-14.205968661454873
]
]
]
},
\"properties\": {
\"crs\": \"http://www.opengis.net/def/crs/EPSG/0/4326\"
}
},
\"data\": [
{
\"dataFilter\": {
\"mosaickingOrder\": \"leastRecent\"
},
\"id\": \"s2\",
\"type\": \"sentinel-2-l2a\"
},
{
\"dataFilter\": {
\"resolution\": \"HIGH\",
\"acquisitionMode\": \"IW\",
\"polarization\": \"DV\"
},
\"processing\": {
\"backCoeff\": \"GAMMA0_TERRAIN\",
\"orthorectify\": \"true\"
},
\"id\": \"s1\",
\"type\": \"sentinel-1-grd\"
}
]
},
\"aggregation\": {
\"timeRange\": {
\"from\": \"2022-12-21T00:00:00Z\",
\"to\": \"2023-01-23T23:59:59Z\"
},
\"aggregationInterval\": {
\"of\": \"P1D\"
},
\"resx\": 0.00009,
\"resy\": 0.00009,
\"evalscript\": \"$evalscript\"
},
\"calculations\": {
\"default\": {}
}
}
What I receive:
{
"data": [
{
"interval": {
"from": "2022-12-21T00:00:00Z",
"to": "2022-12-23T00:00:00Z"
},
"outputs": {
"ndvi": {
"bands": {
"B0": {
"stats": {
"min": "NaN",
"max": "NaN",
"mean": "NaN",
"stDev": "NaN",
"sampleCount": 12654,
"noDataCount": 12654
}
}
}
}
}
},
{
"interval": {
"from": "2022-12-25T00:00:00Z",
"to": "2022-12-27T00:00:00Z"
},
"outputs": {
"ndvi": {
"bands": {
"B0": {
"stats": {
"min": -0.38824281096458435,
"max": 4.252981185913086,
"mean": 1.292178402528126,
"stDev": 0.5258252083396445,
"sampleCount": 12654,
"noDataCount": 1911
}
}
}
}
}
},
{
"interval": {
"from": "2022-12-27T00:00:00Z",
"to": "2022-12-29T00:00:00Z"
},
"outputs": {
"ndvi": {
"bands": {
"B0": {
"stats": {
"min": "NaN",
"max": "NaN",
"mean": "NaN",
"stDev": "NaN",
"sampleCount": 12654,
"noDataCount": 12654
}
}
}
}
}
},
{
"interval": {
"from": "2022-12-29T00:00:00Z",
"to": "2022-12-31T00:00:00Z"
},
"outputs": {
"ndvi": {
"bands": {
"B0": {
"stats": {
"min": "NaN",
"max": "NaN",
"mean": "NaN",
"stDev": "NaN",
"sampleCount": 12654,
"noDataCount": 12654
}
}
}
}
}
},
{
"interval": {
"from": "2022-12-31T00:00:00Z",
"to": "2023-01-02T00:00:00Z"
},
"outputs": {
"ndvi": {
"bands": {
"B0": {
"stats": {
"min": "NaN",
"max": "NaN",
"mean": "NaN",
"stDev": "NaN",
"sampleCount": 12654,
"noDataCount": 12654
}
}
}
}
}
},
{
"interval": {
"from": "2023-01-04T00:00:00Z",
"to": "2023-01-06T00:00:00Z"
},
"outputs": {
"ndvi": {
"bands": {
"B0": {
"stats": {
"min": "NaN",
"max": "NaN",
"mean": "NaN",
"stDev": "NaN",
"sampleCount": 12654,
"noDataCount": 12654
}
}
}
}
}
},
{
"interval": {
"from": "2023-01-06T00:00:00Z",
"to": "2023-01-08T00:00:00Z"
},
"outputs": {
"ndvi": {
"bands": {
"B0": {
"stats": {
"min": 0.43648046255111694,
"max": 0.8741295337677002,
"mean": 0.7873053286125081,
"stDev": 0.06790011249613606,
"sampleCount": 12654,
"noDataCount": 1911
}
}
}
}
}
},
{
"interval": {
"from": "2023-01-08T00:00:00Z",
"to": "2023-01-10T00:00:00Z"
},
"outputs": {
"ndvi": {
"bands": {
"B0": {
"stats": {
"min": "NaN",
"max": "NaN",
"mean": "NaN",
"stDev": "NaN",
"sampleCount": 12654,
"noDataCount": 12654
}
}
}
}
}
},
{
"interval": {
"from": "2023-01-10T00:00:00Z",
"to": "2023-01-12T00:00:00Z"
},
"outputs": {
"ndvi": {
"bands": {
"B0": {
"stats": {
"min": "NaN",
"max": "NaN",
"mean": "NaN",
"stDev": "NaN",
"sampleCount": 12654,
"noDataCount": 12654
}
}
}
}
}
},
{
"interval": {
"from": "2023-01-14T00:00:00Z",
"to": "2023-01-16T00:00:00Z"
},
"outputs": {
"ndvi": {
"bands": {
"B0": {
"stats": {
"min": "NaN",
"max": "NaN",
"mean": "NaN",
"stDev": "NaN",
"sampleCount": 12654,
"noDataCount": 12654
}
}
}
}
}
},
{
"interval": {
"from": "2023-01-16T00:00:00Z",
"to": "2023-01-18T00:00:00Z"
},
"outputs": {
"ndvi": {
"bands": {
"B0": {
"stats": {
"min": "NaN",
"max": "NaN",
"mean": "NaN",
"stDev": "NaN",
"sampleCount": 12654,
"noDataCount": 12654
}
}
}
}
}
},
{
"interval": {
"from": "2023-01-18T00:00:00Z",
"to": "2023-01-20T00:00:00Z"
},
"outputs": {
"ndvi": {
"bands": {
"B0": {
"stats": {
"min": -0.6149955987930298,
"max": 4.806635856628418,
"mean": 1.3176422709378766,
"stDev": 0.5970834167301392,
"sampleCount": 12654,
"noDataCount": 1911
}
}
}
}
}
},
{
"interval": {
"from": "2023-01-20T00:00:00Z",
"to": "2023-01-22T00:00:00Z"
},
"outputs": {
"ndvi": {
"bands": {
"B0": {
"stats": {
"min": "NaN",
"max": "NaN",
"mean": "NaN",
"stDev": "NaN",
"sampleCount": 12654,
"noDataCount": 12654
}
}
}
}
}
}
],
"status": "OK"
}
Thanks a lot!