S1 tif export problem using pthon snappy

Can you please figure out what is the problem…why the output is not showing in .tif or dimap format when overall the code is running 100 percent with no errors. however am attaching the full code

import sys
sys.path.append(‘/home/siddharth/trambak/snappy’)

import datetime
import time
import snappy
import os, gc
from snappy import GPF

def do_apply_orbit_file(source):
print(‘\tApply orbit file…’)
parameters = snappy.HashMap()
parameters.put(‘Apply-Orbit-File’, True)
output = GPF.createProduct(‘Apply-Orbit-File’, parameters, source)
parameters.put(‘orbitType’, ‘Sentinel Precise (Auto Download)’)
return output

def do_thermal_noise_removal(source):
print(‘\tThermal noise removal…’)
parameters = snappy.HashMap()
parameters.put(‘removeThermalNoise’, True)
output = GPF.createProduct(‘ThermalNoiseRemoval’, parameters, source)
return output

def do_calibration(source, polarization, pols):
print(‘\tCalibration…’)
parameters = snappy.HashMap()
parameters.put(‘outputSigmaBand’, True)
if polarization == ‘DH’:
parameters.put(‘sourceBands’, ‘Intensity_HH,Intensity_HV’)
elif polarization == ‘DV’:
parameters.put(‘sourceBands’, ‘Intensity_VH,Intensity_VV’)
elif polarization == ‘SH’ or polarization == ‘HH’:
parameters.put(‘sourceBands’, ‘Intensity_HH’)
elif polarization == ‘SV’:
parameters.put(‘sourceBands’, ‘Intensity_VV’)
else:
print(“different polarization!”)
parameters.put(‘selectedPolarisations’, pols)
parameters.put(‘outputImageScaleInDb’, False)
output = GPF.createProduct(“Calibration”, parameters, source)
return output

def do_speckle_filtering(source):
print(‘\tSpeckle filtering…’)
parameters = snappy.HashMap()
parameters.put(‘filter’, ‘Lee’)
parameters.put(‘filterSizeX’, 5)
parameters.put(‘filterSizeY’, 5)
output = GPF.createProduct(‘Speckle-Filter’, parameters, source)
return output

def do_terrain_correction(source, proj, downsample):
print(‘\tTerrain correction…’)
parameters = snappy.HashMap()
parameters.put(‘demName’, ‘GETASSE30’)
parameters.put(‘imgResamplingMethod’, ‘BILINEAR_INTERPOLATION’)
parameters.put(‘mapProjection’, proj) # comment this line if no need to convert to UTM/WGS84, default is WGS84
parameters.put(‘saveProjectedLocalIncidenceAngle’, True)
parameters.put(‘saveSelectedSourceBand’, True)
while downsample == 1: # downsample: 1 – need downsample to 40m, 0 – no need to downsample
parameters.put(‘pixelSpacingInMeter’, 40.0)
break
output = GPF.createProduct(‘Terrain-Correction’, parameters, source)
return output

def do_subset(source, wkt):
print(‘\tSubsetting…’)
parameters = snappy.HashMap()
parameters.put(‘geoRegion’, wkt)
output = GPF.createProduct(‘Subset’, parameters, source)
return output

def main():
## All Sentinel-1 data sub folders are located within a super folder (make sure the data is already unzipped and each sub folder name ends with ‘.SAFE’):
path = “data/s1_images”
outpath = “data/s1_preprocessed”
if not os.path.exists(outpath):
os.makedirs(outpath)
## well-known-text (WKT) file for subsetting (can be obtained from SNAP by drawing a polygon)
wkt = ‘POLYGON((85.2786340943649 19.98143168402237,86.11037335501074 20.025747032929132,86.31187754046424 19.618385502024594,84.86705195938421 19.128997288585452,85.2786340943649 19.98143168402237))’
## UTM projection parameters
proj = ‘’‘PROJCS[“UTM Zone 4 / World Geodetic System 1984”,GEOGCS[“World Geodetic System 1984”,DATUM[“World Geodetic System 1984”,SPHEROID[“WGS 84”, 6378137.0, 298.257223563, AUTHORITY[“EPSG”,“7030”]],AUTHORITY[“EPSG”,“6326”]],PRIMEM[“Greenwich”, 0.0, AUTHORITY[“EPSG”,“8901”]],UNIT[“degree”, 0.017453292519943295],AXIS[“Geodetic longitude”, EAST],AXIS[“Geodetic latitude”, NORTH]],PROJECTION[“Transverse_Mercator”],PARAMETER[“central_meridian”, -159.0],PARAMETER[“latitude_of_origin”, 0.0],PARAMETER[“scale_factor”, 0.9996],PARAMETER[“false_easting”, 500000.0],PARAMETER[“false_northing”, 0.0],UNIT[“m”, 1.0],AXIS[“Easting”, EAST],AXIS[“Northing”, NORTH]]’‘’

