如何将GDALResampleAlg传递给GDAL的RasterIO?

问题描述:

所述的RasterIO方法具有使用GDALRasterIOExtraArg结构一个GDALResampleAlg选项:如何将GDALResampleAlg传递给GDAL的RasterIO?

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++不够好,看看如何实际使用它,我无法找到我可以遵循任何足以例子,使其工作。

这里是一个办法,有一个宏INIT_RASTERIO_EXTRA_ARG,设置了额外的精氨酸结构,此处列出:

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

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

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