Skip to main content

I am trying to follow the instructions in- Sentinel-2 L2A and scripts from- Examples for S2L2A but these codes do not have an option to download S2 images with an option of cloud cover. I want to download time series S2 image over a bounding box but the images that are used to clip over bb should not have a cloud cover % more than 5. How do I include cloud cover condition before download?

Hi, it is very simple to add a cloud cover filter to your request payload. If you are working with Python you can add a cloud cover % (calculated for the full tile) like this:


request = SentinelHubRequest(
evalscript=evalscript,
input_data=[
SentinelHubRequest.input_data(
data_collection=DataCollection.SENTINEL2_L2A,
time_interval=('2023-05-14', '2023-06-14'),
other_args={"dataFilter": {"maxCloudCoverage": 50}}
)

As you can see it is inserted in other_args. As you also mentioned downloading multiple dates in your request, I would recommend reading this material about how to do this in evalscripts using the preProcessScenes function in our documention.


For example, you can use it to request a time series of values for a single band like in the below example:


//VERSION=3
// Script to extract a time series of Band 5 values using
// Sentinel 2 Level 2A data and metadata file.
function setup() {
return {
input: [{
bands: ["B05"],
units: "DN"
}],
output: {
id: "S2_L2A",
bands: 1,
sampleType: SampleType.UINT16
},
mosaicking: Mosaicking.ORBIT
}
}

// The following function is designed to update the number of
// output bands without knowing beforehand how many there are
function updateOutput(outputs, collection) {
Object.values(outputs).forEach((output) => {
output.bands = collection.scenes.length;
});
}

function evaluatePixel(samples) {
// Precompute an array to contain B05 observations
var n_observations = samples.length;
let band_05 = new Array(n_observations).fill(0);

// Fill the array
samples.forEach((sample, index) => {
band_05[index] = sample.B05;
});

return band_05;
}

Hope that this information helps you out 🙂


Hey, what is the difference between- If mosaicking is ORBIT: and If mosaicking is TILE: taking above codes as an example.


To put it very simply;


TILE will use every acquisition in the time period you requested whereas ORBIT will only select one acquisition from each Orbit. This is explained in more detail here.


Reply