[gdal-dev] To to create HDF4 files for GDAL

Andreas H. lists at hilboll.de
Thu Jan 5 09:15:47 EST 2012

Hi there,

when creating HDF4 files outside of GDAL, which metadata do I have to
write to
the file such that GDAL can subsequently correctly read the data? In the docs
I read that only HDF4 files created with GDAL or certain other HDF4 types are
recognized. However, the files are created "by hand" using the HDF4 API from
Delphi. I would like to modify this creation in a way such that GDAL can read
the data.

The HDF files follow the "Scientific DataSet (SDS)" standard. When reading
the files with GDAL, it looks like this:

   $ gdalinfo datafile.hdf
   Driver: HDF4Image/HDF4 Dataset
   Files: datafile.hdf
   Size is 2880, 1440
   Coordinate System is `'
     long_name=VCDstrat NO2
   Corner Coordinates:
   Upper Left  (    0.0,    0.0)
   Lower Left  (    0.0, 1440.0)
   Upper Right ( 2880.0,    0.0)
   Lower Right ( 2880.0, 1440.0)
   Center      ( 1440.0,  720.0)
   Band 1 Block=2880x347 Type=Float32, ColorInterp=Gray

Obviously, georeferencing is not working. What do I need to do to the HDF4
file to fix this?

Thanks for your insight,


PS: In case anyone is interested, here's the reason why I want to do this:

I have a whole lot of HDF4-SDS files which I want to plot using GMT. So I
thought using gdal_translate to convert the HDF4 to GRD would be the easiest
solution. I'm using GDAL 1.8.1 .

However, I'm running into problems which I'm detailing below:

I guess the problem is that GDAL doesn't read the SDS's latitude/longitude
information. When converting this file then to GMT's grd format, I get a
warning, which I guess doesn't really matter too much:

   $ gdal_translate -of GMT datafile.hdf test.grd
   Warning 6: A dataset opened by GDALOpenShared should have the same
filename (datafile.hdf) and description
   Input file size is 2880, 1440

The resulting grd file looks like this:

   $ gdalinfo test.grd
   Driver: GMT/GMT NetCDF Grid Format
   Files: test.grd
   Size is 2880, 1440
   Coordinate System is `'
   Origin = (0.000000000000000,0.000000000000000)
   Pixel Size = (1.000000000000000,1.000000000000000)
     long_name=VCDstrat NO2
   Corner Coordinates:
   Upper Left  (   0.0000000,   0.0000000)
   Lower Left  (       0.000,    1440.000)
   Upper Right (    2880.000,       0.000)
   Lower Right (    2880.000,    1440.000)
   Center      (    1440.000,     720.000)
   Band 1 Block=2880x1 Type=Float32, ColorInterp=Gray

When I now try to plot this file using grdimage, I get the following:

   grdimage: GMT ERROR: grid y increment <= 0.0
   grdimage: Use grdedit -A on your grid file to make region and
increments compatible [test.grd]

However, running the suggested grdedit -A test.grd doesn't change a thing ...

More information about the gdal-dev mailing list