Skip to main content

Question: Is it possible to download image using Process API based on id of imagery found using Catalog API?


I have found some images using Catalog API search endpoint which returns features that contain an “id” field like this:


“S2A_MSIL2A_20200101T160511_N0213_R054_T17RNK_20200101T200214”


I then saw in the Process API docs that the input field accepts an “id” field. I thought I could use the above id value to download the image found using Catalog search like:


        "input": {
"bounds": {
"bbox":
-80.150436,
26.932528,
-80.130375,
26.944159
]
},
"data":
{
"type": "S2L2A",
"id": "S2A_MSIL2A_20200101T160511_N0213_R054_T17RNK_20200101T200214",
}
]
},

But get a 400 error like this:


{

“status”: 400,

“reason”: “Bad Request”,

“message”: “Dataset with id: 0 not found.”,

“code”: “RENDERER_EXCEPTION”

}


If instead of id on input.data I use “dataFilter.timeRange” then I can successfully download image.


“dataFilter”: {

timeRange": {

“from”: “2020-01-01T00:00:00Z”,

“to”: “2020-01-01T23:59:59Z”

}

}

No, this is not possible.

When designing the service, we wanted to get rid of this “scene by scene” approach, replacing it with an option for users to get the data that they want based on AOI, sensing time and various other (relevant) filters. Scenes were introduced because there was no technology being able to handle data at a whole. Sentinel Hub does that.


That said, Catalogue API is providing you both sensing time and cover geometry of the scene, so if you really want to download it, you can do it using these two. You might have to use the “Large area utilities” function.


Thank you so much for your response!



  1. What is the input.data.id field mean supplied to process id used for?




  2. So when downloading using process API your algorithm tries to stich together different scenes that cover the AOI within desired time range? How does your algorithm determine which sensing times to use if there are multiple dates available, ie. multiple satellite overpass occurred over the time range? From what I could tell is it uses the last/most current?




id comes handy with data fusion, where you want to make use of various collections within the EVALSCRIPT:


input:
data:
- id: l2a
type: S2L2A
- id: l1c
type: S2L1C
evalscript: |
//VERSION=3
function setup() {
return {
input: [
{ datasource: "l2a", bands: ["B02", "B03", "B04"] },
{ datasource: "l1c", bands: ["B02", "B03", "B04"] }
],
mosaicking: Mosaicking.ORBIT,
output: { id:"default", bands: 3}
}
}

You can define the time range exactly, e.g. to the second, or you make use of mosaickingOrder.


Take a look also at the mosaicking options:

docs.sentinel-hub.com
d3714e73b38a87afa3c31502a6696052a7395163.png


Evalscript V3



Evalscript V3 is a powerful tool for imagery visualization, multitemporal scripting, datafusion, scene filtering, etc.








I think I see what you mean now. I was confused because i was using Roma bbox that was default on the Request Builder Web App (bbox = [ 12.44693, 41.870072, 12.541001, 41.917096]) to query Catalog API and I was getting 2 results with datetime=2020-01-01T10:09:07Z. Then I noticed that one was UTM zone 32N and the other 33N so I guess Process API is just stitching together overlapping areas in different UTM zones.


This is starting to make more sense to me now and i thank you VERY much for taking the time to answer all of my questions. Very much Appreciated!


Reply