如何将GDALResampleAlg传递给GDAL的RasterIO?

时间:2017-08-31 09:38:05

标签: c++ gdal

使用RasterIO结构GDALResampleAlg方法有GDALRasterIOExtraArg选项:

http://www.gdal.org/structGDALRasterIOExtraArg.html

GDAL tutorial有一个这样的示例,用于从栅格波段读取数据:

  poBand->RasterIO( GF_Read, Xoffset, Yoffset, nXSize, nYSize,
                    pafScanline, outXSize, outYSize, GDT_Float32,
                    0, 0);

并且未使用的第12个参数可以采用GDALRasterIOExtraArg中的重采样选项。

http://www.gdal.org/classGDALRasterBand.html#a30786c81246455321e96d73047b8edf1

如何编写C ++实际传入选项?我可以从常量中实例化选项:

 // how to pass this option in to RasterIO?
  GDALResampleAlg eResampleAlg = GRA_NearestNeighbour;

但是我不太了解C ++,看看如何实际使用它,我找不到任何足以让它发挥作用的例子。

1 个答案:

答案 0 :(得分:0)

这是一种方法,有一个宏INIT_RASTERIO_EXTRA_ARG设置了额外的arg结构,在这里列出:

http://www.gdal.org/gdal_8h.html#a16efcda82b88e49244dbbf4d5d2157c4

然后将eResampleAlg属性设置为适当的常量。某些情况下需要一些其他额外的arg参数,但这超出了本问题的范围。

float *pafScanline;

GDALRasterIOExtraArg psExtraArg;
INIT_RASTERIO_EXTRA_ARG(psExtraArg);
// TODO expose the resampling options to user
psExtraArg.eResampleAlg = GRIORA_NearestNeighbour;
pafScanline = (float *) CPLMalloc(sizeof(float)*outXSize*outYSize);
CPLErr err = poBand->RasterIO( GF_Read, Xoffset, Yoffset, nXSize, nYSize,
                pafScanline, outXSize, outYSize, GDT_Float32,
                0, 0, &psExtraArg);

请点击此处查看更多http://www.gdal.org/structGDALRasterIOExtraArg.html