[gdal-dev] Help working with hdf5 images

Stephen Woodbridge woodbri at swoodbridge.com
Sun Feb 19 20:32:56 PST 2017


On 2/19/2017 10:15 AM, Stephen Woodbridge wrote:
> Hi all,
>
> I'm trying to create GTiff files from IMARS Modis hdf5 images. I did
> something like this about 3-4 years ago when they were using hdf4
> datasets but things have changed since then. So I have two questions:
>
> 1. How do I extract the sst data (subdataset 3) into a GTiff and create
> a mask band from the sst_count (subdataset 4) which has value 0 or 1,
> where 1 is valid sst data?

OK, I think I have figured out part of this:

gdal_translate -of GTiff -a_srs EPSG:4326 -a_ullr $ullr -sds infile.h5 
tempfile

echo tempfile3 > temp.in  # add sds 3 the sst data
echo tempfile4 >> temp.in # add sds 4 the stt_count data

# stack the bands
gdalbuildvrt -separate -input_file_list temp.in tempfile.vrt

create a tif with mask from the stacked bands
gdal_translate -b 1 -mask 2 -co TILED=YES -ot Int16 -scale 0 50 0 10000 
tempfile.vrt tempfile.tif

# tile areas for a given time slot
gdal_merge -of GTiff -co TILED=YES -ot Int16 -o target.tif <list of files>

# manually create a vrt file with color table for target.tif (target.vrt)

# and for debug visualization
gdal_translate -of PNG -scale 0 10000 target.vrt target.png

This still has problems with the adjacent overlapping areas not being 
georeferenced correctly and the mask is not getting applied during the 
merge as can be seen here:

http://imaptools.com:8080/dl/IMARS_SST-201702190815.png

You can see that the lower left image has another layered on top of it 
shifted north and east and then image has a square corner of black 
blotting out part of the lower left image. The IMARS data has gcoos and 
seacoos areas that overlap but for the same time slot the images should 
be able to be merged.

-Steve

