[gdal-dev] Experiments with the gdal_grid C API

Joaquim Manuel Freire Luís jluis at ualg.pt
Tue Jan 28 04:26:34 PST 2020


Hi Even,

I'm playing with the C API for the GDAL programs inside GMT. More specifically with the gdal_grid C API. All in all I managed to make it work but there are some issues.
The main problem is that apparently the API was not thought to keep the result in memory.

What ended up doing was this

               hDstDS = GDALGrid("NUL", hSrcDS, psOptions, &bUsageError);
...
               if ((tmp = calloc((size_t)nYSize * (size_t)nXSize, nPixelSize)) == NULL) {
                              GMT_Report (GMT->parent, GMT_MSG_NORMAL, "gdalread: failure to allocate enough memory\n");
                              GDALDestroyDriverManager();
                              return -1;
               }

               if ((gdal_code = GDALRasterIO(hBand, GF_Read, 0, 0, nXSize, nYSize, tmp,
                               nXSize, nYSize, GDALGetRasterDataType(hBand), 0, 0)) != CE_None) {
                              GMT_Report (GMT->parent, GMT_MSG_NORMAL, "GDALRasterIO failed to open band [err = %d]\n", gdal_code);
               }

-Note that I'm using "NUL" for the output file name because that was the only way I found to prevent saving the file in disk (remember, I want to have it memory).

-The second thing not shown above is that I had to use "-ot GTiff" in the psOptions. Using "-ot Memory" lead to errors.

-Although using "NUL" works, GDAL prints these error messages when at the end I close the DS (GDALClose(hSrcDS);)
               ERROR 1: TIFFScanlineSize64:Computed scanline size is zero
               ERROR 1: TIFFWriteEncodedStrip:Must set "ImageWidth" before writing data
               ERROR 1: FillEmptyTiles() failed because panByteCounts == NULL

-Last thing. I was forced to make a copy of the array in order to extract the grid  from the hDstDS handle via GDALRasterIO().

Ok, so my questions are. Is there a better way to do this? Could we, by some mean, send in a pre-allocated array and owned by the external program to the API so the duplication step could be avoided?

Thanks

Joaquim
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20200128/9699b5c5/attachment.html>


More information about the gdal-dev mailing list