Hi there,
Im trying to download all scenes ( only one band) from all tiles in a given time range using Process API’s updateOutput function.
But getting 400 error with text: {“error”:{“status”:400,“reason”:“Bad Request”,“message”:“Script must return an array.”,“code”:“RENDERER_EXCEPTION”}}
This is my code and eval script. I have used proper credentials.
################
## Process API Sentinel Hub Eval Script
################
import tarfile, json
headers_request = {
"Authorization" : "Bearer %s" %token['access_token']
}
url = 'https://services.sentinel-hub.com'
evalscript1 = """
//VERSION=3
function setup() {
return {
input: [{
bands: ["B02"],
}
],
output: [{
id: "my_output",
bands: 1,
sampleType: SampleType.UINT16
}
],
mosaicking: Mosaicking.TILES
}
}
function updateOutput(output, collection) {
output.my_output.bands = collection.scenes.length
}
function evaluatePixel(samples) {
var n_scenes = samples.length
let band_b02 = new Array(n_scenes)
// Arrange values of band B02 in an array
for (var i = 0; i < n_scenes; i++){
band_b02[i] = samples[i].B02
}
return {
my_output: band_b02
}
}
"""
request = {
"input": {
"bounds": {
"bbox": [-120.75466522455825, 36.90698113780987, -119.47746085616488, 37.925581320606206]
},
"data": [{
"type": "sentinel-2-l2a",
"dataFilter": {
"timeRange": {
"from": "2023-03-07T18:00:02Z",
"to": "2023-04-07T20:54:02Z"
}
}
}]
},
"output": {
"responses": [{
"identifier": "my_output",
"format": {
"type": "image/tiff"
}
}
]
},
"evalscript": evalscript1
}
headers = {
'Content-Type': 'application/json',
'Accept': 'application/x-tar'
}
response = oauth.post(f"{url}/api/v1/process", headers=headers, json = request)
print(f"status code is:{response.status_code}, context: {response.text}")
tar = tarfile.open(fileobj=io.BytesIO(response.content))
# userdata = json.load(tar.extractfile(tar.getmember('userdata.json')))
# userdata
output_dir = 'content/testdata'
# Extract the contents of the tar file to the output directory
tar.extractall(output_dir)