I’m using statistical API via Python and I can’t figure out why the below code does not work. I get:
error’: {‘type’: ‘BAD_REQUEST’,
‘message’: ‘Failed to evaluate script!\nundefined:1134: evaluatePixel must return an object containing arrays\n throw “evaluatePixel must return an object containing arrays”;\n ^\n’}},
The code is:
evalscript =‘’’
//VERSION=3
function setup() {
return {
input: “B01”,“B02”,“B03”,“B04”,“B05”,“B06”,“B07”,“B08”,“B8A”,“B09”,“B11”,“B12”,“SCL”,“dataMask”],
output: ,
{id:“coastal_blue”,bands:1,sampleType:“UINT16”},
{id:“blue”,bands:1,sampleType:“UINT16”},
{id:“green”,bands:1,sampleType:“UINT16”},
{id:“red”,bands:1,sampleType:“UINT16”},
{id:“redegde1”,bands:1,sampleType:“UINT16”},
{id:“redegde2”,bands:1,sampleType:“UINT16”},
{id:“redegde3”,bands:1,sampleType:“UINT16”},
{id:“NIR_narrow”,bands:1,sampleType:“UINT16”},
{id:“NIR”,bands:1,sampleType:“UINT16”},
{id:“SWIR_Cirrus”,bands:1,sampleType:“UINT16”},
{id:“SWIR1”,bands:1,sampleType:“UINT16”},
{id:“SWIR2”,bands:1,sampleType:“UINT16”},
{id:“cloud_cover”,bands:1,sampleType: “UINT8”},
{id: “dataMask”,bands:1,sampleType:“UINT8”}
],
};
}
function cloud_detect(samples) {
var scl = samples.SCL;
if (scl === 1) { // SC_SATURATED_DEFECTIVE
return 1;
} else if (scl === 3) { // SC_CLOUD_SHADOW
return 1;
} else if (scl === 6) { // SC_WATER
return 1;
} else if (scl === 7) { // SC_UNCLASSIFIED
return 1;
} else if (scl === { // SC_CLOUD_MEDIUM_PROBA
return 1;
} else if (scl === 9) { // SC_CLOUD_HIGH_PROBA
return 1;
} else if (scl === 10) { // SC_THIN_CIRRUS
return 1;
} else if (scl === 11) { // SC_SNOW_ICE
return 1;
} else {
return 0;
}
}
function evaluatePixel(sample) {
var cloud_cover = cloud_detect(sample)
return {
coastal_blue: l10000sample.B01],
blue: <10000sample.B02],
green: t10000sample.B03],
red: c10000sample.B04],
rededge1: n10000sample.B05],
rededge2: e10000sample.B06],
rededge3: 210000sample.B07],
NIR_narrow: r10000sample.B8A],
NIR: r10000sample.B08],
SWIR_Cirrus: >10000sample.B09],
SWIR1: r10000sample.B11],
SWIR2: ,10000sample.B12],
cloud_cover:
dataMask: 8sample.dataMask]
}
}
‘’’
stats_request = {
“input”: {
“bounds”: {“geometry”: poly,“properties”: {“crs”: f"http://www.opengis.net/def/crs/EPSG/0/{EPSG_code}“}},
“data”: :{“type”: “sentinel-2-l2a”,“dataFilter”: {“mosaickingOrder”: “leastRecent”}}]
},
“aggregation”:{
“timeRange”:{“from”: f”{sd}T00:00:00Z",“to”: f"{ed}T00:00:00Z"},“aggregationInterval”:{“of”: “P1D”},
“evalscript”: evalscript,“resx”: res,“resy”: res
}
}
headers = {‘Content-Type’: ‘application/json’,‘Accept’: ‘application/json’}
url = “https://services.sentinel-hub.com/api/v1/statistics”
response = oauth.request(“POST”, url=url , headers=headers, json=stats_request)
response.json()
These are the parameters:
poly = {‘type’: ‘Polygon’,
‘coordinates’: rvi543524.2066699625, 4913672.475454833],
<543301.7360189715, 4914182.25130983],
543585.5990637002, 4914305.715457292],
r543636.2003406108, 4914324.679479339],
s543636.5445322505, 4914324.827200528],
<543662.5099398704, 4914337.441878019],
543662.6089071627, 4914337.491664552],
4543676.3631063607, 4914344.651227288],
9543678.5419234377, 4914345.355938862],
2543902.1623488602, 4913826.227753871],
3543524.2066699625, 4913672.475454833]]]}
res = 10
sd = ‘2022-06-01’
ed = ‘2022-08-01’
EPSG_code = 32635
The forum website/app does not render the code properly, and I can’t upload a TXT file of the script, so here is a screenshot, hope it is clearer