Привет. Я пытаюсь перебрать значения набора растровых данных (band1). Я могу сделать это в python с помощью следующего фрагмента кода ( извините, я не могу предоставить оригинальный растр )
import numpy as np
import gdal
path = "data/Isle_wight.tif"
ds = gdal.Open(path)
myarray = np.array(ds.GetRasterBand(1).ReadAsArray())
print(myarray.shape[0])
#print(columns)
for j in range(myarray.shape[0]-1):
for i in range(myarray.shape[1]-1):
print( myarray[j][i])
Моя цель - повторить то же самое в C-GDAL,
вот мой фрагмент кода (, который не работает )
#include "gdal/gdal.h"
#include "gdal/cpl_conv.h"
int main()
{
GDALDatasetH raster;
GDALAllRegister();
raster = GDALOpen( "/home/roger/Documents/98_GDAL_C++_snippets/data/Isle_wight.tif", GA_ReadOnly);
if(raster==NULL)
{
printf("Invalid Raster Dataset");
}
else
{
GDALRasterBandH raster_band;
int XSize, YSize;
raster_band = GDALGetRasterBand( raster, 1);
GDALGetBlockSize( raster_band, &XSize, &YSize);
float *pafScanline;
int nXSize = GDALGetRasterBandXSize (raster_band);
int nYSize = GDALGetRasterBandYSize (raster_band);
pafScanline = (float*) CPLMalloc(sizeof(float)*nXSize);
int address_of_pafScanline = *pafScanline;
int band1[nXSize][nYSize];
int band1 = GDALRasterIO(raster_band, 0, 0,GF_Read, nXSize, 1, pafScanline, nXSize, 1, GDT_Float32, 0, 0);
for(int i = 0; i <= nXSize; i++) {
for(int j = 0; j < nYSize; j++ ) {
printf("%d", band1[i][j]);
}
}
}
}
Вопрос: Что возвращает GDALRasterIO ?, Я сделал объявление массива при записи в строке25:
int band1[nXSize][nYSize],
А затем я читаю растровые данные и назначаю их предыдущему массиву band1 в следующей строке (26):
int band1 = GDALRasterIO(raster_band, 0, 0,GF_Read, nXSize, 1, pafScanline, nXSize, 1, GDT_Float32, 0, 0);
При компиляции с помощью
cc open_array.c -o open_array -lgdal
Я получил следующую ошибку:
open_array.c: In function ‘main’:
open_array.c:26:9: error: conflicting types for ‘band1’
int band1 = GDALRasterIO(raster_band, 0, 0,GF_Read, nXSize, 1, pafScanline, nXSize, 1, GDT_Float32, 0, 0);
^~~~~
open_array.c:25:9: note: previous declaration of ‘band1’ was here
int band1[nXSize][nYSize];
^~~~~
open_array.c:29:31: error: subscripted value is neither array nor pointer nor vector
printf("%d", band1[i][j]);
Почему это происходит? Должен ли я избавиться от объявления в строке 25?
Заранее спасибо