如何将 GDALResampleAlg 传递给 GDAL 的 RasterIO?
how to pass in a GDALResampleAlg to GDAL's RasterIO?
RasterIO
方法有一个使用 GDALRasterIOExtraArg
结构的 GDALResampleAlg
选项:
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
可以设置 extra-arg 结构,在此处列出:
http://www.gdal.org/gdal_8h.html#a16efcda82b88e49244dbbf4d5d2157c4
然后将 eResampleAlg
属性 设置为适当的常量。某些情况下需要一些其他 extra-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);
RasterIO
方法有一个使用 GDALRasterIOExtraArg
结构的 GDALResampleAlg
选项:
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
可以设置 extra-arg 结构,在此处列出:
http://www.gdal.org/gdal_8h.html#a16efcda82b88e49244dbbf4d5d2157c4
然后将 eResampleAlg
属性 设置为适当的常量。某些情况下需要一些其他 extra-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);