Preprocessing of Sentinel-1 SAR data via Snappy Python module

Preprocessing of Sentinel-1 SAR data via Snappy Python module

m

August 1, 2016

This chapter demonstrates the Snappy Python module for the automatization of the ESA SNAP tool.

Code examples will be shown for an automated processing chain for the preprocessing of Sentinel-1 SAR data including Calibration, Subsetting and Terrain Correction of GRD (Ground Range Detected data).

A detailed installation tutorial for snappy can be found here: https://senbox.atlassian.net/wiki/display/SNAP/How+to+use+the+SNAP+API+from+Python

First, import the needed Python modules:

 

import snappy

from snappy import ProductIO
from snappy import HashMap

import os, gc   
from snappy import GPF

GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()
HashMap = snappy.jpy.get_type('java.util.HashMap')

Now loop through all Sentinel-1 data sub folders that are located within a super folder (of course, make sure, that the data is already unzipped):

path = "D:\\SENTINEL\\"
 for folder in os.listdir(path):

   gc.enable()
   
   output = path + folder + "\\"  
   timestamp = folder.split("_")[4] 
   date = timestamp[:8]

Then, read in the Sentinel-1 data product:

   sentinel_1 = ProductIO.readProduct(output + "\\manifest.safe")    
   print sentinel_1

If polarization bands are available, spolit up your code to process VH and VV intensity data separately. The first step is the calibration procedure by transforming the DN values to Sigma Naught respectively. You can specify the parameters to output the Image in Decibels as well.

   pols = ['VH','VV'] 
   for p in pols:  
      polarization = p    
    
      ### CALIBRATION
  
      parameters = HashMap() 
      parameters.put('outputSigmaBand', True) 
      parameters.put('sourceBands', 'Intensity_' + polarization) 
      parameters.put('selectedPolarisations', polarization) 
      parameters.put('outputImageScaleInDb', False)  

      calib = output + date + "_calibrate_" + polarization 
      target_0 = GPF.createProduct("Calibration", parameters, sentinel_1) 
      ProductIO.writeProduct(target_0, calib, 'BEAM-DIMAP')

Next, specify a subset AOI to reduce the data amount and processing time. The AOI specified by its outer polygon corners and is formatted through a Well Known Text (WKT).

      ### SUBSET

      calibration = ProductIO.readProduct(calib + ".dim")    
      WKTReader = snappy.jpy.get_type('com.vividsolutions.jts.io.WKTReader')

      wkt = "POLYGON((12.76221 53.70951, 12.72085 54.07433, 13.58674 54.07981, 
                      13.59605 53.70875, 12.76221 53.70951))"

      geom = WKTReader().read(wkt)

      parameters = HashMap()
      parameters.put('geoRegion', geom)
      parameters.put('outputImageScaleInDb', False)

      subset = output + date + "_subset_" + polarization
      target_1 = GPF.createProduct("Subset", parameters, calibration)
      ProductIO.writeProduct(target_1, subset, 'BEAM-DIMAP')

Apply a Range Doppler Terrain Correction to correct for layover and foreshortening effects, by using the SRTM 3 arcsecond product (90m) that is downloaded automatically. You could also specify an own DEM product with a higher spatial resolution from a local path:

      ### TERRAIN CORRECTION
 
      parameters = HashMap()     
      parameters.put('demResamplingMethod', 'NEAREST_NEIGHBOUR') 
      parameters.put('imgResamplingMethod', 'NEAREST_NEIGHBOUR') 
      parameters.put('demName', 'SRTM 3Sec') 
      parameters.put('pixelSpacingInMeter', 10.0) 
      parameters.put('sourceBands', 'Sigma0_' + polarization)
 
      terrain = output + date + "_corrected_" + polarization 
      target_2 = GPF.createProduct("Terrain-Correction", parameters, subset) 
      ProductIO.writeProduct(target_2, terrain, 'GeoTIFF')

Fergana_Sentinel

follow us and share it on:

you may also like:

EAGLE M.Sc. Students doing Arctic Internship

EAGLE M.Sc. Students doing Arctic Internship

This spring, Marlene and Aoibhin, two students from our EAGLE M.Sc. program have started their research internship in the high Arctic on Svalbard. Hosted by Prof. Larissa Beumer at the University Centre in Svalbard (UNIS), the students are gaining hands-on experience...

EORC at the Smart Forest Conference: Research meets Practive

EORC at the Smart Forest Conference: Research meets Practive

This week, our EO4CAM staff Sonja and Julian attended the Smart Forest Conference in Freising, a meeting that brings together researchers, forestry practitioners, and technology developers working at the interface of forest science and digital innovation. Over two...

EO4CAM Data Portal Launched to Support Climate Adaptation in Bavaria

EO4CAM Data Portal Launched to Support Climate Adaptation in Bavaria

New Earth observation platform provides satellite-based information for public authorities and planners A new Earth observation data portal is bringing satellite-derived environmental information closer to climate adaptation planning. On 9 March 2026, the EO4CAM data...

Demography Meets Spatial Analysis: Insights from today’s EORC Talk

Demography Meets Spatial Analysis: Insights from today’s EORC Talk

A recent EORC Talk at the Earth Observation Research Cluster (EORC) at the University of Würzburg brought together perspectives from demography, geography, and spatial analysis. Sebastian Klüsener and Tamilwai Kolowa from the Federal Institute for Population Research...

A Fresh Look of the Foyer and Seminarroom for our Events

A Fresh Look of the Foyer and Seminarroom for our Events

Over the past weeks, our foyer and seminar rooms have received a thoughtful upgrade that reflects both the spirit and the scope of our research community. The spaces now feature large-scale prints that visually showcase the diverse research topics within our group,...

Physical 3D building model of Würzburg at the EORC

Physical 3D building model of Würzburg at the EORC

As part of the "Allianz New Space Mainfranken" initiative by the Würzburg-Schweinfurt Chamber of Industry and Commerce (IHK) (see e.g. here: https://remote-sensing.org/exploring-new-space-opportunities-in-mainfranken/ ), we have established a collaboration between...

Share This