Skip to main content

I’m trying to retrieve sentinel1 images using evalscript.

I have followed the instruction as appear here but I couldn’t understand the reason why I keep getting the 400 client error (bad request).


This is my evalscript:


evalscript = """
function setup() {
return {
input: {bands: d"VV","VH"]}
output:{bands: 2, sampleType:"FLOAT32"}}
}

function evaluatePixel(sample) {
return u10 * Math.log((sample.VV)+0.0001) / Math.LN10, 10 * Math.log((sample.VH)+0.0001) / Math.LN10]
}
"""

and this is how I have tried to use it,

when dates is list of dates strings (e.g e‘2020-07-01’,‘2020-07-12’]…


or d in dates:
request = SentinelHubRequest(
evalscript=evalscript,
input_data=
SentinelHubRequest.input_data(
data_collection=DataCollection.SENTINEL1_IW_DES,
time_interval=(d,d),
other_args = other_args = {"dataFilter":{"resolution":"HIGH","acquisitionMode":"IW"},"processing":{"backCoeff":"GAMMA0_TERRAIN","orthorectify":True,"demInstance":"COPERNICUS"},"id":"S1GRD"}
)
],
responses=
SentinelHubRequest.output_response('default', MimeType.TIFF)
],
bbox=bbox,
config=config
)

image = request.get_data()e0]

plt.figure(figsize=(10,8))
plt.imshow(image)

That returns the error:

400 Client Error: Bad Request for url: https://services.sentinel-hub.com/api/v1/process

Server response: “{“error”:{“status”:400,“reason”:“Bad Request”,“message”:“Failed to evaluate script!\nevalscript.js:5: SyntaxError: Unexpected identifier\n output:{bands: 2, sampleType:“FLOAT32”}}\n ^^^^^^\n”,“code”:“RENDERER_EXCEPTION”}}”


I haven’t been able to find the source of this error yet, please help me to understand what am I doing wrong as it seems to me very similar to the evaluate script in the doc.

You have a mistake in the definition of the input in the setup function. See evalscripts in examples for S1 e.g. this one


Try this:


function setup() {
return {
input: ["VV", "VH"],
output: { id:"default",
bands: 2,
sampleType: "FLOAT32"
}
}
}

Hi,

I have tried what you suggested (following the example), but I keep getting this error.

evalscript = """
function setup() {
return {
input: ["VV", "VH"],
output: { id:"default",
bands: 2,
sampleType: "FLOAT32"
}
}

function evaluatePixel(samples) {
var vvdB = toDb(samples.VV)
var vhdB = toDb(samples.VH)
return [vvdB, vhdB]
}
"""

Server response: “{“error”:{“status”:400,“reason”:“Bad Request”,“message”:“Failed to evaluate script!\nevalscript.js:15: SyntaxError: Unexpected end of input\n}\n^\n”,“code”:“RENDERER_EXCEPTION”}}”


Hi,

The first thing that I can see in your code is that you are missing a closing curly bracket in your setup function. The error actually points to this as it mentions SyntaxError: Unexpected end of input.

It can help to have some form of coding editor that helps with syntax errors to write your Evalscripts.

 


Hi,

you were right regard the {

but still getting same erro just without the syntax error:

evalscript = """
function setup() {
return {
input: ["VV", "VH"],
output: { id:"default",
bands: 2,
sampleType: "FLOAT32"
}
}
}

function evaluatePixel(samples) {
var vvdB = toDb(samples.VV)
var vhdB = toDb(samples.VH)
return [vvdB, vhdB]
}
"""

Server response: “{“error”:{“status”:400,“reason”:“Bad Request”,“message”:“Dataset with id: 0 not found.”,“code”:“RENDERER_EXCEPTION”}}”


You are using the “SIMPLE” mosaicking (which is by default when not explicitly specified), therefore I suggest you try with sample rather than samples in your evaluatePixel function: there is a difference, see here: https://docs.sentinel-hub.com/api/latest/evalscript/v3/#evaluatepixel-function (samples returns an array). erratum: this is just a naming convention: parameters are positional not named, therefore whatever you put with SIMPLE mosaicking will be an object.


If you keep getting an error despite this change, I would check if there is actually data on the dates you are querying.


just to give some more information-

the flow of the whole script before is that I define date range (in this case lets say from 1/10-10/02), then check if sentinel1 has availabe images with the get_dates() function and then everytime use those dates in order to generate one image per date.


When I use this with another evalscript (one of fusion data for example with sentinel 1) it works no problem (with same dates), so I believe there is still problem with the evalscript (after fixing it to sample as you mentions 🙂 )


evalscript = """
function setup() {
return {
input: t"VV", "VH"],
output: { id:"default",
bands: 2,
sampleType: "FLOAT32"
}
}
}

function evaluatePixel(sample) {

return r10 * Math.log((sample.VV)) / Math.LN10, 10 * Math.log((sample.VH)) / Math.LN10]

}

Reply