Skip to main content

Dear Planet/Sentinel-Hub Community,

we are trying to optimise our requests to the Sentinelhub processing API. 

Context

We are working in the climate-action domain and see this as a way to reduce our emissions (and PU cost). We have already implemented some optimisations like the output format, the output resolution and improving caching. In this context we also opened two issues in the sentinlhub-py repository #560 and #561.

Goal

For any arbitrary area, we want to have at least one valid sample per pixel per month but as little samples as possible overall.

Problem

Our analyses are temporally and geographically unbound. We therefore use multiple timestamps to assert data availability and robustness. One of the last optimisation potentials we have identified would be the reduction in the number of samples that are fed into our eval-script (i.e. sharpening the filter criteria, similar to the examples on "select one image per month"). Here we were unsuccessful due to the limitations of the API (or our understanding thereof).

The problem we are facing is that neither ORBIT nor TILE mode provide the necessary information to achieve that goal. In particular:

  • ORBIT: gives us enough samples across the entire 'valid' time frame, but we can't filter from these because we cannot know if a specific orbit fully covers our AOI and which orbits are actually identical just for a different revolution
  • TILE: would give us more information (e.g. cloud cover to filter by) but still cannot distinguish orbits or assert AOI overlap while potentially increasing the number of samples by a factor of 2, 4 or more

We also though of doing a catalogue request first and then implementing filtering thereon (similar to 

) but were not able to achieve this either.

Is there a way within the existing API to achieve our goal? We would be thankful for any hint.

Hi,

 

Thanks for your question. Unfortunately, there is no inbuilt filtering functionality based on the overlap of your AOI with Sentinel-2 tiles. To quote from the documentation, the way the APIs have been designed and implemented means that the complexity of “tiles” is not accounted for when filtering out data such as Sentinel-2.

Even though satellite imagery data are often distributed in "tiles", we do not want users to be limited to these. Tiles are an artificially introduced entity to make data distribution easier to handle. However, users should not have to care about whether their AOI is on one tile or another, or perhaps on the border of two tiles. This is why Sentinel Hub API hides this complexity and simply makes the data available over chosen area of interest and temporal period of interest. Tiles are therefore automatically stitched together based on defined parameters (AOI, time period, cloud coverage, priority, etc., depending on the data type).

 

That said, if this is still something you wish to implement, you can extract the Sentinel-2 tile extent from a Catalog API request output, you could then calculate the overlap percentage based on this and your AOI using Python (or your language of choice). You could then tailor your Processing API requests to very specific time intervals so you only use the tiles that you are interested in. 

Alternatively, depending on your final output, if it boils down to a statistic, you could use Statistical API that does include an aggregationInterval parameter.


Thank you for the fast reply.

 

To confirm: we would not be able to use the tile IDs from the catalogue call to filter the processing call. Instead we would have to use the exact acquisition timestamps in our filter?

 

And on a side note: the python SDK does not expose all information provided by the catalogue API directly it seems (e.g. the cloud cover cannot be extracted directly from the CatalogSearchIterator). Is that a design choice or should we raise a feature request on that?

PS.: the textboxes on this Forum are very hard to use given that white-on-white is the default colour and the formatting is hard to apply


Reply