2017-08-31 25 views
0

所述的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++不夠好,看看如何實際使用它,我無法找到我可以遵循任何足以例子,使其工作。

回答

0

這裏是一個辦法,有一個宏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