print(os.listdir('data/s1_images'))

for folder in os.listdir(path):
    gc.enable()
    gc.collect()
    print(path + "/" + folder + "/manifest.safe")
    sentinel_1 = snappy.ProductIO.readProduct(path + "/" + folder + "/manifest.safe")

    snappy.ProductIO.writeProduct(sentinel_1, outpath + "/" + folder[:-5] + "_401.jp2", 'JPEG2000')
    print(sentinel_1)

    loopstarttime=str(datetime.datetime.now())
    print('Start time:', loopstarttime)
    start_time = time.time()

    ## Extract mode, product type, and polarizations from filename
    modestamp = folder.split("_")[1]
    productstamp = folder.split("_")[2]
    polstamp = folder.split("_")[3]

    polarization = polstamp[2:4]
    if polarization == 'DV':
        pols = 'VH,VV'
    elif polarization == 'DH':
        pols = 'HH,HV'
    elif polarization == 'SH' or polarization == 'HH':
        pols = 'HH'
    elif polarization == 'SV':
        pols = 'VV'
    else:
        print("Polarization error!")

    ## Start preprocessing:
    applyorbit = do_apply_orbit_file(sentinel_1)
    thermaremoved = do_thermal_noise_removal(applyorbit)
    calibrated = do_calibration(thermaremoved, polarization, pols)
    down_filtered = do_speckle_filtering(calibrated)
    del applyorbit
    del thermaremoved
    del calibrated
    ## IW images are downsampled from 10m to 40m (the same resolution as EW images).
    if (modestamp == 'IW' and productstamp == 'GRDH') or (modestamp == 'EW' and productstamp == 'GRDH'):
        down_tercorrected = do_terrain_correction(down_filtered, proj, 1)
        #snappy.ProductIO.writeProduct(down_tercorrected, outpath + "/" + folder[:-5] + "_40.csv", 'CSV')
        print(outpath + "/" + folder[:-5] + "_40.jp2")
        down_subset = do_subset(down_tercorrected, wkt)
        snappy.ProductIO.writeProduct(down_subset, outpath + "/" + folder[:-5] + "_40.jp2", 'JPEG2000')
        del down_filtered
        del down_tercorrected
    elif modestamp == 'EW' and productstamp == 'GRDM':
        tercorrected = do_terrain_correction(down_filtered, proj, 0)            
        snappy.ProductIO.writeProduct(tercorrected, outpath + "/" + folder[:-5] + "_40.jp2", 'JPEG2000')
        subset = do_subset(tercorrected, wkt)
        del down_filtered
        del tercorrected
    else:
        print("Different spatial resolution is found.")

    down = 1
    try: down_subset
    except NameError:
        down = None
    if down is None:
        print("Writing...")

        snappy.ProductIO.writeProduct(subset, outpath + "/" + folder[:-5], 'JPEG2000')
        del subset
    elif down == 1:
        print("Writing undersampled image...")

snappy.ProductIO.writeProduct(down_subset, outpath + “/” + folder[:-5] + “_40.csv”, ‘CSV’)

        del down_subset
    else:
        print("Error.")


    print('Done.')
    sentinel_1.dispose()
    sentinel_1.closeIO()
    print("--- %s seconds ---" % (time.time() - start_time))

if name== “main”:
main()

Microwave Toolbox snap python

for reference i need to develope a python model for risat 1 eos04 preprocessing, however i am testing first using sentinel 1 data in python interface for case study area of Puri for 5th May,2019.

@dolaf , could you help?
Thank you

Hello,

thanls for your report, but I do not yet fully understand your code. You say you want to write your output as tif, but from your statement

snappy.ProductIO.writeProduct(subset, outpath + "/" + folder[:-5], 'JPEG2000')

you obviously try to write as JPEG2000, and further below in a similar way as CSV. Is that really what you want? For tif, you would need ‘GeoTIFF’ rather than ‘JPEG2000’ as 3rd parameter.

Apart from that, it seems that you are using a rather old software version (still importing ‘snappy’ instead of ‘esa_snappy’, which means SNAP 9 or even lower). If this works for you, fine, but in general we recommend to move to the latest SNAP (version 11 currently, with 12 coming up very soon)…

Cheers,
Olaf

Thankyou for the help @dolaf @diana_harosa .
However i have certain queries…

  1. Does snap 11 support direct python install just like snap 8 or 9 during setup? If so how or if not then how to integrate the two?
  2. Can you provide any recent code or github repository as an example of how to preprocess sentinel 1 with esa_snappy?

Thankyou

In SNAP 11, esa-snappy must be installed like an external plugin via SNAP Desktop → Plugin Manager. The steps are detailed in Installation of the esa_snappy plugin.