Справка GDAL GeoTiff для получения высоты в указанном пикселе C++

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

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

Я получаю некоторую информацию из образа через GDAL lib, но я не уверен, что это такое. Это цвет? Это координаты? Что это за единство? Меня также смущают разные группы, в которых я могу читать. Может быть, кто-то, кто использовал 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];
 }
 }

person mixed_farmer    schedule 19.05.2014    source источник


Ответы (2)


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

person fedemp    schedule 25.05.2014

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

person mixed_farmer    schedule 28.05.2014