[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