> 2. The data is in Equidistant_Cylindrical / World Geodetic System 1984
> which does not seem to be represent able as a proj4 format and I need to
> reproject into EPSG:4326
>
> In the past I used the both the gcoos and seacoos images for a given
> time slot like:
>
> gdal_translate -of GTiff -ot Int16 -a_srs EPSG:4326  -a_ullr $ullr
> -scale 0 50 0 10000 $filename $tmpfile
>
> where $ullr is correct for the image and then used gdal_merge to combine
> the two images using:
>
> gdal_merge -of GTiff -co TILED=YES -ot Int16 -o $target <list of input
> files>
>
> But this does not work because when I merge the images they are offset
> and I need to apply the mask so the images are transparent where there
> is no data.
>
> I guess this is my week to ask lots of gdal related question.
>
> Thanks,
>   -Steve
>
> ftp://imars.marine.usf.edu/modis/imars/final/pass/1km/sst/gcoos/2017.02/aqua.20170217.0645.gcoos.sst.h5
>
>
> ----------------------------------------------- hdf5 file --------------
> $ gdalinfo aqua.20170217.0645.gcoos.sst.h5
> Driver: HDF5/Hierarchical Data Format Release 5
> Files: aqua.20170217.0645.gcoos.sst.h5
> Size is 512, 512
> Coordinate System is `'
> Metadata:
>   bands_l2_flags_CLASS=IMAGE
>   bands_l2_flags_count_CLASS=IMAGE
>   bands_l2_flags_count_description=Count of l2_flags
>   bands_l2_flags_count_IMAGE_VERSION=1.2
>   bands_l2_flags_count_log10_scaled=false
>   bands_l2_flags_count_raster_height=1447
>   bands_l2_flags_count_raster_width=2115
>   bands_l2_flags_count_scaling_factor=1
>   bands_l2_flags_count_scaling_offset=0
>   bands_l2_flags_description=l2_flags
>   bands_l2_flags_IMAGE_VERSION=1.2
>   bands_l2_flags_log10_scaled=false
>   bands_l2_flags_raster_height=1447
>   bands_l2_flags_raster_width=2115
>   bands_l2_flags_scaling_factor=1
>   bands_l2_flags_scaling_offset=0
>   bands_sst_CLASS=IMAGE
>   bands_sst_count_CLASS=IMAGE
>   bands_sst_count_description=Count of sst
>   bands_sst_count_IMAGE_VERSION=1.2
>   bands_sst_count_log10_scaled=false
>   bands_sst_count_raster_height=1447
>   bands_sst_count_raster_width=2115
>   bands_sst_count_scaling_factor=1
>   bands_sst_count_scaling_offset=0
>   bands_sst_description=sst
>   bands_sst_IMAGE_VERSION=1.2
>   bands_sst_log10_scaled=false
>   bands_sst_raster_height=1447
>   bands_sst_raster_width=2115
>   bands_sst_scaling_factor=1
>   bands_sst_scaling_offset=0
>   metadata_Processing_Graph_node.0_authors=Marco Peters, Ralf Quast,
> Marco Zühlk
>   metadata_Processing_Graph_node.0_copyright=(c) 2009 by Brockmann Consult
>   metadata_Processing_Graph_node.0_id=Mosaic$15A4BDE1324
>   metadata_Processing_Graph_node.0_moduleName=beam-gpf
>   metadata_Processing_Graph_node.0_moduleVersion=5.0.5
>   metadata_Processing_Graph_node.0_operator=Mosaic
>   metadata_Processing_Graph_node.0_parameters_combine=OR
>
> metadata_Processing_Graph_node.0_parameters_crs=PROJCS["Equidistant_Cylindrical
> / 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["Equidistant_Cylindrical"],
>       PARAMETER["central_meridian", 0.0],
>       PARAMETER["latitude_of_origin", 0.0],
>       PARAMETER["standard_parallel_1", 0.0],
>       PARAMETER["false_easting", 0.0],
>       PARAMETER["false_northing", 0.0],
>       UNIT["m", 1.0],
>       AXIS["Easting", EAST],
>       AXIS["Northing", NORTH]]
>   metadata_Processing_Graph_node.0_parameters_eastBound=-79.0
>   metadata_Processing_Graph_node.0_parameters_northBound=31.0
>   metadata_Processing_Graph_node.0_parameters_orthorectify=false
>   metadata_Processing_Graph_node.0_parameters_pixelSizeX=1000.0
>   metadata_Processing_Graph_node.0_parameters_pixelSizeY=1000.0
>   metadata_Processing_Graph_node.0_parameters_resampling=Nearest
>   metadata_Processing_Graph_node.0_parameters_southBound=18.0
>
> metadata_Processing_Graph_node.0_parameters_variables_variable.0_expression=sst
>
>   metadata_Processing_Graph_node.0_parameters_variables_variable.0_name=sst
>
> metadata_Processing_Graph_node.0_parameters_variables_variable.1_expression=l2_flags
>
>
> metadata_Processing_Graph_node.0_parameters_variables_variable.1_name=l2_flags
>
>   metadata_Processing_Graph_node.0_parameters_westBound=-98.0
>   metadata_Processing_Graph_node.0_processingTime=2017-02-17T11:38:49.524Z
>   metadata_Processing_Graph_node.0_purpose=Creates a mosaic out of a set
> of source products.
>
> metadata_Processing_Graph_node.0_sources_sourceProduct.1=file:/home/ipopp/temp/aqua.SST.FILTERED.17048065000_mapped.dim
>
>
> metadata_Processing_Graph_node.0_sources_sourceProduct.2=file:/home/ipopp/temp/aqua.SST.FILTERED.17048065500_mapped.dim
>
>   metadata_Processing_Graph_node.0_version=1.0
> Subdatasets:
>   SUBDATASET_1_NAME=HDF5:"aqua.20170217.0645.gcoos.sst.h5"://bands/l2_flags
>   SUBDATASET_1_DESC=[1447x2115] //bands/l2_flags (32-bit floating-point)
>
> SUBDATASET_2_NAME=HDF5:"aqua.20170217.0645.gcoos.sst.h5"://bands/l2_flags_count
>
>   SUBDATASET_2_DESC=[1447x2115] //bands/l2_flags_count (32-bit integer)
>   SUBDATASET_3_NAME=HDF5:"aqua.20170217.0645.gcoos.sst.h5"://bands/sst
>   SUBDATASET_3_DESC=[1447x2115] //bands/sst (32-bit floating-point)
>
> SUBDATASET_4_NAME=HDF5:"aqua.20170217.0645.gcoos.sst.h5"://bands/sst_count
>   SUBDATASET_4_DESC=[1447x2115] //bands/sst_count (32-bit integer)
> Corner Coordinates:
> Upper Left  (    0.0,    0.0)
> Lower Left  (    0.0,  512.0)
> Upper Right (  512.0,    0.0)
> Lower Right (  512.0,  512.0)
> Center      (  256.0,  256.0)
>
> -------------- HDF5:"aqua.20170217.0645.gcoos.sst.h5"://bands/sst -----
> $ gdalinfo HDF5:"aqua.20170217.0645.gcoos.sst.h5"://bands/sst
> Driver: HDF5Image/HDF5 Dataset
> Files: aqua.20170217.0645.gcoos.sst.h5
>        aqua.20170217.0645.gcoos.sst.h5.aux.xml
> Size is 2115, 1447
> Coordinate System is `'
> Metadata:
>   metadata_Processing_Graph_node.0_authors=Marco Peters, Ralf Quast,
> Marco Zühlk
>   metadata_Processing_Graph_node.0_copyright=(c) 2009 by Brockmann Consult
>   metadata_Processing_Graph_node.0_id=Mosaic$15A4BDE1324
>   metadata_Processing_Graph_node.0_moduleName=beam-gpf
>   metadata_Processing_Graph_node.0_moduleVersion=5.0.5
>   metadata_Processing_Graph_node.0_operator=Mosaic
>   metadata_Processing_Graph_node.0_parameters_combine=OR
>
> metadata_Processing_Graph_node.0_parameters_crs=PROJCS["Equidistant_Cylindrical
> / 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["Equidistant_Cylindrical"],
>       PARAMETER["central_meridian", 0.0],
>       PARAMETER["latitude_of_origin", 0.0],
>       PARAMETER["standard_parallel_1", 0.0],
>       PARAMETER["false_easting", 0.0],
>       PARAMETER["false_northing", 0.0],
>       UNIT["m", 1.0],
>       AXIS["Easting", EAST],
>       AXIS["Northing", NORTH]]
>   metadata_Processing_Graph_node.0_parameters_eastBound=-79.0
>   metadata_Processing_Graph_node.0_parameters_northBound=31.0
>   metadata_Processing_Graph_node.0_parameters_orthorectify=false
>   metadata_Processing_Graph_node.0_parameters_pixelSizeX=1000.0
>   metadata_Processing_Graph_node.0_parameters_pixelSizeY=1000.0
>   metadata_Processing_Graph_node.0_parameters_resampling=Nearest
>   metadata_Processing_Graph_node.0_parameters_southBound=18.0
>
> metadata_Processing_Graph_node.0_parameters_variables_variable.0_expression=sst
>
>   metadata_Processing_Graph_node.0_parameters_variables_variable.0_name=sst
>
> metadata_Processing_Graph_node.0_parameters_variables_variable.1_expression=l2_flags
>
>
> metadata_Processing_Graph_node.0_parameters_variables_variable.1_name=l2_flags
>
>   metadata_Processing_Graph_node.0_parameters_westBound=-98.0
>   metadata_Processing_Graph_node.0_processingTime=2017-02-17T11:38:49.524Z
>   metadata_Processing_Graph_node.0_purpose=Creates a mosaic out of a set
> of source products.
>
> metadata_Processing_Graph_node.0_sources_sourceProduct.1=file:/home/ipopp/temp/aqua.SST.FILTERED.17048065000_mapped.dim
>
>
> metadata_Processing_Graph_node.0_sources_sourceProduct.2=file:/home/ipopp/temp/aqua.SST.FILTERED.17048065500_mapped.dim
>
>   metadata_Processing_Graph_node.0_version=1.0
> Corner Coordinates:
> Upper Left  (    0.0,    0.0)
> Lower Left  (    0.0, 1447.0)
> Upper Right ( 2115.0,    0.0)
> Lower Right ( 2115.0, 1447.0)
> Center      ( 1057.5,  723.5)
> Band 1 Block=2115x1 Type=Float32, ColorInterp=Undefined
>   Min=0.000 Max=27.285
>   Minimum=0.000, Maximum=27.285, Mean=1.329, StdDev=5.395
>   Metadata:
>     bands_sst_CLASS=IMAGE
>     bands_sst_description=sst
>     bands_sst_IMAGE_VERSION=1.2
>     bands_sst_log10_scaled=false
>     bands_sst_raster_height=1447
>     bands_sst_raster_width=2115
>     bands_sst_scaling_factor=1
>     bands_sst_scaling_offset=0
>     STATISTICS_MAXIMUM=27.284999847412
>     STATISTICS_MEAN=1.3292428022154
>     STATISTICS_MINIMUM=0
>     STATISTICS_STDDEV=5.3949041458808
>
> ---
> This email has been checked for viruses by Avast antivirus software.
> https://www.avast.com/antivirus
>
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/gdal-dev


---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus



More information about the gdal-dev mailing list