[gdal-dev] Potential issue with Sentinel-1 SAFE driver

Julien Michel julien.michel at cnes.fr
Fri May 13 06:16:29 PDT 2016


Dear all,

I recently gave a try to the Sentinel-1 SAFE driver and I came accross 
something that to my opinion is conceptually wrong.

A Sentinel 1 product consists in one or several tiff file along with 
their annotation files. Dependening on product level and acquisition 
mode, those tiff files correspond to different polarimetric 
configurations (hh and hv), and/or different swath. All those images are 
referenced in a single entry point, which is the manifest.safe file at 
product root folder.

For instance, in extra-wide swath mode, I have the following:
$ ls -1 measurement/ annotation/
annotation/:
s1a-ew-grd-hh-20160117t204113-20160117t204213-009539-00ddc4-001.xml
s1a-ew-grd-hv-20160117t204113-20160117t204213-009539-00ddc4-002.xml

measurement/:
s1a-ew-grd-hh-20160117t204113-20160117t204213-009539-00ddc4-001.tiff
s1a-ew-grd-hv-20160117t204113-20160117t204213-009539-00ddc4-002.tiff

Which means I have dual polarisation on the same swath.

In this case, if I gdalinfo manifest.safe, I get :

Driver: SAFE/Sentinel-1 SAR SAFE Product
Files: manifest.safe
measurement/s1a-ew-grd-hh-20160117t204113-20160117t204213-009539-00ddc4-001.tiff
measurement/s1a-ew-grd-hv-20160117t204113-20160117t204213-009539-00ddc4-002.tiff
[...]
Band 1 Block=16753x1 Type=UInt16, ColorInterp=Undefined
   Metadata:
     POLARISATION=HH
Band 2 Block=16753x1 Type=UInt16, ColorInterp=Undefined
   Metadata:
     POLARISATION=HV

So gdal exposes the full dataset as one image of two bands (one for each 
polarization channel), which is fine (but one could argue that 
representing this as 2 subdatasets would be better).

Now, if I consider an IW product :

$ ls -1 measurement/ annotation/

calibration/:
s1a-iw1-slc-vh-20160114t054006-20160114t054031-009486-00dc3c-001.xml
s1a-iw1-slc-vv-20160114t054006-20160114t054031-009486-00dc3c-004.xml
s1a-iw2-slc-vh-20160114t054007-20160114t054032-009486-00dc3c-002.xml
s1a-iw2-slc-vv-20160114t054007-20160114t054032-009486-00dc3c-005.xml
s1a-iw3-slc-vh-20160114t054005-20160114t054030-009486-00dc3c-003.xml
s1a-iw3-slc-vv-20160114t054005-20160114t054030-009486-00dc3c-006.xml

measurement/:
s1a-iw1-slc-vh-20160114t054006-20160114t054031-009486-00dc3c-001.tiff
s1a-iw1-slc-vv-20160114t054006-20160114t054031-009486-00dc3c-004.tiff
s1a-iw2-slc-vh-20160114t054007-20160114t054032-009486-00dc3c-002.tiff
s1a-iw2-slc-vv-20160114t054007-20160114t054032-009486-00dc3c-005.tiff
s1a-iw3-slc-vh-20160114t054005-20160114t054030-009486-00dc3c-003.tiff
s1a-iw3-slc-vv-20160114t054005-20160114t054030-009486-00dc3c-006.tiff


This time we have 3 different swath (corresponding to different ground 
footprints), and 2 polarisations for each swath.

In this case, if I gdalinfo manifest.safe, I get :

Driver: SAFE/Sentinel-1 SAR SAFE Product
Files: manifest.safe
measurement/s1a-iw1-slc-vh-20160114t054006-20160114t054031-009486-00dc3c-001.tiff
measurement/s1a-iw2-slc-vh-20160114t054007-20160114t054032-009486-00dc3c-002.tiff
measurement/s1a-iw3-slc-vh-20160114t054005-20160114t054030-009486-00dc3c-003.tiff
measurement/s1a-iw1-slc-vv-20160114t054006-20160114t054031-009486-00dc3c-004.tiff
measurement/s1a-iw2-slc-vv-20160114t054007-20160114t054032-009486-00dc3c-005.tiff
measurement/s1a-iw3-slc-vv-20160114t054005-20160114t054030-009486-00dc3c-006.tiff
[...]
Band 1 Block=22015x1 Type=CInt16, ColorInterp=Undefined
   Metadata:
     POLARISATION=VH
Band 2 Block=25844x1 Type=CInt16, ColorInterp=Undefined
   Metadata:
     POLARISATION=VH
Band 3 Block=24889x1 Type=CInt16, ColorInterp=Undefined
   Metadata:
     POLARISATION=VH
Band 4 Block=22015x1 Type=CInt16, ColorInterp=Undefined
   Metadata:
     POLARISATION=VV
Band 5 Block=25844x1 Type=CInt16, ColorInterp=Undefined
   Metadata:
     POLARISATION=VV
Band 6 Block=24889x1 Type=CInt16, ColorInterp=Undefined
   Metadata:
     POLARISATION=VV

This is obviously wrong, since pixels in each swath correspond to 
different observed ground points. In other word, there is no meaning in 
stacking the response of pixel (0,0) of swath one with pixel (0,0) of 
swath two, since they do not observe the same target landscape.

I think the best would be to report at least the different swath as 
subdatasets (as done in S2 driver). For the sake of simplicity, 
polarisations too could be exposed as subdatasets.

What do you think ?

Regards,

Julien

-- 
Julien MICHEL
CNES - DCT/SI/AP



More information about the gdal-dev mailing list