[gdal-dev] Motion: adopt RFC 75: Multidimensional array

Even Rouault even.rouault at spatialys.com
Thu Jul 18 08:48:56 PDT 2019


Hi,

> 
> I am in favour of the work on multi-dimensional arrays. There are two open
> PRs https://github.com/rouault/gdal/pulls with changes to the text. 

Oh I didn't see them before. I've merged the first one from Edzer. Answering 
yours now:

> Though
> I and my employer would like TileDB included in the list of formats (though
> happy to wait until I have added the code to support this) 

I'd prefer to limit the scope of the RFC to the drivers I'll take care of. 
Other contributors are welcome to implement it for their own drivers of 
interest once this has landed into master.

> the issues
> around dimension ordering

https://github.com/rouault/gdal/blob/rfc75/gdal/doc/source/user/
multidim_raster_data_model.rst mentions

"""Most drivers use the row-major convention for dimensions: that is, when 
considering that the array elemnts are stored consecutively in memory, the 
first dimension is the slowest varying one (in a 2D image, the row), and the 
last dimension the fastest varying one (in a 2D image, the colum). That 
convention is the default convention used for NumPy arrays, the MEM driver and 
the HDF5 and netCDF APIs. The GDAL API is mostly agnostic about that 
convention, except when passing a NULL array as the stride parameter for the 
:cpp:func:`GDALAbstractMDArray::Read` and 
:cpp:func:`GDALAbstractMDArray::Write` methods. You can refer to NumPy 
documentation about multidimensional array indeing order issues:
https://docs.scipy.org/doc/numpy/reference/internals.html#multidimensional-array-indexing-order-issues """

Does that answer your concern / question ?

> and defining NULL are two things I would like to
> discuss.

Yes, nodata support is there. Mentionned in
https://github.com/rouault/gdal/blob/rfc75/gdal/doc/source/user/
multidim_raster_data_model.rst#multidimensional-array

and in the C++ API:
https://github.com/rouault/gdal/blob/rfc75/gdal/gcore/gdal_priv.h#L2257

so 2 virtual methods that can be implemented by drivers:
const void* GetRawNoDataValue() const;
bool SetRawNoDataValue(const void* pRawNoData);

and 2 helpers that get/set as double for the common cases.

Even

-- 
Spatialys - Geospatial professional services
http://www.spatialys.com


More information about the gdal-dev mailing list