[gdal-dev] 2D multiband to 3D MULTIDIM results in duplicated "x" dimension

Michael Sumner mdsumner at gmail.com
Mon Oct 14 05:10:47 PDT 2024


Possibly this is a fool's errand ...

I want to be able to cast an RGBA file as a Zarr, so first to cast as
multidim I tried the CreateCopy route with NetCDF and I see dimension "x"
repeated, with "y" missing. (I'm using an external file as the existing
test PNG files are square in shape).

from osgeo import gdal

## PNG source is 100x76 * 4 bands
f = "/vsicurl/
https://github.com/cran/png/blob/master/inst/img/Rlogo.png?raw=true"
src_ds = gdal.Open(f)

## set NetCDF metadata to make Bands 0,1,2,3 a Z dimension
size_z = 4
src_ds.SetMetadataItem('NETCDF_DIM_EXTRA', '{Z}')
src_ds.SetMetadataItem('NETCDF_DIM_Z_DEF', f"{{{size_z},4}}")
src_ds.SetMetadataItem('NETCDF_DIM_Z_VALUES', '{1.25,2.50}')
src_ds.SetMetadataItem('Z#axis', 'Z')

# Create netCDF file
gdal.GetDriverByName('netCDF').CreateCopy('out.nc', src_ds)

## investigate shape as a mdim
ds = gdal.OpenEx("out.nc",  gdal.OF_MULTIDIM_RASTER)
rootGroup = ds.GetRootGroup()
var = rootGroup.OpenMDArray("Band1")

## we ended up with x,x,Z
[dim.GetSize() for  dim in  var.GetDimensions()]
#[4, 100, 100]


That looks like a bug?

And, is there a better way to go about this?  PNG->ZARR is my target, I'm
fine with programmatic creation of NetCDF, but this could be quite handy as
a two-step conversion from pseudo-3D to actual 3D via the cli with
"gdal_translate -mo ...". (This is not for real work fwiw, just for me
programming at the edges of Zarr, with examples that are clear in visual
terms).

Cheers, Mike




-- 
Michael Sumner
Research Software Engineer
Australian Antarctic Division
Hobart, Australia
e-mail: mdsumner at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20241014/10e440ce/attachment.htm>


More information about the gdal-dev mailing list