Run Snap Workflow
This snippet show how to run SNAP worklows by code
Prerequisites
- To run this code you need:
A running Python 3.x Environment
A valid WASDI Account
A valid Config file
A valid params.json file
If this is not clear, you probably need to take a look to the Python Tutorial before.
Recipe
Note
We will use Sentinel-1 GRD and the public LISTSinglePreproc2 workflow for this snippet, but this method can be used with any mission and any compatible workflow.
Note
Remember that you can upload in WASDI your own SNAP Workflows. For further explaination take a look here.
This is our sample params.json file.
{
"START_DATE": "2023-01-01",
"END_DATE": "2023-01-01",
"BBOX": {
"northEast": {
"lat": 20.1,
"lng": 44.4
},
"southWest": {
"lat": 19.3,
"lng": 43.2
}
},
"MISSION": "S1",
"PRODUCT_TYPE": "GRD",
"WORKFLOW": "LISTSinglePreproc2"
}
# Read Bounding Box, Start and End Date
oBBox = wasdi.getParameter("BBOX", None)
sStartDate = wasdi.getParameter("START_DATE", "2023-01-01")
sEndDate = wasdi.getParameter("END_DATE", "2023-01-31")
# Read Mission and Product Type
sMission = wasdi.getParameter("MISSION", "S1")
sProductType = wasdi.getParameter("PRODUCT_TYPE", "GRD")
# Read the name of the workflow to start
sWorkflow = wasdi.getParameter("WORKFLOW", "LISTSinglePreproc2")
# Search Images
aoProductsFound = wasdi.searchEOImages(sMission, sStartDate, sEndDate, sProductType=sProductType, oBoundingBox=oBBox)
if len(aoImagesToProcess)>0:
# Import the first image
wasdi.importProduct(aoProductsFound[0])
# Get the name of the image
sImageName = aoProductsFound[0]["fileName"]
# In general, workflows can have multiple inputs
asInputImages = [sImageName]
# We need to decide the name of the output file: here you may add a more smart code (add a suffix to the original name for example)
sOutputImage = "preprocessed.tif"
# In general, workflows can have also multiple outputs
asOutputImages = [sOutputImage]
#OPTION 1: run the workflow and wait for the result
wasdi.executeWorkflow(asInputImages, asOutputImages, sWorkflow)
#ALTERNATIVE OPTION 2: run asynch
sProcessId = wasdi.asynchExecuteWorkflow(asInputImages, asOutputImages, sWorkflow)
# Here you are free to do what you want
wasdi.wasdiLog("I started a workflow")
# Call this if you need to wait for it to finish
wasdi.waitProcess(sProcessId)
else:
wasdi.wasdiLog("No file to pre-process found")
What it does:
Reads Input Parameters
Starts searching for S1 GRD Images
Runs the workflow waiting for it
Runs the workflow without waiting for it