Skip to main content

Hi, I am using the batch request API for the first time.

I use the following eval script:


//VERSION=3

function setup() {
return {
input: [{
datasource: "s1grd",
bands: ["VV", "VH"]
}],
output: [ {
id: "VV_Median",
bands: 1,
sampleType: "UINT16"
}, {
id: "VH_Median",
bands: 1,
sampleType: "UINT16"
}],
mosaicking: Mosaicking.ORBIT
};
}

// Defines function to fetch the median of a value array
function getMedian(values){
if(values.length ===0) return 0;
values.sort(function(a,b){
return a-b;
});
var half = Math.floor(values.length / 2);
if (values.length % 2)
return values[half];
return (values[half - 1] + values[half]) / 2.0;
}



function evaluatePixel(samples) {
// Store samples from two different datasources into
// separate objects
var S1GRD = samples.s1grd;



// Initialise S1GRD VV and VH arrays
var vv_array = [];
var vh_array = [];

// Push values to arrays
for (var i = 0; i < S1GRD.length; i++) {
vv_array.push(S1GRD[i].VV);
vh_array.push(S1GRD[i].VH);
}

// Assign median to output variable
var median_vv = getMedian(vv_array);
var median_vh = getMedian(vh_array);

// Define evalscript responses
return {
VV_Median: [median_vv * 10000],
VH_Median: [median_vh * 10000]
};
}
"""

And the following code:


area_gdf = gpd.read_file(shape_file_path)
full_geometry = Geometry(area_gdf.geometry.values[0], crs=self.crs)



shb = SentinelHubBatch(self.config)


sentinelhub_request = SentinelHubRequest(
evalscript=evalscript,
input_data=[
SentinelHubRequest.input_data(
data_collection=DataCollection.SENTINEL1_IW,
time_interval=interval,
other_args={"id": "s1grd"}
),
],
responses=responses,
geometry=full_geometry,
config=self.config
)

batch_request = shb.create(
sentinelhub_request,
tiling_grid=SentinelHubBatch.tiling_grid(
grid_id=self.grid_id,
resolution=10,
buffer=(5, 5)
),
bucket_name=self.aws_bucket_name,
# Check documentation for more about output configuration options:
# output=SentinelHubBatch.output(...)
description='Builtup-checker-BatchProcessing'
)

shb.start_analysis(batch_request)
batch_request = shb.get_request(batch_request)
print(batch_request)
while (batch_request.status != BatchRequestStatus.ANALYSIS_DONE):
self.logger.info(f'{batch_request.status} {batch_request.request_id}')
time.sleep(20)
batch_request = shb.get_request(batch_request)

self.logger.info(f'Running this batch job will take about {batch_request.value_estimate:.4f} processing units')

However, the status never (canceled after 10+ min) changes from CREATED.

Is there anything I need to keep in mind?


Thanks for the help.


Oh and sorry if this is obvious and covered in the documentation. I did not find it 🙂

Hi @benedict ,


I looked into your requests and you are not doing anything wrong.


There seems to be a large queue of batch requests on our side, well beyond usual peaks, so it might just take a bit longer to process. We are looking into it and will provide an update on the situation.


We are sorry for the inconvenience.


HI @benedict,


note that your orders were now analysed, unfortunately they failed. It seems the test run picks a place, where there are no S1 data available, so you have to test for that in the Evalscript.


As a side note - the queue is still persisting, so it might take a bit longer for the next couple of hours. We are looking how to mitigate the process in the future, to avoid such situations.


Best,

Grega


Reply