Examples of Statistical API
The requests below are written in Python. To execute them you need to create an OAuth client as is explained here. It is named oauth
in these examples. Jupyter notebook with all examples can be downloaded here.
Statistics for one single-band output on a given day
evalscript = """//VERSION=3function setup() {return {input: [{bands: ["B04","dataMask"]}],output: [{id: "output_B04",bands: 1,sampleType: "FLOAT32"},{id: "dataMask",bands: 1}]}}function evaluatePixel(samples) {return {output_B04: [samples.B04],dataMask: [samples.dataMask]}}"""stats_request = {"input": {"bounds": {"bbox": [414315, 4958219, 414859, 4958819],"properties": {"crs": "http://www.opengis.net/def/crs/EPSG/0/32633"}},"data": [{"type": "sentinel-2-l2a","dataFilter": {"mosaickingOrder": "leastRecent"},}]},"aggregation": {"timeRange": {"from": "2020-07-04T00:00:00Z","to": "2020-07-05T00:00:00Z"},"aggregationInterval": {"of": "P1D"},"evalscript": evalscript,"resx": 10,"resy": 10}}headers = {'Content-Type': 'application/json','Accept': 'application/json'}url = "https://services.sentinel-hub.com/api/v1/statistics"response = oauth.request("POST", url=url , headers=headers, json=stats_request)sh_statistics = response.json()sh_statistics
{'data': [{'interval': {'from': '2020-07-04T00:00:00Z','to': '2020-07-05T00:00:00Z'},'outputs': {'output_B04': {'bands': {'B0': {'stats': {'min': 0.07970000058412552,'max': 0.30959999561309814,'mean': 0.11471141986778864,'stDev': 0.034298170449733226,'sampleCount': 3240,'noDataCount': 0}}}}}}],'status': 'OK'}
Statistics, histogram and percentiles for one single-band output
evalscript = """//VERSION=3function setup() {return {input: [{bands: ["B04","dataMask"]}],output: [{id: "output_B04",bands: 1,sampleType: "FLOAT32"},{id: "dataMask",bands: 1}]}}function evaluatePixel(samples) {return {output_B04: [samples.B04],dataMask: [samples.dataMask]}}"""stats_request = {"input": {"bounds": {"bbox": [414315, 4958219, 414859, 4958819],"properties": {"crs": "http://www.opengis.net/def/crs/EPSG/0/32633"}},"data": [{"type": "sentinel-2-l2a","dataFilter": {"mosaickingOrder": "leastRecent"},}]},"aggregation": {"timeRange": {"from": "2020-07-04T00:00:00Z","to": "2020-07-05T00:00:00Z"},"aggregationInterval": {"of": "P1D"},"evalscript": evalscript,"resx": 10,"resy": 10},"calculations": {"default": {"histograms": {"default": {"nBins": 5,"lowEdge": 0.0,"highEdge": 0.3}},"statistics": {"default": {"percentiles": {"k": [ 33, 50, 75, 90 ]}}}}}}headers = {'Content-Type': 'application/json','Accept': 'application/json'}url = "https://services.sentinel-hub.com/api/v1/statistics"response = oauth.request("POST", url=url , headers=headers, json=stats_request)sh_statistics = response.json()sh_statistics
{'data': [{'interval': {'from': '2020-07-04T00:00:00Z','to': '2020-07-05T00:00:00Z'},'outputs': {'output_B04': {'bands': {'B0': {'stats': {'min': 0.07970000058412552,'max': 0.30959999561309814,'mean': 0.11471141986778864,'stDev': 0.034298170449733226,'sampleCount': 3240,'noDataCount': 0,'percentiles': {'33.0': 0.09709999710321426,'50.0': 0.10360000282526016,'75.0': 0.11940000206232071,'90.0': 0.16040000319480896}},'histogram': {'bins': [{'lowEdge': 0.0, 'highEdge': 0.06, 'count': 0},{'lowEdge': 0.06, 'highEdge': 0.12, 'count': 2458},{'lowEdge': 0.12, 'highEdge': 0.18, 'count': 558},{'lowEdge': 0.18, 'highEdge': 0.24, 'count': 177},{'lowEdge': 0.24, 'highEdge': 0.3, 'count': 44}],'overflowCount': 3,'underflowCount': 0}}}}}}],'status': 'OK'}
Statistics for one single-band output for two months with 10 days aggregation period
evalscript = """//VERSION=3function setup() {return {input: [{bands: ["B04","dataMask"]}],output: [{id: "output_B04",bands: 1,sampleType: "FLOAT32"},{id: "dataMask",bands: 1}]}}function evaluatePixel(samples) {return {output_B04: [samples.B04],dataMask: [samples.dataMask]}}"""stats_request = {"input": {"bounds": {"bbox": [414315, 4958219, 414859, 4958819],"properties": {"crs": "http://www.opengis.net/def/crs/EPSG/0/32633"}},"data": [{"type": "sentinel-2-l2a","dataFilter": {"mosaickingOrder": "leastRecent"}}]},"aggregation": {"timeRange": {"from": "2020-06-01T00:00:00Z","to": "2020-07-31T00:00:00Z"},"aggregationInterval": {"of": "P10D"},"evalscript": evalscript,"resx": 10,"resy": 10}}headers = {'Content-Type': 'application/json','Accept': 'application/json'}url = "https://services.sentinel-hub.com/api/v1/statistics"response = oauth.request("POST", url=url , headers=headers, json=stats_request)sh_statistics = response.json()sh_statistics
{'data': [{'interval': {'from': '2020-06-01T00:00:00Z','to': '2020-06-11T00:00:00Z'},'outputs': {'output_B04': {'bands': {'B0': {'stats': {'min': 0.7892000079154968,'max': 0.8303999900817871,'mean': 0.804223583473102,'stDev': 0.0067066009561434865,'sampleCount': 3240,'noDataCount': 0}}}}}},{'interval': {'from': '2020-06-11T00:00:00Z', 'to': '2020-06-21T00:00:00Z'},'outputs': {'output_B04': {'bands': {'B0': {'stats': {'min': 0.016300000250339508,'max': 0.5956000089645386,'mean': 0.06240126554233315,'stDev': 0.06266500670629409,'sampleCount': 3240,'noDataCount': 0}}}}}},{'interval': {'from': '2020-06-21T00:00:00Z', 'to': '2020-07-01T00:00:00Z'},'outputs': {'output_B04': {'bands': {'B0': {'stats': {'min': 0.026000000536441803,'max': 0.43799999356269836,'mean': 0.06872379640174772,'stDev': 0.056520330692016944,'sampleCount': 3240,'noDataCount': 0}}}}}},{'interval': {'from': '2020-07-01T00:00:00Z', 'to': '2020-07-11T00:00:00Z'},'outputs': {'output_B04': {'bands': {'B0': {'stats': {'min': 0.07970000058412552,'max': 0.30959999561309814,'mean': 0.11471141986778864,'stDev': 0.034298170449733226,'sampleCount': 3240,'noDataCount': 0}}}}}},{'interval': {'from': '2020-07-11T00:00:00Z', 'to': '2020-07-21T00:00:00Z'},'outputs': {'output_B04': {'bands': {'B0': {'stats': {'min': 0.017400000244379044,'max': 0.4187999963760376,'mean': 0.062194598779473156,'stDev': 0.06317700445712106,'sampleCount': 3240,'noDataCount': 0}}}}}},{'interval': {'from': '2020-07-21T00:00:00Z', 'to': '2020-07-31T00:00:00Z'},'outputs': {'output_B04': {'bands': {'B0': {'stats': {'min': 0.13920000195503235,'max': 0.4927999973297119,'mean': 0.3146395680115182,'stDev': 0.054700527707146035,'sampleCount': 3240,'noDataCount': 0}}}}}}],'status': 'OK'}
Percentage of cloudy pixels for selected area of interest
evalscript = """//VERSION=3function setup() {return {input: [{bands: ["CLM","dataMask"]}],output: [{id: "data",bands: 1},{id: "dataMask",bands: 1}]}}function evaluatePixel(samples) {return {data: [samples.CLM],dataMask: [samples.dataMask]}}"""stats_request = {"input": {"bounds": {"bbox": [413307.629466,4957434.513693,415152.151806,4958814.807431],"properties": {"crs": "http://www.opengis.net/def/crs/EPSG/0/32633"}},"data": [{"type": "sentinel-2-l2a","dataFilter": {"mosaickingOrder": "leastRecent"}}]},"aggregation": {"timeRange": {"from": "2020-11-01T00:00:00Z","to": "2020-12-31T00:00:00Z"},"aggregationInterval": {"of": "P1D"},"evalscript": evalscript,"resx": 10,"resy": 10}}headers = {'Content-Type': 'application/json','Accept': 'application/json'}url = "https://services.sentinel-hub.com/api/v1/statistics"response = oauth.request("POST", url=url, headers=headers, json=stats_request)sh_statistics = response.json()sh_statistics
{'data': [{'interval': {'from': '2020-11-01T00:00:00Z','to': '2020-11-02T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 1.0,'max': 1.0,'mean': 1.0,'stDev': 0.0,'sampleCount': 25392,'noDataCount': 0}}}}}},{'interval': {'from': '2020-11-06T00:00:00Z', 'to': '2020-11-07T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 0.0,'max': 0.0,'mean': 0.0,'stDev': 0.0,'sampleCount': 25392,'noDataCount': 0}}}}}},{'interval': {'from': '2020-11-11T00:00:00Z', 'to': '2020-11-12T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 0.0,'max': 0.0,'mean': 0.0,'stDev': 0.0,'sampleCount': 25392,'noDataCount': 0}}}}}},{'interval': {'from': '2020-11-21T00:00:00Z', 'to': '2020-11-22T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 0.0,'max': 0.0,'mean': 0.0,'stDev': 0.0,'sampleCount': 25392,'noDataCount': 0}}}}}},{'interval': {'from': '2020-11-26T00:00:00Z', 'to': '2020-11-27T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 0.0,'max': 1.0,'mean': 0.31253938248267044,'stDev': 0.46352833449533853,'sampleCount': 25392,'noDataCount': 0}}}}}},{'interval': {'from': '2020-12-01T00:00:00Z', 'to': '2020-12-02T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 0.0,'max': 1.0,'mean': 0.2800882167611853,'stDev': 0.44904210002261963,'sampleCount': 25392,'noDataCount': 0}}}}}},{'interval': {'from': '2020-12-06T00:00:00Z', 'to': '2020-12-07T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 1.0,'max': 1.0,'mean': 1.0,'stDev': 0.0,'sampleCount': 25392,'noDataCount': 0}}}}}},{'interval': {'from': '2020-12-11T00:00:00Z', 'to': '2020-12-12T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 0.0,'max': 1.0,'mean': 0.9844439193446739,'stDev': 0.12375010711094206,'sampleCount': 25392,'noDataCount': 0}}}}}},{'interval': {'from': '2020-12-16T00:00:00Z', 'to': '2020-12-17T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 1.0,'max': 1.0,'mean': 1.0,'stDev': 0.0,'sampleCount': 25392,'noDataCount': 0}}}}}},{'interval': {'from': '2020-12-21T00:00:00Z', 'to': '2020-12-22T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 1.0,'max': 1.0,'mean': 1.0,'stDev': 0.0,'sampleCount': 25392,'noDataCount': 0}}}}}},{'interval': {'from': '2020-12-26T00:00:00Z', 'to': '2020-12-27T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 0.0,'max': 1.0,'mean': 0.1512287334593577,'stDev': 0.35827168969322143,'sampleCount': 25392,'noDataCount': 0}}}}}}],'status': 'OK'}
dates_without_clouds = [(data["interval"], int(100 * data["outputs"]["data"]['bands']['B0']['stats']['mean']) ) for data in sh_statistics["data"]]for item in dates_without_clouds:print( item )
({'from': '2020-11-01T00:00:00Z', 'to': '2020-11-02T00:00:00Z'}, 100)({'from': '2020-11-06T00:00:00Z', 'to': '2020-11-07T00:00:00Z'}, 0)({'from': '2020-11-11T00:00:00Z', 'to': '2020-11-12T00:00:00Z'}, 0)({'from': '2020-11-21T00:00:00Z', 'to': '2020-11-22T00:00:00Z'}, 0)({'from': '2020-11-26T00:00:00Z', 'to': '2020-11-27T00:00:00Z'}, 31)({'from': '2020-12-01T00:00:00Z', 'to': '2020-12-02T00:00:00Z'}, 28)({'from': '2020-12-06T00:00:00Z', 'to': '2020-12-07T00:00:00Z'}, 100)({'from': '2020-12-11T00:00:00Z', 'to': '2020-12-12T00:00:00Z'}, 98)({'from': '2020-12-16T00:00:00Z', 'to': '2020-12-17T00:00:00Z'}, 100)({'from': '2020-12-21T00:00:00Z', 'to': '2020-12-22T00:00:00Z'}, 100)({'from': '2020-12-26T00:00:00Z', 'to': '2020-12-27T00:00:00Z'}, 15)
Basic statistics of NDVI with water pixels excluded (custom output dataMask)
evalscript = """//VERSION=3function setup() {return {input: [{bands: ["B04","B08","SCL","dataMask"]}],output: [{id: "data",bands: 1},{id: "dataMask",bands: 1}]}}function evaluatePixel(samples) {let ndvi = (samples.B08 - samples.B04)/(samples.B08 + samples.B04)var validNDVIMask = 1if (samples.B08 + samples.B04 == 0 ){validNDVIMask = 0}var noWaterMask = 1if (samples.SCL == 6 ){noWaterMask = 0}return {data: [ndvi],// Exclude nodata pixels, pixels where ndvi is not defined and water pixels from statistics:dataMask: [samples.dataMask * validNDVIMask * noWaterMask]}}"""stats_request = {"input": {"bounds": {"geometry": {"type": "Polygon","coordinates": [[[458085.878866,5097236.833044],[457813.834156,5096808.351383],[457979.897062,5096313.767184],[458146.639373,5096405.411294],[458085.878866,5097236.833044]]]},"properties": {"crs": "http://www.opengis.net/def/crs/EPSG/0/32633"}},"data": [{"type": "sentinel-2-l2a","dataFilter": {"mosaickingOrder": "leastCC"}}]},"aggregation": {"timeRange": {"from": "2020-01-01T00:00:00Z","to": "2020-12-31T00:00:00Z"},"aggregationInterval": {"of": "P30D"},"evalscript": evalscript,"resx": 10,"resy": 10}}headers = {'Content-Type': 'application/json','Accept': 'application/json'}url = "https://services.sentinel-hub.com/api/v1/statistics"response = oauth.request("POST", url=url, headers=headers, json=stats_request)sh_statistics = response.json()sh_statistics
{'data': [{'interval': {'from': '2020-01-01T00:00:00Z','to': '2020-01-31T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 0.24306687712669373,'max': 0.6244725584983826,'mean': 0.4123224201824293,'stDev': 0.055874589607421886,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-01-31T00:00:00Z', 'to': '2020-03-01T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 0.2451941967010498,'max': 0.4233206510543823,'mean': 0.3160828609431641,'stDev': 0.0280772593636271,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-03-01T00:00:00Z', 'to': '2020-03-31T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 0.4236144721508026,'max': 0.8021259307861328,'mean': 0.5844831434836089,'stDev': 0.05766820795482124,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-03-31T00:00:00Z', 'to': '2020-04-30T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 0.4647541046142578,'max': 0.8266128897666931,'mean': 0.6615912824901472,'stDev': 0.05539347152437238,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-04-30T00:00:00Z', 'to': '2020-05-30T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 0.1761743128299713,'max': 0.870899498462677,'mean': 0.6880682412526884,'stDev': 0.18833356676740057,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-05-30T00:00:00Z', 'to': '2020-06-29T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 0.6883189082145691,'max': 0.8775584697723389,'mean': 0.8230951517303176,'stDev': 0.026851310273968688,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-06-29T00:00:00Z', 'to': '2020-07-29T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 0.8124191164970398,'max': 0.9270430207252502,'mean': 0.8977047195274247,'stDev': 0.01321883825220214,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-07-29T00:00:00Z', 'to': '2020-08-28T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 0.750795304775238,'max': 0.8925060033798218,'mean': 0.8437445996058478,'stDev': 0.017705930134783242,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-08-28T00:00:00Z', 'to': '2020-09-27T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 0.7094070315361023,'max': 0.8823529481887817,'mean': 0.8138526516467535,'stDev': 0.020639924263070358,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-09-27T00:00:00Z', 'to': '2020-10-27T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 0.6416097283363342,'max': 0.8256189227104187,'mean': 0.7368144742384923,'stDev': 0.02884084473079313,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-10-27T00:00:00Z', 'to': '2020-11-26T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': 0.5131579041481018,'max': 0.9108409285545349,'mean': 0.6912739742345253,'stDev': 0.06273793790576106,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-11-26T00:00:00Z', 'to': '2020-12-26T00:00:00Z'},'outputs': {'data': {'bands': {'B0': {'stats': {'min': -0.01446416787803173,'max': 0.015364916995167732,'mean': 0.0018048733875211391,'stDev': 0.004322122712106793,'sampleCount': 3036,'noDataCount': 1192}}}}}}],'status': 'OK'}
Statistics of maximum monthly NDVI for a parcel in 2020
evalscript = """//VERSION=3function setup() {return {input: [{bands: ["B04","B08","SCL","dataMask"]}],mosaicking: "ORBIT",output: [{id: "data",bands: ["monthly_max_ndvi"]},{id: "dataMask",bands: 1}]}}function evaluatePixel(samples) {var max = 0;var hasData = 0;for (var i=0;i<samples.length;i++) {if (samples[i].dataMask == 1 && samples[i].SCL != 6 && samples[i].B04+samples[i].B08 != 0 ){hasData = 1var ndvi = (samples[i].B08 - samples[i].B04)/(samples[i].B08 + samples[i].B04);max = ndvi > max ? ndvi:max;}}return {data: [max],dataMask: [hasData]}}"""stats_request = {"input": {"bounds": {"geometry": {"type": "Polygon","coordinates": [[[458085.878866,5097236.833044],[457813.834156,5096808.351383],[457979.897062,5096313.767184],[458146.639373,5096405.411294],[458085.878866,5097236.833044]]]},"properties": {"crs": "http://www.opengis.net/def/crs/EPSG/0/32633"}},"data": [{"type": "sentinel-2-l2a","dataFilter": {"mosaickingOrder": "leastCC"}}]},"aggregation": {"timeRange": {"from": "2020-01-01T00:00:00Z","to": "2021-01-01T00:00:00Z"},"aggregationInterval": {"of": "P1M"},"evalscript": evalscript,"resx": 10,"resy": 10}}headers = {'Content-Type': 'application/json','Accept': 'application/json'}url = "https://services.sentinel-hub.com/api/v1/statistics"response = oauth.request("POST", url=url, headers=headers, json=stats_request)sh_statistics = response.json()sh_statistics
{'data': [{'interval': {'from': '2020-01-01T00:00:00Z','to': '2020-02-01T00:00:00Z'},'outputs': {'data': {'bands': {'monthly_max_ndvi': {'stats': {'min': 0.4755639135837555,'max': 0.881286084651947,'mean': 0.6396090604381046,'stDev': 0.06844923487502963,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-02-01T00:00:00Z', 'to': '2020-03-01T00:00:00Z'},'outputs': {'data': {'bands': {'monthly_max_ndvi': {'stats': {'min': 0.3580246865749359,'max': 0.8721038103103638,'mean': 0.5956351390500386,'stDev': 0.07367438999713516,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-03-01T00:00:00Z', 'to': '2020-04-01T00:00:00Z'},'outputs': {'data': {'bands': {'monthly_max_ndvi': {'stats': {'min': 0.4486735761165619,'max': 0.8021259307861328,'mean': 0.5871563556072766,'stDev': 0.057052289003643133,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-04-01T00:00:00Z', 'to': '2020-05-01T00:00:00Z'},'outputs': {'data': {'bands': {'monthly_max_ndvi': {'stats': {'min': 0.7103235721588135,'max': 0.9151291251182556,'mean': 0.8202670164519443,'stDev': 0.029936259510749567,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-05-01T00:00:00Z', 'to': '2020-06-01T00:00:00Z'},'outputs': {'data': {'bands': {'monthly_max_ndvi': {'stats': {'min': 0.7955418825149536,'max': 0.9187881350517273,'mean': 0.8889340774162204,'stDev': 0.013139359632348635,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-06-01T00:00:00Z', 'to': '2020-07-01T00:00:00Z'},'outputs': {'data': {'bands': {'monthly_max_ndvi': {'stats': {'min': 0.6883189082145691,'max': 0.8775584697723389,'mean': 0.8258738168990016,'stDev': 0.025802682912912194,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-07-01T00:00:00Z', 'to': '2020-08-01T00:00:00Z'},'outputs': {'data': {'bands': {'monthly_max_ndvi': {'stats': {'min': 0.8329545259475708,'max': 0.9370484948158264,'mean': 0.9037947789513383,'stDev': 0.01278601507445675,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-08-01T00:00:00Z', 'to': '2020-09-01T00:00:00Z'},'outputs': {'data': {'bands': {'monthly_max_ndvi': {'stats': {'min': 0.750795304775238,'max': 0.8925060033798218,'mean': 0.843880225772972,'stDev': 0.017580399946741675,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-09-01T00:00:00Z', 'to': '2020-10-01T00:00:00Z'},'outputs': {'data': {'bands': {'monthly_max_ndvi': {'stats': {'min': 0.7121148109436035,'max': 0.8823529481887817,'mean': 0.8138710224835326,'stDev': 0.02056652680651673,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-10-01T00:00:00Z', 'to': '2020-11-01T00:00:00Z'},'outputs': {'data': {'bands': {'monthly_max_ndvi': {'stats': {'min': 0.6416097283363342,'max': 0.8256189227104187,'mean': 0.7368144742384923,'stDev': 0.02884084473079313,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-11-01T00:00:00Z', 'to': '2020-12-01T00:00:00Z'},'outputs': {'data': {'bands': {'monthly_max_ndvi': {'stats': {'min': 0.5424679517745972,'max': 0.9108409285545349,'mean': 0.7069293897671695,'stDev': 0.05380689467103403,'sampleCount': 3036,'noDataCount': 1192}}}}}},{'interval': {'from': '2020-12-01T00:00:00Z', 'to': '2021-01-01T00:00:00Z'},'outputs': {'data': {'bands': {'monthly_max_ndvi': {'stats': {'min': 0.0683102235198021,'max': 0.23551543056964874,'mean': 0.1444664227123698,'stDev': 0.027443079533455306,'sampleCount': 3036,'noDataCount': 1192}}}}}}],'status': 'OK'}
Multiple outputs with different dataMasks, multi-band output with custom bands' names and different histogram types
evalscript = """//VERSION=3function setup() {return {input: [{bands: ["B04","B08","SCL","dataMask"]}],output: [{id: "output_my_bands",bands: ["only_band_B04", "only_band_B08"],sampleType: "FLOAT32"},{id: "output_my_indices",bands: 1,sampleType: "FLOAT32"},{id: "output_scl",bands: 1,sampleType: "UINT8"},{id: "dataMask",bands: ["output_my_bands", "output_my_indices"]}]}}function evaluatePixel(samples) {let ndvi = (samples.B08 - samples.B04)/(samples.B08 + samples.B04)var validNDVIMask = 1if (samples.B08 + samples.B04 == 0 ){validNDVIMask = 0}var noWaterMask = 1if (samples.SCL == 6 ){noWaterMask = 0}return {output_my_bands: [samples.B04, samples.B08],output_my_indices: [ndvi],output_scl: [samples.SCL],dataMask: [samples.dataMask, samples.dataMask * noWaterMask * validNDVIMask]}}"""stats_request = {"input": {"bounds": {"bbox": [414315, 4958219, 414859, 4958819],"properties": {"crs": "http://www.opengis.net/def/crs/EPSG/0/32633"}},"data": [{"type": "sentinel-2-l2a","dataFilter": {"mosaickingOrder": "leastRecent"}}]},"aggregation": {"timeRange": {"from": "2020-07-01T00:00:00Z","to": "2020-07-15T00:00:00Z"},"aggregationInterval": {"of": "P5D"},"evalscript": evalscript,"resx": 20,"resy": 20},"calculations": {"output_my_bands": {"histograms": {"only_band_B08": {"nBins": 3,"lowEdge": 0.0,"highEdge": 0.3}},"statistics": {"only_band_B04": {"percentiles": {"k": [33, 66,100],}}}},"output_scl": {"histograms": {"default": {"bins": [0,1,2,3,4,5,6,7,8,9,10,11]}}},"default": {"histograms": {"default": {"binWidth": 0.05,"lowEdge": 0.0}}}}}headers = {'Content-Type': 'application/json','Accept': 'application/json'}url = "https://services.sentinel-hub.com/api/v1/statistics"response = oauth.request("POST", url=url , headers=headers, json=stats_request)sh_statistics = response.json()sh_statistics
{'data': [{'interval': {'from': '2020-07-01T00:00:00Z','to': '2020-07-06T00:00:00Z'},'outputs': {'output_my_bands': {'bands': {'only_band_B04': {'stats': {'min': 0.0803999975323677,'max': 0.2939999997615814,'mean': 0.11451061716602186,'stDev': 0.032769790113614555,'sampleCount': 810,'noDataCount': 0,'percentiles': {'33.0': 0.09719999879598618,'66.0': 0.11169999837875366,'100.0': 0.2939999997615814}}},'only_band_B08': {'stats': {'min': 0.0860000029206276,'max': 0.34290000796318054,'mean': 0.16518679009175594,'stDev': 0.07128630441809644,'sampleCount': 810,'noDataCount': 0},'histogram': {'bins': [{'lowEdge': 0.0,'highEdge': 0.09999999999999999,'count': 199},{'lowEdge': 0.09999999999999999,'highEdge': 0.19999999999999998,'count': 270},{'lowEdge': 0.19999999999999998, 'highEdge': 0.3, 'count': 332}],'overflowCount': 9,'underflowCount': 0}}}},'output_scl': {'bands': {'B0': {'stats': {'min': 8.0,'max': 10.0,'mean': 9.75432098765432,'stDev': 0.6555648554361158,'sampleCount': 810,'noDataCount': 0},'histogram': {'bins': [{'lowEdge': 0, 'highEdge': 1, 'count': 0},{'lowEdge': 1, 'highEdge': 2, 'count': 0},{'lowEdge': 2, 'highEdge': 3, 'count': 0},{'lowEdge': 3, 'highEdge': 4, 'count': 0},{'lowEdge': 4, 'highEdge': 5, 'count': 0},{'lowEdge': 5, 'highEdge': 6, 'count': 0},{'lowEdge': 6, 'highEdge': 7, 'count': 0},{'lowEdge': 7, 'highEdge': 8, 'count': 0},{'lowEdge': 8, 'highEdge': 9, 'count': 99},{'lowEdge': 9, 'highEdge': 10, 'count': 1},{'lowEdge': 10, 'highEdge': 11, 'count': 710}],'overflowCount': 0,'underflowCount': 0}}}},'output_my_indices': {'bands': {'B0': {'stats': {'min': -0.04050104320049286,'max': 0.5338308215141296,'mean': 0.14599402473584097,'stDev': 0.15671216615792566,'sampleCount': 810,'noDataCount': 0},'histogram': {'bins': [{'lowEdge': 0.0, 'highEdge': 0.05, 'count': 340},{'lowEdge': 0.05, 'highEdge': 0.1, 'count': 71},{'lowEdge': 0.1, 'highEdge': 0.15000000000000002, 'count': 50},{'lowEdge': 0.15000000000000002, 'highEdge': 0.2, 'count': 26},{'lowEdge': 0.2, 'highEdge': 0.25, 'count': 23},{'lowEdge': 0.25, 'highEdge': 0.30000000000000004, 'count': 33},{'lowEdge': 0.30000000000000004,'highEdge': 0.35000000000000003,'count': 64},{'lowEdge': 0.35000000000000003, 'highEdge': 0.4, 'count': 81},{'lowEdge': 0.4, 'highEdge': 0.45, 'count': 53},{'lowEdge': 0.45, 'highEdge': 0.5, 'count': 6},{'lowEdge': 0.5, 'highEdge': 0.55, 'count': 9}],'overflowCount': 0,'underflowCount': 54}}}}}},{'interval': {'from': '2020-07-06T00:00:00Z', 'to': '2020-07-11T00:00:00Z'},'outputs': {'output_my_bands': {'bands': {'only_band_B04': {'stats': {'min': 0.007499999832361937,'max': 0.3788999915122986,'mean': 0.05566148159990979,'stDev': 0.060176196853468686,'sampleCount': 810,'noDataCount': 0,'percentiles': {'33.0': 0.022700000554323196,'66.0': 0.04439999908208847,'100.0': 0.3788999915122986}}},'only_band_B08': {'stats': {'min': 0.006500000134110451,'max': 0.46369999647140503,'mean': 0.12869839533864502,'stDev': 0.1266643048401008,'sampleCount': 810,'noDataCount': 0},'histogram': {'bins': [{'lowEdge': 0.0,'highEdge': 0.09999999999999999,'count': 450},{'lowEdge': 0.09999999999999999,'highEdge': 0.19999999999999998,'count': 27},{'lowEdge': 0.19999999999999998, 'highEdge': 0.3, 'count': 254}],'overflowCount': 79,'underflowCount': 0}}}},'output_scl': {'bands': {'B0': {'stats': {'min': 2.0,'max': 9.0,'mean': 5.1716049382715985,'stDev': 1.09834157450977,'sampleCount': 810,'noDataCount': 0},'histogram': {'bins': [{'lowEdge': 0, 'highEdge': 1, 'count': 0},{'lowEdge': 1, 'highEdge': 2, 'count': 0},{'lowEdge': 2, 'highEdge': 3, 'count': 29},{'lowEdge': 3, 'highEdge': 4, 'count': 0},{'lowEdge': 4, 'highEdge': 5, 'count': 235},{'lowEdge': 5, 'highEdge': 6, 'count': 103},{'lowEdge': 6, 'highEdge': 7, 'count': 428},{'lowEdge': 7, 'highEdge': 8, 'count': 13},{'lowEdge': 8, 'highEdge': 9, 'count': 1},{'lowEdge': 9, 'highEdge': 10, 'count': 1},{'lowEdge': 10, 'highEdge': 11, 'count': 0}],'overflowCount': 0,'underflowCount': 0}}}},'output_my_indices': {'bands': {'B0': {'stats': {'min': -0.18976545333862305,'max': 0.858506441116333,'mean': 0.47965881587323095,'stDev': 0.25189343011256504,'sampleCount': 810,'noDataCount': 428},'histogram': {'bins': [{'lowEdge': 0.0, 'highEdge': 0.05, 'count': 3},{'lowEdge': 0.05, 'highEdge': 0.1, 'count': 3},{'lowEdge': 0.1, 'highEdge': 0.15000000000000002, 'count': 15},{'lowEdge': 0.15000000000000002, 'highEdge': 0.2, 'count': 36},{'lowEdge': 0.2, 'highEdge': 0.25, 'count': 28},{'lowEdge': 0.25, 'highEdge': 0.30000000000000004, 'count': 20},{'lowEdge': 0.30000000000000004,'highEdge': 0.35000000000000003,'count': 17},{'lowEdge': 0.35000000000000003, 'highEdge': 0.4, 'count': 6},{'lowEdge': 0.4, 'highEdge': 0.45, 'count': 9},{'lowEdge': 0.45, 'highEdge': 0.5, 'count': 24},{'lowEdge': 0.5, 'highEdge': 0.55, 'count': 22},{'lowEdge': 0.55, 'highEdge': 0.6000000000000001, 'count': 18},{'lowEdge': 0.6000000000000001, 'highEdge': 0.65, 'count': 32},{'lowEdge': 0.65, 'highEdge': 0.7000000000000001, 'count': 46},{'lowEdge': 0.7000000000000001, 'highEdge': 0.75, 'count': 37},{'lowEdge': 0.75, 'highEdge': 0.8, 'count': 29},{'lowEdge': 0.8, 'highEdge': 0.8500000000000001, 'count': 21},{'lowEdge': 0.8500000000000001, 'highEdge': 0.9, 'count': 2}],'overflowCount': 0,'underflowCount': 14}}}}}}],'status': 'OK'}
Statistics for Sentinel-1
evalscript = """//VERSION=3function setup() {return {input: [{bands: ["VV","dataMask"]}],output: [{id: "output_VV",bands: 1,sampleType: "FLOAT32"},{id: "dataMask",bands: 1}]}}function evaluatePixel(samples) {return {output_VV: [samples.VV],dataMask: [samples.dataMask]}}"""stats_request = {"input": {"bounds": {"bbox": [414315, 4958219, 414859, 4958819],"properties": {"crs": "http://www.opengis.net/def/crs/EPSG/0/32633"}},"data": [{"type": "sentinel-1-grd","dataFilter": {}}]},"aggregation": {"timeRange": {"from": "2020-07-01T00:00:00Z","to": "2020-07-10T00:00:00Z"},"aggregationInterval": {"of": "P5D"},"evalscript": evalscript,"resx": 10,"resy": 10}}headers = {'Content-Type': 'application/json','Accept': 'application/json'}url = "https://services.sentinel-hub.com/api/v1/statistics"response = oauth.request("POST", url=url , headers=headers, json=stats_request)sh_statistics = response.json()sh_statistics
{'data': [{'interval': {'from': '2020-07-01T00:00:00Z','to': '2020-07-06T00:00:00Z'},'outputs': {'output_VV': {'bands': {'B0': {'stats': {'min': 0.0,'max': 0.4447733759880066,'mean': 0.046840328479290934,'stDev': 0.05487441687888816,'sampleCount': 3240,'noDataCount': 0}}}}}}],'status': 'OK'}
Statistics of NDVI using Sentinel-2 L2A as the source of NDVI and Sentinel-1 GRD VV channel as the mask of water bodies
evalscript = """//VERSION=3function setup() {return {input: [// Specify input bands using the "id" of datasource set in the payload under data parameter{datasource: "s2", bands: ["B04", "B08", "dataMask"]},{datasource: "s1", bands: ["VV", "dataMask"]}],output: [{id: "ndvi",bands: 1},{id: "dataMask",bands: 1}],mosaicking: "SIMPLE"};}function evaluatePixel(samples) {let ndvi = (samples.s2[0].B08 - samples.s2[0].B04) / (samples.s2[0].B08+samples.s2[0].B04);// Create a mask for invalid ndvi valuelet validNDVIMask = 1;if (!isFinite(ndvi)) {validNDVIMask = 0;}// Create a mask for water// The threshold comes from the result of exploring river flooding during the winter of 2020/21 on the River Severn in the United Kingdom// (https://medium.com/euro-data-cube/exploring-time-and-space-a-guide-to-accessing-analysing-and-visualising-data-in-the-euro-data-e4a46f2bb55b)let noWaterMask = 1;if (toDB(samples.s1[0].VV) <= -20) {noWaterMask = 0;}return {ndvi: [ndvi],// Combine all the masksdataMask: [samples.s2[0].dataMask * samples.s1[0].dataMask * validNDVIMask * noWaterMask]};}function toDB(input){return 10 * Math.log(input)/Math.LN10;}"""stats_request = {"input": {"bounds": {"geometry": {"type": "Polygon","coordinates": [[[16.72617,47.713689],[16.72617,47.655444],[16.816292,47.655444],[16.816292,47.713689],[16.72617,47.713689]]]}},"data": [{"dataFilter": {},"id": "s2","type": "sentinel-2-l2a"},{"dataFilter": {"resolution": "HIGH","acquisitionMode": "IW","polarization": "DV"},"processing": {"backCoeff": "GAMMA0_TERRAIN","orthorectify": "true","demInstance": "MAPZEN","speckleFilter": {"type": "LEE","windowSizeX": 5,"windowSizeY": 5}},"id": "s1","type": "sentinel-1-grd"}]},"aggregation": {"timeRange": {"from": "2021-08-08T00:00:00Z","to": "2021-08-11T23:59:59Z"},"aggregationInterval": {"of": "P1D"},"resx": 0.00009,"resy": 0.00009,"evalscript": evalscript},"calculations": {"default": {}}}headers = {'Content-Type': 'application/json','Accept': 'application/json'}url = "https://services.sentinel-hub.com/api/v1/statistics"response = oauth.request("POST", url=url, headers=headers, json=stats_request)sh_statistics = response.json()sh_statistics
{'data': [{'interval': {'from': '2021-08-08T00:00:00Z','to': '2021-08-09T00:00:00Z'},'outputs': {'ndvi': {'bands': {'B0': {'stats': {'min': -0.6206604838371277,'max': 0.8291770815849304,'mean': 0.22080027097811286,'stDev': 0.22071344421516914,'sampleCount': 647647,'noDataCount': 144372}}}}}},{'interval': {'from': '2021-08-10T00:00:00Z', 'to': '2021-08-11T00:00:00Z'},'outputs': {'ndvi': {'bands': {'B0': {'stats': {'min': -0.6909090876579285,'max': 0.8982226252555847,'mean': 0.6302106131139007,'stDev': 0.28749024291873476,'sampleCount': 647647,'noDataCount': 220350}}}}}}],'status': 'OK'}