GDAL GeoTiff получить высоту при помощи заданного пикселя. Переполнение стека.

Я не очень хорошо понимаю английский, и я не лучший программист C ++, поэтому я решил задать вопрос здесь, чтобы компенсировать это.

Я пытаюсь получить высоту из изображения GeoTiff, которое я скачал с этой страницы: http://terracolor.net/sample_imagery.html

Я получаю некоторую информацию из образа через lib GDAL, но я не уверен, что именно это. Это цвет? Это координаты? Что это за единство?
Меня также смущают различные группы, в которых я могу читать. Может быть, кто-то, кто использовал GDAL в прошлом, может объяснить мне, что это такое. В конце концов, мне нравится иметь высоту, например, в метрах от заданного пикселя.

Вот мой код:

int ofApp::getAlt(int x,int y){
GDALDataset  *poDataset;

GDALAllRegister();

poDataset = (GDALDataset *) GDALOpen( "data/test.tif", GA_ReadOnly );
if( poDataset == NULL )
{
cout << "no" << endl;
}else{
GDALRasterBand  *poBand;
int             nBlockXSize, nBlockYSize;
int             bGotMin, bGotMax;
double          adfMinMax[2];

//printf( "Size is %dx%dx%d\n", poDataset->GetRasterXSize(), poDataset->GetRasterYSize(), poDataset->GetRasterCount() );

poBand = poDataset->GetRasterBand( 3 );
poBand->GetBlockSize( &nBlockXSize, &nBlockYSize );

adfMinMax[0] = poBand->GetMinimum( &bGotMin );
adfMinMax[1] = poBand->GetMaximum( &bGotMax );
if( ! (bGotMin && bGotMax) )
GDALComputeRasterMinMax((GDALRasterBandH)poBand, TRUE, adfMinMax);

float *pafScanline;
int   nXSize = poBand->GetXSize();

pafScanline = (float *) CPLMalloc(sizeof(float)*nXSize);
poBand->RasterIO( GF_Read, x, y, 1, 1,
pafScanline, nXSize, 1, GDT_Float32,
0, 0 );

//cout << "vvv" << pafScanline[0] << endl;
//printf( "value %f \n", pafScanline[0]);
return pafScanline[0];
}
}

0

Решение

Эти файлы GeoTIFF, предоставленные Terracolor, содержат информацию о цвете, а не высоту. Файлы имеют пиксельные цвета в пространстве RGB, есть три полосы (1: красная, 2: зеленая, 3: синяя).
Вы можете обрабатывать файлы GeoTIFF с помощью кода, похожего на ваш пример, но вам нужно будет прочитать три раздела. Тип данных — Байт, а не GDT_Float32.
Перед обработкой их с помощью GDAL я бы посоветовал проверить у поставщика данных или открыть некоторые из этих растровых слоев с помощью программного обеспечения ГИС (например, QGIS). Файлы .tif, кажется, поставляются с метаданными в файлах .txt.

0

Другие решения

Вы правы. Какая простая ошибка. Эти изображения, которые я использовал, не имели таких данных о возвышении, как полоса. Я теперь использовал изображения из http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp которые предоставляют необходимые данные в группе, как мне это нужно. Затем я могу использовать свою функцию, чтобы прочитать это.

0