如何将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);