[gdal-dev] another problem HDF5

Even Rouault even.rouault at spatialys.com
Tue Apr 30 06:04:35 PDT 2024


Hi,

oh well, so this i actually a HDF5 file using netCDF conventions, but 
likely created with the HDF5 API itself. Per se, this isn't the issue, 
as you've figured it, we can convince the netCDF driver to open it. The 
lack of CRS comes from the fact that the land_mask_map variable has this 
attribute:

                 land_mask_map:grid_mapping = "crs: grid_x crs: grid_y" ;

Which tries to point to the "crs" variable where the CRS is defined. In 
99% of the products, the value of grid_mapping would be just "crs", and 
life would be good.

Here they use the "second format" for grid_mapping, described at 
https://cfconventions.org/Data/cf-conventions/cf-conventions-1.11/cf-conventions.html#grid-mappings-and-projections

"In the second format, it is a blank-separated list of words 
"<gridMappingVariable>: <coordinatesVariable> [<coordinatesVariable> …​] 
[<gridMappingVariable>: <coordinatesVariable>…​]", which identifies one 
or more grid mapping variables, and with each grid mapping associates 
one or more coordinatesVariables, i.e. coordinate variables or auxiliary 
coordinate variables."

That documentation isn't 100% crystal clear but the later example 5.10 
"British National Grid" gives an example:

temp:grid_mapping = "crsOSGB: x y crsWGS84: lat lon" ;

So you can point to several crs variables, but for each you need to 
define *all* the relevant axis. The way it is done in the product you 
point doesn't match that philosophy (if they wanted to use the second 
format that should rather set "crs: grid_x grid_y", but using the second 
format here is just asking for troubles), and GDAL doesn't manage to 
parse it.

You could tune netCDFDataset::SetProjectionFromVar() to recognize this 
weird value for grid_mapping in netCDFDataset::SetProjectionFromVar(), 
around line 3287, but I don't feel myself personally motivated to do 
that, if that product is just an outlier, so I leave it to you as an 
exercise if you wish :-). I guess just testing against the hardcoded 
"crs: grid_x crs: grid_y" value would be good enough to handle that outlier.

(Someone, super bored, should author a book about with horror stories 
with netCDF and HDF georeferencing. There's a lot of material. Although 
likely not to be a best seller)

Even

Le 30/04/2024 à 09:45, Michael Sumner via gdal-dev a écrit :
> This time, with:
>
> https://n5eil01u.ecs.nsidc.org/ATLAS/ATL20.004/2018.10.14/ATL20-01_20181001010615_00370101_004_01.h5
>
> NETCDF gets the geotransform (from x_grid,y_grid which report in the 
> metadata) but no crs:
>
>   gdalinfo NETCDF:ATL20-02_20181001010615_00370101_004_01.h5 -sd 1 -nomd
> Driver: netCDF/Network Common Data Format
> Files: ATL20-02_20181001010615_00370101_004_01.h5
> Size is 316, 332
> Origin = (-3950000.000000000000000,4350000.000000000000000)
> Pixel Size = (25000.000000000000000,-25000.000000000000000)
> Corner Coordinates:
> Upper Left  (-3950000.000, 4350000.000)
> Lower Left  (-3950000.000,-3950000.000)
> Upper Right ( 3950000.000, 4350000.000)
> Lower Right ( 3950000.000,-3950000.000)
> Center      (       0.000,  200000.000)
> Band 1 Block=500x500 Type=Float64, ColorInterp=Undefined
>   Unit Type: degrees_north
>
>
> HDF5 doesn't get geotransform or crs:
>
> gdalinfo ATL20-02_20181001010615_00370101_004_01.h5 -sd 1 -nomd
> Driver: HDF5Image/HDF5 Dataset
> Files: ATL20-02_20181001010615_00370101_004_01.h5
> Size is 316, 332
> Corner Coordinates:
> Upper Left  (    0.0,    0.0)
> Lower Left  (    0.0,  332.0)
> Upper Right (  316.0,    0.0)
> Lower Right (  316.0,  332.0)
> Center      (  158.0,  166.0)
> Band 1 Block=500x500 Type=Float32, ColorInterp=Undefined
>   NoData Value=3.4028235e+38
>
> This is unproblematically NSIDC 25km south, there's no mix of poles in 
> this one. I honestly don't know what to expect from these files 
> generally though I get my hopes up sometimes haha.
>
> I'll have to keep notes and explore more deeply with native HDF5 tools.
>
> Cheers, Mike
>
>
>
>
> -- 
> Michael Sumner
> Software and Database Engineer
> Australian Antarctic Division
> Hobart, Australia
> e-mail: mdsumner at gmail.com
>
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/gdal-dev

-- 
http://www.spatialys.com
My software is free, but my time generally not.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20240430/51b20ccf/attachment.htm>


More information about the gdal-dev mailing list