Search Copernicus Marine products

The following code shows how to search for Copernicus Marine products in WASDI

Prerequisites

To run this code you need:
  • A running Python 3.x Environment

  • A valid WASDI Account

If this is not clear, you probably need to take a look to the Python Tutorial before.

Recipe

Note

Assume you have at least one workspace and you have configured it in the config.json file.

To search for Copernicus Marine products, the following fields are mandatory:
  • Collection: this is always going to be ‘CM’

  • Start Date

  • End Date

  • Bounding Box

  • product type

Then, it’s also mandatory to provide search parameters specific for Copernicus Marine. CM products are usually organized with the following hierarchy:
  • dataset

  • variables

Additional parameters may apply, in particular, the protocol: SUBS usually tend to work in most cases, but there may be exceptions, so check case by case and don’t hesitate to reach out for support.

Let’s see an example

# Create the Bounding Box Object: usually you will read it from the parameters
 oBBox = wasdi.getParameter("BBOX", None)

 # If it is null we show here how to initialize manually
 if oBBox is None:
     oBBox = {
         "northEast": {
             "lat": 44.2879447888337,
             "lng": 9.5
         },
         "southWest": {
             "lat": 43.5,
             "lng": 8.4
         }
     }
 # Set Start Date
 sStartDate = wasdi.getParameter("START_DATE", "2023-07-01")
 # Set End Date
 sEndDate = wasdi.getParameter("END_DATE", "2023-07-31")

 sProductType = 'OCEANCOLOUR_MED_BGC_HR_L3_NRT_009_205 - TDS'
 aoParams = {
     "dataset": "cmems_obs_oc_med_bgc_tur-spm-chl_nrt_l3-hr-mosaic_P1D-m",
     "variables": "CHL",
     "protocol": "SUBS"
 }

 aoProductsFoundArray = wasdi.searchEOImages(
     sPlatform='CM',
     oBoundingBox=oBBox, sDateFrom=sStartDate, sDateTo=sEndDate,
     sProvider='AUTO',
     sProductType=sProductType, aoParams=aoParams
 )

 # Usually, the result is a list of Dictionaries
 # In the case of Copernicus Marine, however, the list contain only one element encompassing all the data we required:
 wasdi.wasdiLog(f'Your query identified {len(aoProductsFoundArray)} products')

 # If we have results
 if len(aoProductsFoundArray) > 0:
     # let's see the filename corresponding to the product we found:
     wasdi.wasdiLog(f'{aoProductsFoundArray[0]["fileName"]}')

What it does:

  • Initializes the input variables

  • Searches for the corresponding results

  • count the results (should always be 1 for CM)

  • access a field in the results

Note

The developer can decide what is needed in the params.json file. If you decide to use the WASDI User Interface your parameters will be generated automatically by WASDI.

Note

With the WASDI User Interface you can use the renderAsStrings flag to ask WASDI to get all your parameters in String Format. In this case you will be responsible to convert your data in your code.

Note

The Bounding Box Format used here is the one used by the User Interface when renderAsStrings is missing or false. The Bounding Box format when renderAsStrings: true is “NORTH,WEST,SOUTH,EAST”.

Note

The Date is formatted by the User Interface as “YYYY-MM-DD”.